From 4ddbea7194a240b50b9b50322196f01940277235 Mon Sep 17 00:00:00 2001 From: "ay9thqi3tbqiwbegqsg a[soiaosshasdg" <30902201+alx365@users.noreply.github.com> Date: Wed, 21 Oct 2020 17:57:37 +0000 Subject: [PATCH] added color widget (difference to the color button, is thats its not hidden behind a button so you can always see it. (#38) --- src/widgets/widget_definitions.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/widgets/widget_definitions.rs b/src/widgets/widget_definitions.rs index 3d0e77a..f056697 100644 --- a/src/widgets/widget_definitions.rs +++ b/src/widgets/widget_definitions.rs @@ -22,6 +22,7 @@ pub(super) fn widget_to_gtk_widget(bargs: &mut BuilderArgs) -> Result build_gtk_calendar(bargs)?.upcast(), "color-button" => build_gtk_color_button(bargs)?.upcast(), "expander" => build_gtk_expander(bargs)?.upcast(), + "color-chooser" => build_gtk_color_chooser(bargs)?.upcast(), _ => return Ok(None), }; Ok(Some(gtk_widget)) @@ -178,6 +179,28 @@ fn build_gtk_color_button(bargs: &mut BuilderArgs) -> Result { Ok(gtk_widget) } +/// @widget color-chooser +fn build_gtk_color_chooser(bargs: &mut BuilderArgs) -> Result { + let gtk_widget = gtk::ColorChooserWidget::new(); + let on_change_handler_id: Rc>> = Rc::new(RefCell::new(None)); + resolve_block!(bargs, gtk_widget, { + // @prop use-alpha - bool to wether or not use alpha + prop(use_alpha: as_bool) {gtk_widget.set_use_alpha(use_alpha);}, + + // @prop onchange - runs the code when the color was selected + prop(onchange: as_string) { + let old_id = on_change_handler_id.replace(Some( + gtk_widget.connect_color_activated(move |_a, gtk_widget| { + run_command(&onchange, gtk_widget); + }) + )); + old_id.map(|id| gtk_widget.disconnect(id)); + } + }); + + Ok(gtk_widget) +} + /// @widget scale extends range /// @desc a slider. fn build_gtk_scale(bargs: &mut BuilderArgs) -> Result {