1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
use glib::object::ObjectExt;
use gdk::RGBA;
use gtk::{
IsA,
Object,
Settings,
StateFlags,
StyleContextExt,
Widget,
WidgetExt,
};
use mg_settings::{self, EnumFromStr, EnumMetaData, SettingCompletion, SpecialCommand};
use app::Mg;
const TRANSPARENT: &RGBA = &RGBA { red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0 };
impl<COMM, SETT> Mg<COMM, SETT>
where COMM: Clone + EnumFromStr + EnumMetaData + SpecialCommand + 'static,
SETT: Default + EnumMetaData + mg_settings::settings::Settings + SettingCompletion + 'static,
{
pub fn get_foreground_color(&self) -> RGBA {
let style_context = self.window.get_style_context();
style_context.get_color(StateFlags::NORMAL)
}
pub fn reset_colors(&self) {
let status_bar = self.status_bar.widget();
status_bar.override_background_color(StateFlags::NORMAL, TRANSPARENT);
status_bar.override_color(StateFlags::NORMAL, &self.model.foreground_color);
}
pub fn set_dark_theme(&mut self, use_dark: bool) {
let settings = Settings::get_default().unwrap();
let _ = settings.set_property("gtk-application-prefer-dark-theme", &use_dark);
self.model.foreground_color = self.get_foreground_color();
}
}
pub fn color_blue<W: IsA<Object> + IsA<Widget> + WidgetExt>(widget: &W) {
widget.override_background_color(StateFlags::NORMAL, &RGBA::blue());
white_foreground(widget);
}
pub fn color_orange<W: IsA<Object> + IsA<Widget> + WidgetExt>(widget: &W) {
widget.override_background_color(StateFlags::NORMAL, &RGBA {
red: 0.9,
green: 0.55,
blue: 0.0,
alpha: 1.0 ,
});
white_foreground(widget);
}
pub fn color_red<W: IsA<Object> + IsA<Widget> + WidgetExt>(widget: &W) {
widget.override_background_color(StateFlags::NORMAL, &RGBA::red());
white_foreground(widget);
}
fn white_foreground<W: IsA<Object> + IsA<Widget> + WidgetExt>(widget: &W) {
widget.override_color(StateFlags::NORMAL, &RGBA::white());
}