Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
split_view.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <pulp/view/view.hpp>
4#include <functional>
5
6namespace pulp::view {
7
8// ── SplitView ───────────────────────────────────────────────────────────────
9// Resizable split pane (horizontal/vertical).
10
11class SplitView : public View {
12public:
14
16
18 void set_first(std::unique_ptr<View> view);
19 void set_second(std::unique_ptr<View> view);
20 View* first() const { return first_; }
21 View* second() const { return second_; }
22
24 void set_orientation(Orientation o) { orientation_ = o; }
25 Orientation orientation() const { return orientation_; }
26
28 void set_split_fraction(float f);
29 float split_fraction() const { return split_fraction_; }
30
32 void set_min_first_size(float px) { min_first_ = px; }
33 void set_min_second_size(float px) { min_second_ = px; }
34
36 void set_divider_width(float w) { divider_width_ = w; }
37 float divider_width() const { return divider_width_; }
38
40 std::function<void(float fraction)> on_split_changed;
41
42 void paint(canvas::Canvas& canvas) override;
43 void on_mouse_down(Point pos) override;
44 void on_mouse_up(Point pos) override;
45 void on_mouse_drag(Point pos) override;
46 void on_mouse_event(const MouseEvent& event) override;
47 bool wants_mouse_input() const override { return true; }
48
49 void layout_children() override;
50
51private:
53 float split_fraction_ = 0.5f;
54 float min_first_ = 50.0f;
55 float min_second_ = 50.0f;
56 float divider_width_ = 4.0f;
57 View* first_ = nullptr;
58 View* second_ = nullptr;
59 bool dragging_ = false;
60
61 Rect divider_rect() const;
62 bool is_over_divider(Point pos) const;
63};
64
65} // namespace pulp::view
Definition canvas.hpp:240
void layout_children() override
Orientation orientation() const
Definition split_view.hpp:25
void set_min_first_size(float px)
Minimum size for each pane (pixels).
Definition split_view.hpp:32
float divider_width() const
Definition split_view.hpp:37
float split_fraction() const
Definition split_view.hpp:29
View * second() const
Definition split_view.hpp:21
void set_orientation(Orientation o)
Split orientation.
Definition split_view.hpp:24
void set_second(std::unique_ptr< View > view)
std::function< void(float fraction)> on_split_changed
Callback when split position changes.
Definition split_view.hpp:40
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 split_view.hpp:47
void set_divider_width(float w)
Divider width in pixels.
Definition split_view.hpp:36
void on_mouse_up(Point pos) override
void on_mouse_drag(Point pos) override
Orientation
Definition split_view.hpp:13
@ horizontal
Definition split_view.hpp:13
@ vertical
Definition split_view.hpp:13
void on_mouse_event(const MouseEvent &event) override
Mouse down with full event context.
View * first() const
Definition split_view.hpp:20
void on_mouse_down(Point pos) override
void paint(canvas::Canvas &canvas) override
void set_split_fraction(float f)
Split position as a fraction [0, 1]. Default 0.5.
void set_min_second_size(float px)
Definition split_view.hpp:33
void set_first(std::unique_ptr< View > view)
Set the two child views.
Definition affine_transform.hpp:24
Hover-cursor tracking for platform window hosts.
Definition fwd.hpp:27
@ px
Absolute pixels.
Definition geometry.hpp:393
@ f
Definition input_events.hpp:39
@ o
Definition input_events.hpp:40
@ w
Definition input_events.hpp:41
Rich mouse/pointer event with position, modifiers, button state, pointer ID, and stylus properties.
Definition input_events.hpp:104
Definition geometry.hpp:20
Axis-aligned rectangle in continuous (float) coordinates.
Definition geometry.hpp:52