Serenity Operating System
1/*
2 * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
3 * Copyright (c) 2022, the SerenityOS developers.
4 *
5 * SPDX-License-Identifier: BSD-2-Clause
6 */
7
8#pragma once
9
10#include <LibGUI/AbstractButton.h>
11#include <LibGUI/Dialog.h>
12
13namespace GUI {
14
15class ColorButton;
16class ColorPreview;
17class CustomColorWidget;
18class ColorSelectOverlay;
19
20class ColorPicker final : public Dialog {
21 C_OBJECT(ColorPicker)
22
23public:
24 virtual ~ColorPicker() override = default;
25
26 bool color_has_alpha_channel() const { return m_color_has_alpha_channel; }
27 void set_color_has_alpha_channel(bool);
28 Color color() const { return m_color; }
29
30private:
31 explicit ColorPicker(Color, Window* parent_window = nullptr, DeprecatedString title = "Edit Color");
32
33 void build_ui();
34 void build_ui_custom(Widget& root_container);
35 void build_ui_palette(Widget& root_container);
36 void update_color_widgets();
37 void create_color_button(Widget& container, unsigned rgb);
38
39 Color m_color;
40 bool m_color_has_alpha_channel { true };
41
42 Vector<ColorButton&> m_color_widgets;
43 RefPtr<CustomColorWidget> m_custom_color;
44 RefPtr<GUI::VerticalOpacitySlider> m_alpha;
45 RefPtr<ColorPreview> m_preview_widget;
46 RefPtr<Button> m_selector_button;
47 RefPtr<TextBox> m_html_text;
48 RefPtr<SpinBox> m_red_spinbox;
49 RefPtr<SpinBox> m_green_spinbox;
50 RefPtr<SpinBox> m_blue_spinbox;
51 RefPtr<SpinBox> m_alpha_spinbox;
52};
53
54}