Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
color_picker.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <pulp/view/view.hpp>
5#include <functional>
6#include <vector>
7
8namespace pulp::view {
9
10// ── ColorPicker ─────────────────────────────────────────────────────────────
11// HSL/HSB/hex color selection with swatches.
12
13class ColorPicker : public View {
14public:
16
19 Color color() const { return color_; }
20
23 HSL hsl() const { return hsl_; }
24
26 void set_hex(const std::string& hex);
27 std::string hex() const;
28
30 std::function<void(Color)> on_change;
31
33 void set_swatches(std::vector<Color> swatches);
34 const std::vector<Color>& swatches() const { return swatches_; }
35
37 enum class Mode { hsl, hsb, hex_only };
38 void set_mode(Mode m) { mode_ = m; }
39 Mode mode() const { return mode_; }
40
42 void set_show_alpha(bool show) { show_alpha_ = show; }
43 bool show_alpha() const { return show_alpha_; }
44
45 void paint(canvas::Canvas& canvas) override;
46 void on_mouse_down(Point pos) override;
47 void on_mouse_up(Point pos) override;
48 void on_mouse_drag(Point pos) override;
49 void on_mouse_event(const MouseEvent& event) override;
50 bool wants_mouse_input() const override { return true; }
51
52 float intrinsic_height() const override { return 260.0f; }
53
54private:
55 Color color_{};
56 HSL hsl_{};
57 Mode mode_ = Mode::hsl;
58 bool show_alpha_ = false;
59 std::vector<Color> swatches_;
60
61 enum class DragTarget { none, saturation_lightness, hue, alpha, swatch };
62 DragTarget drag_target_ = DragTarget::none;
63
64 Rect sl_area() const; // Saturation/Lightness square
65 Rect hue_bar() const; // Hue slider bar
66 Rect alpha_bar() const; // Alpha slider bar
67 Rect swatch_area() const; // Swatch grid area
68
69 void update_from_hsl();
70 void update_from_color();
71};
72
73} // namespace pulp::view
Definition canvas.hpp:240
void set_swatches(std::vector< Color > swatches)
Preset swatches.
Mode
Display mode.
Definition color_picker.hpp:37
@ hex_only
Definition color_picker.hpp:37
@ hsl
Definition color_picker.hpp:37
@ hsb
Definition color_picker.hpp:37
Color color() const
Definition color_picker.hpp:19
void on_mouse_drag(Point pos) override
void set_color(Color c)
Set/get the current color.
bool show_alpha() const
Definition color_picker.hpp:43
const std::vector< Color > & swatches() const
Definition color_picker.hpp:34
void on_mouse_up(Point pos) override
void on_mouse_event(const MouseEvent &event) override
Mouse down with full event context.
void set_hsl(HSL hsl)
Set/get as HSL.
void paint(canvas::Canvas &canvas) override
void set_show_alpha(bool show)
Show/hide alpha slider.
Definition color_picker.hpp:42
std::function< void(Color)> on_change
Callback when color changes.
Definition color_picker.hpp:30
HSL hsl() const
Definition color_picker.hpp:23
float intrinsic_height() const override
Definition color_picker.hpp:52
void set_hex(const std::string &hex)
Set/get as hex string (e.g., "#ff6600").
bool wants_mouse_input() const override
True if this widget handles mouse down/drag through virtual methods even when it does not expose JS p...
Definition color_picker.hpp:50
Mode mode() const
Definition color_picker.hpp:39
void on_mouse_down(Point pos) override
std::string hex() const
void set_mode(Mode m)
Definition color_picker.hpp:38
Definition affine_transform.hpp:24
Hover-cursor tracking for platform window hosts.
Definition fwd.hpp:27
canvas::Color Color
Definition theme.hpp:12
@ c
Definition input_events.hpp:39
@ m
Definition input_events.hpp:40
canvas::Color::HSL HSL
Definition theme_contrast.hpp:50
Rich mouse/pointer event with position, modifiers, button state, pointer ID, and stylus properties.
Definition input_events.hpp:104
Definition geometry.hpp:20