use glib::object::{IsA, Object, ObjectExt};
use gdk::RGBA;
use gtk::{
traits::{
StyleContextExt,
WidgetExt,
},
Settings,
StateFlags,
Widget,
};
use mg_settings::{self, EnumFromStr, EnumMetaData, SettingCompletion, SpecialCommand};
use app::Mg;
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.widgets.window.style_context();
style_context.color(StateFlags::NORMAL)
}
pub fn reset_colors(&self) {
let style_context = self.widgets.status_bar.style_context();
for class in style_context.list_classes() {
style_context.remove_class(&class);
}
}
pub fn set_dark_theme(&mut self, use_dark: bool) {
let settings = Settings::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.style_context().add_class("blue_background");
}
pub fn color_orange<W: IsA<Object> + IsA<Widget> + WidgetExt>(widget: &W) {
widget.style_context().add_class("orange_background");
}
pub fn color_red<W: IsA<Object> + IsA<Widget> + WidgetExt>(widget: &W) {
widget.style_context().add_class("red_background");
}