1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 20:47:45 +00:00

LibGUI: Exit ColorPicker (successfully) when double-clicking a color

It feels natural that if I double click a color button, the dialog
closes successfully and "returns" that color.
This commit is contained in:
Andreas Kling 2020-04-29 19:06:56 +02:00
parent 57fe4d19ac
commit 6a01827046

View file

@ -50,11 +50,13 @@ public:
protected: protected:
virtual void click() override; virtual void click() override;
virtual void doubleclick_event(GUI::MouseEvent&) override;
virtual void paint_event(PaintEvent&) override; virtual void paint_event(PaintEvent&) override;
private: private:
explicit ColorButton(Color color = {}); explicit ColorButton(ColorPicker& picker, Color color = {});
ColorPicker& m_picker;
Color m_color; Color m_color;
bool m_selected { false }; bool m_selected { false };
}; };
@ -310,7 +312,7 @@ void ColorPicker::create_color_button(Widget& container, unsigned rgb)
{ {
Color color = Color::from_rgb(rgb); Color color = Color::from_rgb(rgb);
auto& widget = container.add<ColorButton>(color); auto& widget = container.add<ColorButton>(*this, color);
widget.set_size_policy(SizePolicy::Fill, SizePolicy::Fill); widget.set_size_policy(SizePolicy::Fill, SizePolicy::Fill);
widget.on_click = [this](Color color) { widget.on_click = [this](Color color) {
for (auto& value : m_color_widgets) { for (auto& value : m_color_widgets) {
@ -328,10 +330,10 @@ void ColorPicker::create_color_button(Widget& container, unsigned rgb)
m_color_widgets.append(&widget); m_color_widgets.append(&widget);
} }
ColorButton::ColorButton(Color color) ColorButton::ColorButton(ColorPicker& picker, Color color)
: m_picker(picker)
{ {
m_color = color; m_color = color;
m_selected = false;
} }
ColorButton::~ColorButton() ColorButton::~ColorButton()
@ -343,6 +345,13 @@ void ColorButton::set_selected(bool selected)
m_selected = selected; m_selected = selected;
} }
void ColorButton::doubleclick_event(GUI::MouseEvent&)
{
click();
m_selected = true;
m_picker.done(Dialog::ExecOK);
}
void ColorButton::paint_event(PaintEvent& event) void ColorButton::paint_event(PaintEvent& event)
{ {
Painter painter(*this); Painter painter(*this);