From 1e063595c3fb80916e1731bed41e93610133a5db Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Mon, 10 May 2021 16:59:46 +0200 Subject: [PATCH] Implement reverting to the old color when clicking it in ColorPicker --- scene/gui/color_picker.cpp | 18 +++++++++++++++++- scene/gui/color_picker.h | 1 + 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/scene/gui/color_picker.cpp b/scene/gui/color_picker.cpp index 114abbd4dab..fdee136b828 100644 --- a/scene/gui/color_picker.cpp +++ b/scene/gui/color_picker.cpp @@ -470,6 +470,19 @@ void ColorPicker::_update_text_value() { c_text->set_visible(visible); } +void ColorPicker::_sample_input(const Ref &p_event) { + const Ref mb = p_event; + if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) { + const Rect2 rect_old = Rect2(Point2(), Size2(sample->get_size().width * 0.5, sample->get_size().height * 0.95)); + if (rect_old.has_point(mb->get_position())) { + // Revert to the old color when left-clicking the old color sample. + color = old_color; + _update_color(); + emit_signal("color_changed", color); + } + } +} + void ColorPicker::_sample_draw() { // Covers the right half of the sample if the old color is being displayed, // or the whole sample if it's not being displayed. @@ -1067,6 +1080,7 @@ ColorPicker::ColorPicker() : hb_smpl->add_child(sample); sample->set_h_size_flags(SIZE_EXPAND_FILL); + sample->connect("gui_input", callable_mp(this, &ColorPicker::_sample_input)); sample->connect("draw", callable_mp(this, &ColorPicker::_sample_draw)); btn_pick->set_flat(true); @@ -1210,7 +1224,9 @@ ColorPicker::ColorPicker() : void ColorPickerButton::_about_to_popup() { set_pressed(true); - picker->set_old_color(color); + if (picker) { + picker->set_old_color(color); + } } void ColorPickerButton::_color_changed(const Color &p_color) { diff --git a/scene/gui/color_picker.h b/scene/gui/color_picker.h index 13fe5fd60e4..400074e6e97 100644 --- a/scene/gui/color_picker.h +++ b/scene/gui/color_picker.h @@ -108,6 +108,7 @@ private: void _update_presets(); void _update_text_value(); void _text_type_toggled(); + void _sample_input(const Ref &p_event); void _sample_draw(); void _hsv_draw(int p_which, Control *c); void _slider_draw(int p_which);