aboutsummaryrefslogtreecommitdiff
path: root/alacritty/src/wayland_theme.rs
diff options
context:
space:
mode:
Diffstat (limited to 'alacritty/src/wayland_theme.rs')
-rw-r--r--alacritty/src/wayland_theme.rs82
1 files changed, 82 insertions, 0 deletions
diff --git a/alacritty/src/wayland_theme.rs b/alacritty/src/wayland_theme.rs
new file mode 100644
index 00000000..b1d4b44c
--- /dev/null
+++ b/alacritty/src/wayland_theme.rs
@@ -0,0 +1,82 @@
+use glutin::platform::unix::{ButtonState, Theme as WaylandTheme};
+
+use alacritty_terminal::config::Colors;
+use alacritty_terminal::term::color::{Rgb, DIM_FACTOR};
+
+#[derive(Debug, Clone)]
+pub struct AlacrittyWaylandTheme {
+ pub background: Rgb,
+ pub foreground: Rgb,
+ pub dim_foreground: Rgb,
+ pub hovered_close_icon: Rgb,
+ pub hovered_maximize_icon: Rgb,
+ pub hovered_minimize_icon: Rgb,
+}
+
+impl AlacrittyWaylandTheme {
+ pub fn new(colors: &Colors) -> Self {
+ let hovered_close_icon = colors.normal().red;
+ let hovered_maximize_icon = colors.normal().green;
+ let hovered_minimize_icon = colors.normal().yellow;
+ let foreground = colors.primary.foreground;
+ let background = colors.primary.background;
+ let dim_foreground = colors.primary.dim_foreground.unwrap_or(foreground * DIM_FACTOR);
+
+ Self {
+ foreground,
+ background,
+ dim_foreground,
+ hovered_close_icon,
+ hovered_minimize_icon,
+ hovered_maximize_icon,
+ }
+ }
+
+ fn color_icon_color(&self, color: Rgb, status: ButtonState) -> [u8; 4] {
+ match status {
+ ButtonState::Hovered => [0xff, color.r, color.g, color.b],
+ ButtonState::Idle => [0xff, self.foreground.r, self.foreground.g, self.foreground.b],
+ ButtonState::Disabled => {
+ [0xff, self.dim_foreground.r, self.dim_foreground.g, self.dim_foreground.b]
+ },
+ }
+ }
+}
+
+impl WaylandTheme for AlacrittyWaylandTheme {
+ fn primary_color(&self, _window_active: bool) -> [u8; 4] {
+ [0xff, self.background.r, self.background.g, self.background.b]
+ }
+
+ fn secondary_color(&self, window_active: bool) -> [u8; 4] {
+ if window_active {
+ [0xff, self.foreground.r, self.foreground.g, self.foreground.b]
+ } else {
+ [0xff, self.dim_foreground.r, self.dim_foreground.g, self.dim_foreground.b]
+ }
+ }
+
+ fn close_button_color(&self, _status: ButtonState) -> [u8; 4] {
+ [0x00, self.background.r, self.background.g, self.background.b]
+ }
+
+ fn close_button_icon_color(&self, status: ButtonState) -> [u8; 4] {
+ self.color_icon_color(self.hovered_close_icon, status)
+ }
+
+ fn maximize_button_color(&self, _status: ButtonState) -> [u8; 4] {
+ [0x00, self.background.r, self.background.g, self.background.b]
+ }
+
+ fn maximize_button_icon_color(&self, status: ButtonState) -> [u8; 4] {
+ self.color_icon_color(self.hovered_maximize_icon, status)
+ }
+
+ fn minimize_button_color(&self, _status: ButtonState) -> [u8; 4] {
+ [0x00, self.background.r, self.background.g, self.background.b]
+ }
+
+ fn minimize_button_icon_color(&self, status: ButtonState) -> [u8; 4] {
+ self.color_icon_color(self.hovered_minimize_icon, status)
+ }
+}