Add :css property to widgets

This commit is contained in:
elkowar 2023-07-29 21:53:46 +02:00
parent a470bb816f
commit dc3129aee2
No known key found for this signature in database
GPG key ID: 50E76B4711E4C3E4

View file

@ -142,6 +142,7 @@ pub(super) fn resolve_widget_attrs(bargs: &mut BuilderArgs, gtk_widget: &gtk::Wi
}
let css_provider = gtk::CssProvider::new();
let css_provider2 = css_provider.clone();
let visible_result: Result<_> = try {
let visible_expr = bargs.widget_use.attrs.attrs.get("visible").map(|x| x.value.as_simplexpr()).transpose()?;
@ -207,6 +208,12 @@ pub(super) fn resolve_widget_attrs(bargs: &mut BuilderArgs, gtk_widget: &gtk::Wi
css_provider.load_from_data(format!("* {{ {} }}", style).as_bytes())?;
gtk_widget.style_context().add_provider(&css_provider, gtk::STYLE_PROVIDER_PRIORITY_APPLICATION)
},
// @prop css - scss code applied to the widget, i.e.: `button {color: red;}`
prop(css: as_string) {
gtk_widget.reset_style();
css_provider2.load_from_data(grass::from_string(css, &grass::Options::default())?.as_bytes())?;
gtk_widget.style_context().add_provider(&css_provider2, gtk::STYLE_PROVIDER_PRIORITY_APPLICATION)
},
});
Ok(())
}