mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-17 01:06:08 +03:00
apprt/gtk: add theme variant in window-theme
this colours the header bar with the config colour.
This commit is contained in:
@ -179,7 +179,7 @@ pub fn init(core_app: *CoreApp, opts: Options) !App {
|
|||||||
c.adw_style_manager_set_color_scheme(
|
c.adw_style_manager_set_color_scheme(
|
||||||
style_manager,
|
style_manager,
|
||||||
switch (config.@"window-theme") {
|
switch (config.@"window-theme") {
|
||||||
.auto => auto: {
|
.auto, .ghostty => auto: {
|
||||||
const lum = config.background.toTerminalRGB().perceivedLuminance();
|
const lum = config.background.toTerminalRGB().perceivedLuminance();
|
||||||
break :auto if (lum > 0.5)
|
break :auto if (lum > 0.5)
|
||||||
c.ADW_COLOR_SCHEME_PREFER_LIGHT
|
c.ADW_COLOR_SCHEME_PREFER_LIGHT
|
||||||
@ -417,12 +417,20 @@ fn syncActionAccelerator(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn loadRuntimeCss(config: *const Config, provider: *c.GtkCssProvider) !void {
|
fn loadRuntimeCss(config: *const Config, provider: *c.GtkCssProvider) !void {
|
||||||
const fill: Config.Color = config.@"unfocused-split-fill" orelse config.background;
|
const unfocused_fill: Config.Color = config.@"unfocused-split-fill" orelse config.background;
|
||||||
|
const headerbar_background = config.background;
|
||||||
|
const headerbar_foreground = config.foreground;
|
||||||
|
|
||||||
const fmt =
|
const fmt =
|
||||||
\\widget.unfocused-split {{
|
\\widget.unfocused-split {{
|
||||||
\\ opacity: {d:.2};
|
\\ opacity: {d:.2};
|
||||||
\\ background-color: rgb({d},{d},{d});
|
\\ background-color: rgb({d},{d},{d});
|
||||||
\\}}
|
\\}}
|
||||||
|
\\window.ghostty-theme-inherit headerbar,
|
||||||
|
\\window.ghostty-theme-inherit toolbarview > revealer > windowhandle {{
|
||||||
|
\\ background-color: rgb({d},{d},{d});
|
||||||
|
\\ color: rgb({d},{d},{d});
|
||||||
|
\\}}
|
||||||
;
|
;
|
||||||
// The length required is always less than the length of the pre-formatted string:
|
// The length required is always less than the length of the pre-formatted string:
|
||||||
// -> '{d:.2}' gets replaced with max 4 bytes (0.00)
|
// -> '{d:.2}' gets replaced with max 4 bytes (0.00)
|
||||||
@ -434,9 +442,15 @@ fn loadRuntimeCss(config: *const Config, provider: *c.GtkCssProvider) !void {
|
|||||||
fmt,
|
fmt,
|
||||||
.{
|
.{
|
||||||
1.0 - config.@"unfocused-split-opacity",
|
1.0 - config.@"unfocused-split-opacity",
|
||||||
fill.r,
|
unfocused_fill.r,
|
||||||
fill.g,
|
unfocused_fill.g,
|
||||||
fill.b,
|
unfocused_fill.b,
|
||||||
|
headerbar_background.r,
|
||||||
|
headerbar_background.g,
|
||||||
|
headerbar_background.b,
|
||||||
|
headerbar_foreground.r,
|
||||||
|
headerbar_foreground.g,
|
||||||
|
headerbar_foreground.b,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
// Clears any previously loaded CSS from this provider
|
// Clears any previously loaded CSS from this provider
|
||||||
|
@ -87,6 +87,11 @@ pub fn init(self: *Window, app: *App) !void {
|
|||||||
|
|
||||||
c.gtk_window_set_icon_name(gtk_window, "com.mitchellh.ghostty");
|
c.gtk_window_set_icon_name(gtk_window, "com.mitchellh.ghostty");
|
||||||
|
|
||||||
|
// Apply class to color headerbar if window-theme is set to `ghostty`.
|
||||||
|
if (app.config.@"window-theme" == .ghostty) {
|
||||||
|
c.gtk_widget_add_css_class(@ptrCast(gtk_window), "ghostty-theme-inherit");
|
||||||
|
}
|
||||||
|
|
||||||
// Remove the window's background if any of the widgets need to be transparent
|
// Remove the window's background if any of the widgets need to be transparent
|
||||||
if (app.config.@"background-opacity" < 1) {
|
if (app.config.@"background-opacity" < 1) {
|
||||||
c.gtk_widget_remove_css_class(@ptrCast(window), "background");
|
c.gtk_widget_remove_css_class(@ptrCast(window), "background");
|
||||||
|
@ -859,6 +859,8 @@ keybind: Keybinds = .{},
|
|||||||
/// * `system` - Use the system theme.
|
/// * `system` - Use the system theme.
|
||||||
/// * `light` - Use the light theme regardless of system theme.
|
/// * `light` - Use the light theme regardless of system theme.
|
||||||
/// * `dark` - Use the dark theme regardless of system theme.
|
/// * `dark` - Use the dark theme regardless of system theme.
|
||||||
|
/// * `ghostty` - Use the background and foreground colors specified in the ghostty
|
||||||
|
/// config file. This value is only supported with `gtk-adwaita` enabled.
|
||||||
///
|
///
|
||||||
/// On macOS, if `macos-titlebar-style` is "tabs", the window theme will be
|
/// On macOS, if `macos-titlebar-style` is "tabs", the window theme will be
|
||||||
/// automatically set based on the luminosity of the terminal background color.
|
/// automatically set based on the luminosity of the terminal background color.
|
||||||
@ -4048,6 +4050,7 @@ pub const WindowTheme = enum {
|
|||||||
system,
|
system,
|
||||||
light,
|
light,
|
||||||
dark,
|
dark,
|
||||||
|
ghostty,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// See window-colorspace
|
/// See window-colorspace
|
||||||
|
Reference in New Issue
Block a user