Skip to main content

zeus_theme/
visuals.rs

1use egui::{Color32, CornerRadius, Response, Shadow, Stroke};
2
3pub type LabelVisuals = ButtonVisuals;
4
5/// Visuals for a button
6#[derive(Copy, Clone, Debug, Default)]
7#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
8pub struct ButtonVisuals {
9   pub text: Color32,
10   pub bg: Color32,
11   pub bg_hover: Color32,
12   pub bg_click: Color32,
13   pub bg_selected: Color32,
14   pub border: Stroke,
15   pub border_hover: Stroke,
16   pub border_click: Stroke,
17   pub corner_radius: CornerRadius,
18   pub shadow: Shadow,
19}
20
21impl ButtonVisuals {
22   pub fn bg_from_res(&self, res: &Response) -> Color32 {
23      if res.is_pointer_button_down_on() || res.has_focus() || res.clicked() {
24         self.bg_click
25      } else if res.hovered() || res.highlighted() {
26         self.bg_hover
27      } else {
28         self.bg
29      }
30   }
31
32   pub fn border_from_res(&self, res: &Response) -> Stroke {
33      if res.is_pointer_button_down_on() || res.has_focus() || res.clicked() {
34         self.border_click
35      } else if res.hovered() || res.highlighted() {
36         self.border_hover
37      } else {
38         self.border
39      }
40   }
41}
42
43/// Visuals for a TextEdit
44#[derive(Copy, Clone, Debug, Default)]
45#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
46pub struct TextEditVisuals {
47    pub text: Color32,
48    pub bg: Color32,
49    pub border: Stroke,
50    pub border_hover: Stroke,
51    pub border_open: Stroke,
52    pub corner_radius: CornerRadius,
53    pub shadow: Shadow,
54}
55
56impl TextEditVisuals {
57   pub fn border_from_res(&self, res: &Response) -> Stroke {
58      if res.is_pointer_button_down_on() || res.has_focus() || res.clicked() {
59         self.border_open
60      } else if res.hovered() || res.highlighted() {
61         self.border_hover
62      } else {
63         self.border
64      }
65   }
66}
67
68/// Visuals for a ComboBox
69#[derive(Copy, Clone, Debug, Default)]
70#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
71pub struct ComboBoxVisuals {
72   pub bg: Color32,
73   pub icon: Color32,
74   pub bg_hover: Color32,
75   pub bg_open: Color32,
76   pub border: Stroke,
77   pub border_hover: Stroke,
78   pub border_open: Stroke,
79   pub corner_radius: CornerRadius,
80   pub shadow: Shadow,
81}
82
83impl ComboBoxVisuals {
84   pub fn bg_from_res(&self, res: &Response) -> Color32 {
85      if res.is_pointer_button_down_on() || res.has_focus() || res.clicked() {
86         self.bg_open
87      } else if res.hovered() || res.highlighted() {
88         self.bg_hover
89      } else {
90         self.bg
91      }
92   }
93
94   pub fn border_from_res(&self, res: &Response) -> Stroke {
95      if res.is_pointer_button_down_on() || res.has_focus() || res.clicked() {
96         self.border_open
97      } else if res.hovered() || res.highlighted() {
98         self.border_hover
99      } else {
100         self.border
101      }
102   }
103}
104
105#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
106#[derive(Clone, Copy, Debug, Default)]
107pub struct FrameVisuals {
108   pub bg_on_hover: Color32,
109   pub bg_on_click: Color32,
110   pub border_on_hover: (f32, Color32),
111   pub border_on_click: (f32, Color32),
112}