Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
gap_widgets.hpp
Go to the documentation of this file.
1#pragma once
2
3// Gap widgets — the short, finite list of native primitives the "Ink & Signal"
4// design system needs that Pulp didn't already ship: Badge, InlineBanner,
5// Toast, EmptyState, Stepper, PanControl
6// (1-D), Popover, InCanvasDialog, and ChannelStrip.
7//
8// Every widget paints entirely from theme tokens via View::resolve_color, so a
9// token/theme swap restyles it with no code change (the reskin contract — see
10// docs/guides/design-tokens.md).
11
12#include <pulp/view/view.hpp>
14#include <algorithm>
15#include <cmath>
16#include <functional>
17#include <string>
18
19namespace pulp::view {
20
21// Shared semantic tone for status-carrying widgets. Maps to the status.* /
22// accent token family at paint time.
24
25// ── Badge ───────────────────────────────────────────────────────────────
26// Compact pill label — counts, statuses, unit chips ("VST3", "48 kHz").
27class Badge : public View {
28public:
29 Badge() = default;
30 explicit Badge(std::string text, Tone tone = Tone::neutral)
31 : text_(std::move(text)), tone_(tone) {}
32 void set_text(std::string t) { text_ = std::move(t); }
33 void set_tone(Tone t) { tone_ = t; }
34 const std::string& text() const { return text_; }
35 Tone tone() const { return tone_; }
36 void paint(canvas::Canvas& canvas) override;
37 float intrinsic_height() const override { return 22.0f; }
38private:
39 std::string text_ = "Badge";
40 Tone tone_ = Tone::neutral;
41};
42
43// ── InlineBanner ──────────────────────────────────────────────────────────
44// Full-width status message: tone-colored left bar + bold label + message.
45class InlineBanner : public View {
46public:
47 void set_tone(Tone t) { tone_ = t; }
48 void set_label(std::string s) { label_ = std::move(s); }
49 void set_message(std::string s) { message_ = std::move(s); }
50 void paint(canvas::Canvas& canvas) override;
51 float intrinsic_height() const override { return 46.0f; }
52private:
53 Tone tone_ = Tone::info;
54 std::string label_ = "Heads up.";
55 std::string message_ = "";
56};
57
58// ── Toast ─────────────────────────────────────────────────────────────────
59// Transient raised card: accent left bar + title + subtitle + optional action.
60class Toast : public View {
61public:
62 void set_title(std::string s) { title_ = std::move(s); }
63 void set_subtitle(std::string s) { subtitle_ = std::move(s); }
64 void set_action(std::string s) { action_ = std::move(s); }
65 std::function<void()> on_action;
66 void paint(canvas::Canvas& canvas) override;
67 void on_mouse_down(Point pos) override;
68 bool wants_mouse_input() const override { return true; }
69 float intrinsic_height() const override { return 64.0f; }
70private:
71 std::string title_ = "Saved";
72 std::string subtitle_;
73 std::string action_;
74};
75
76// ── EmptyState ──────────────────────────────────────────────────────────
77// Dashed-border placeholder with a muted message + accent call to action.
78class EmptyState : public View {
79public:
80 void set_message(std::string s) { message_ = std::move(s); }
81 void set_action(std::string s) { action_ = std::move(s); }
82 std::function<void()> on_action;
83 void paint(canvas::Canvas& canvas) override;
84 void on_mouse_down(Point pos) override;
85 bool wants_mouse_input() const override { return true; }
86private:
87 std::string message_ = "Nothing here yet";
88 std::string action_;
89};
90
91// ── Stepper ───────────────────────────────────────────────────────────────
92// [−] value [+] numeric stepper. Click the −/+ zones to nudge by step; click
93// the center value to type a number (Enter commits, Esc cancels); scroll-wheel
94// over it to nudge.
95class Stepper : public View {
96public:
97 // ↕ resize cursor advertises the click-and-drag-vertically scrub gesture.
99 void set_value(double v);
100 // Host/preset refreshes write FROM the bound state and must not masquerade
101 // as a user edit by firing on_change (and, through WidgetBridge, opening an
102 // automation gesture and dispatching a JS event).
103 void set_value_silent(double v);
104 double value() const { return value_; }
105 void set_range(double lo, double hi) {
106 if (!std::isfinite(lo) || !std::isfinite(hi)) return;
107 if (lo > hi) std::swap(lo, hi);
108 min_ = lo;
109 max_ = hi;
110 set_value_silent(value_);
112 }
113 void set_minimum(double lo) {
114 if (!std::isfinite(lo)) return;
115 min_ = lo;
116 if (max_ < min_) max_ = min_;
117 set_value_silent(value_);
119 }
120 void set_maximum(double hi) {
121 if (!std::isfinite(hi)) return;
122 max_ = hi;
123 if (min_ > max_) min_ = max_;
124 set_value_silent(value_);
126 }
127 void set_step(double s) {
128 if (std::isfinite(s) && s > 0.0) {
129 step_ = s;
130 set_value_silent(min_ + std::round((value_ - min_) / step_) * step_);
132 }
133 }
134 // Readable because a binder has to convert between this widget's PLAIN
135 // value and the normalized parameter behind it, and the grid it was
136 // configured with is the only honest source for that conversion.
137 double minimum() const { return min_; }
138 double maximum() const { return max_; }
139 double step() const { return step_; }
140 void set_suffix(std::string s) { suffix_ = std::move(s); }
143 void set_designed_overlay(bool enabled) { designed_overlay_ = enabled; request_repaint(); }
144 bool designed_overlay() const { return designed_overlay_; }
145 bool is_editing() const { return editing_; }
148 int hovered_zone() const { return hover_zone_; }
149 int pressed_zone() const { return pressed_zone_; }
150 std::function<void(double)> on_change;
151 void paint(canvas::Canvas& canvas) override;
152 void on_mouse_down(Point pos) override;
153 void on_mouse_drag(Point pos) override;
154 void on_mouse_up(Point pos) override;
155 void on_hover_move(Point local_pos) override;
156 void on_mouse_leave() override;
157 void on_text_input(const TextInputEvent& event) override;
158 bool on_key_event(const KeyEvent& event) override;
159 void on_focus_changed(bool gained) override;
160 bool wants_wheel_value() const override { return true; }
161 bool wants_mouse_input() const override { return true; }
162 void on_wheel(float delta_y) override {
163 // Nudge by the typed decimal precision (wheel_step_) when set, else step_.
164 double s = wheel_step_ > 0.0 ? wheel_step_ : step_;
165 set_value(value_ + (delta_y > 0 ? -s : s));
166 }
167 float intrinsic_height() const override { return 36.0f; }
168private:
169 void commit_edit_();
170 // Every edit-state change goes through here: the caret blinks from the
171 // frame clock, so an editing field must keep continuous frames on, and
172 // must release them once the edit ends.
173 void set_editing_(bool editing) {
174 editing_ = editing;
175 set_continuous_repaint(editing);
176 }
177 int zone_at_(float x) const;
178 double value_ = 0.0, min_ = -24.0, max_ = 24.0, step_ = 1.0;
179 double wheel_step_ = 0.0;
180 std::string suffix_ = "";
181 bool editing_ = false;
182 std::string edit_buffer_;
183 int hover_zone_ = -1;
184 int pressed_zone_ = -1;
185 float press_y_ = 0.0f;
186 double drag_start_value_ = 0.0;
187 bool scrubbing_ = false;
188 bool designed_overlay_ = false;
189};
190
191// ── PanControl (1-D) ──────────────────────────────────────────────────────
192// Bipolar horizontal pan: center detent, accent fill from center to thumb.
193class PanControl : public View {
194public:
195 void set_value(float v); // -1 (L) .. +1 (R)
196 float value() const { return value_; }
197 std::function<void(float)> on_change;
198 void paint(canvas::Canvas& canvas) override;
199 void on_mouse_down(Point pos) override;
200 void on_mouse_drag(Point pos) override;
201 void on_mouse_enter() override;
202 void on_mouse_leave() override;
203 void advance_animations(float dt) override { hover_scale_.advance(dt); }
204 float hover_scale() const { return hover_scale_.value(); }
205 bool wants_wheel_value() const override { return true; }
206 bool wants_mouse_input() const override { return true; }
207 void on_wheel(float delta_y) override { set_value(value_ + (-delta_y) * 0.005f); }
208 float intrinsic_height() const override { return 18.0f; }
209private:
210 float value_ = 0.0f;
211 ValueAnimation hover_scale_{1.0f};
212 void set_from_x(float x);
213};
214
215// ── Popover ───────────────────────────────────────────────────────────────
216// Floating overlay panel (title + body) with an upward tail. A container —
217// children are laid out by the host; this draws the panel chrome + title.
218class Popover : public View {
219public:
220 void set_title(std::string s) { title_ = std::move(s); }
221 void paint(canvas::Canvas& canvas) override;
222private:
223 std::string title_;
224};
225
226// ── InCanvasDialog ──────────────────────────────────────────────────────
227// Modal alert rendered in-canvas (distinct from the OS-level DialogWindow):
228// scrim + raised panel + title + body + confirm (accent/danger) / cancel.
229class InCanvasDialog : public View {
230public:
231 void set_title(std::string s) { title_ = std::move(s); }
232 void set_message(std::string s) { message_ = std::move(s); }
233 void set_confirm_label(std::string s) { confirm_ = std::move(s); }
234 void set_cancel_label(std::string s) { cancel_ = std::move(s); }
235 void set_destructive(bool d) { destructive_ = d; }
236 std::function<void()> on_confirm;
237 std::function<void()> on_cancel;
238 void paint(canvas::Canvas& canvas) override;
239 void on_mouse_down(Point pos) override;
240 bool wants_mouse_input() const override { return true; }
241private:
242 std::string title_ = "Are you sure?";
243 std::string message_;
244 std::string confirm_ = "Confirm";
245 std::string cancel_ = "Cancel";
246 bool destructive_ = false;
247};
248
249// ── ChannelStrip ──────────────────────────────────────────────────────────
250// Packaged mixer strip: label + level meter + vertical fader + 1-D pan.
251// Interactive: dragging the fader column sets the level; dragging the pan row
252// sets the pan. Both are draggable and fire their callbacks, so the strip is a
253// real control, not a static readout.
254class ChannelStrip : public View {
255public:
257 void set_label(std::string s) { label_ = std::move(s); }
258 void set_level(float v) { level_ = std::clamp(v, 0.0f, 1.0f); } // 0..1 fader/meter
259 void set_pan(float v) { pan_ = std::clamp(v, -1.0f, 1.0f); } // -1..1
260 float level() const { return level_; }
261 float pan() const { return pan_; }
262 std::function<void(float)> on_level_change;
263 std::function<void(float)> on_pan_change;
264 void paint(canvas::Canvas& canvas) override;
265 void on_mouse_down(Point pos) override;
266 void on_mouse_drag(Point pos) override;
267 // Scroll-wheel over the strip nudges the level (the most common gesture).
268 bool wants_wheel_value() const override { return true; }
269 bool wants_mouse_input() const override { return true; }
270 void on_wheel(float delta_y) override;
271private:
272 // Map a pointer position to whichever zone it falls in (fader column or
273 // pan row) and update that value. Shared by mouse-down and drag.
274 void handle_pointer_(Point pos);
275 std::string label_ = "Ch";
276 float level_ = 0.7f;
277 float pan_ = 0.0f;
278};
279
280// ── Spinner ─────────────────────────────────────────────────────────────
281// Loading spinner: a faint full-circle track ring with an accent arc.
282// Indeterminate by default — the arc sweeps around as advance_animations()
283// is driven; set_progress(p in [0,1]) pins a determinate arc covering that
284// fraction. Paints entirely from theme tokens (control.track + accent.primary).
285class Spinner : public View {
286 public:
287 // An indeterminate spinner rotates from advance_animations(), so it needs
288 // per-vsync frames for as long as it spins; a determinate one is static.
291 }
292 void set_progress(float p) {
293 progress_ = p;
296 }
297 float progress() const { return progress_; }
298 void advance_animations(float dt) override { phase_ += dt; }
299 float phase() const { return phase_; }
300 void paint(canvas::Canvas& canvas) override;
301 float intrinsic_height() const override { return 24.0f; }
302private:
303 float progress_ = -1.0f;
304 float phase_ = 0.0f;
305};
306
307// ── NumberBox ───────────────────────────────────────────────────────────
308// Compact numeric field shaped as a rounded pill: ‹ value › with chevrons.
309// Click the ‹ / › end zones to step; scroll to nudge; the value + suffix sit
310// centered. Distinct from Stepper (square −/+ zones, taller) — NumberBox is
311// the inline pill form used in the Figma "Buttons & inputs" row.
312class NumberBox : public View {
313public:
314 // ↕ resize cursor advertises the click-and-drag-vertically scrub gesture.
316 void set_value(double v);
317 double value() const { return value_; }
318 void set_range(double lo, double hi) { min_ = lo; max_ = hi; }
319 void set_step(double s) { step_ = s; }
320 void set_suffix(std::string s) { suffix_ = std::move(s); }
321 bool is_editing() const { return editing_; }
324 int hovered_zone() const { return hover_zone_; }
325 int pressed_zone() const { return pressed_zone_; }
326 std::function<void(double)> on_change;
327 void paint(canvas::Canvas& canvas) override;
328 void on_mouse_down(Point pos) override;
329 void on_mouse_drag(Point pos) override;
330 void on_mouse_up(Point pos) override;
331 void on_hover_move(Point local_pos) override;
332 void on_mouse_leave() override;
333 void on_text_input(const TextInputEvent& event) override;
334 bool on_key_event(const KeyEvent& event) override;
335 void on_focus_changed(bool gained) override;
336 bool wants_wheel_value() const override { return true; }
337 bool wants_mouse_input() const override { return true; }
338 void on_wheel(float delta_y) override { set_value(value_ + (delta_y > 0 ? -step_ : step_)); }
339 float intrinsic_height() const override { return 32.0f; }
340private:
341 void commit_edit_();
342 // Every edit-state change goes through here: the caret blinks from the
343 // frame clock, so an editing field must keep continuous frames on, and
344 // must release them once the edit ends.
345 void set_editing_(bool editing) {
346 editing_ = editing;
347 set_continuous_repaint(editing);
348 }
349 int zone_at_(float x) const;
350 double value_ = 0.0, min_ = -24.0, max_ = 24.0, step_ = 1.0;
351 std::string suffix_;
352 bool editing_ = false;
353 std::string edit_buffer_;
354 int hover_zone_ = -1;
355 int pressed_zone_ = -1;
356 float press_y_ = 0.0f;
357 double drag_start_value_ = 0.0;
358 bool scrubbing_ = false;
359};
360
361} // namespace pulp::view
Definition canvas.hpp:240
Badge(std::string text, Tone tone=Tone::neutral)
Definition gap_widgets.hpp:30
Tone tone() const
Definition gap_widgets.hpp:35
void set_tone(Tone t)
Definition gap_widgets.hpp:33
float intrinsic_height() const override
Definition gap_widgets.hpp:37
void paint(canvas::Canvas &canvas) override
const std::string & text() const
Definition gap_widgets.hpp:34
void set_text(std::string t)
Definition gap_widgets.hpp:32
void on_mouse_down(Point pos) override
float level() const
Definition gap_widgets.hpp:260
bool wants_wheel_value() const override
True if this widget adjusts its VALUE on a scroll-wheel over it (knobs, faders, sliders,...
Definition gap_widgets.hpp:268
float pan() const
Definition gap_widgets.hpp:261
std::function< void(float)> on_pan_change
Definition gap_widgets.hpp:263
ChannelStrip()
Definition gap_widgets.hpp:256
void paint(canvas::Canvas &canvas) override
void set_level(float v)
Definition gap_widgets.hpp:258
void on_wheel(float delta_y) override
Adjust the widget's value by a scroll-wheel delta (delta_y positive = scrolled down).
void set_label(std::string s)
Definition gap_widgets.hpp:257
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 gap_widgets.hpp:269
void set_pan(float v)
Definition gap_widgets.hpp:259
std::function< void(float)> on_level_change
Definition gap_widgets.hpp:262
void on_mouse_drag(Point pos) override
Definition gap_widgets.hpp:78
std::function< void()> on_action
Definition gap_widgets.hpp:82
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 gap_widgets.hpp:85
void set_action(std::string s)
Definition gap_widgets.hpp:81
void paint(canvas::Canvas &canvas) override
void set_message(std::string s)
Definition gap_widgets.hpp:80
void on_mouse_down(Point pos) override
Definition gap_widgets.hpp:229
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 gap_widgets.hpp:240
void set_message(std::string s)
Definition gap_widgets.hpp:232
void set_cancel_label(std::string s)
Definition gap_widgets.hpp:234
std::function< void()> on_cancel
Definition gap_widgets.hpp:237
void set_confirm_label(std::string s)
Definition gap_widgets.hpp:233
void on_mouse_down(Point pos) override
std::function< void()> on_confirm
Definition gap_widgets.hpp:236
void paint(canvas::Canvas &canvas) override
void set_destructive(bool d)
Definition gap_widgets.hpp:235
void set_title(std::string s)
Definition gap_widgets.hpp:231
Definition gap_widgets.hpp:45
void set_label(std::string s)
Definition gap_widgets.hpp:48
float intrinsic_height() const override
Definition gap_widgets.hpp:51
void set_message(std::string s)
Definition gap_widgets.hpp:49
void paint(canvas::Canvas &canvas) override
void set_tone(Tone t)
Definition gap_widgets.hpp:47
void on_hover_move(Point local_pos) override
Pointer moved over this view with no button held, reported in this view's LOCAL coordinates.
bool is_editing() const
Definition gap_widgets.hpp:321
void set_range(double lo, double hi)
Definition gap_widgets.hpp:318
float intrinsic_height() const override
Definition gap_widgets.hpp:339
void on_mouse_drag(Point pos) override
void on_focus_changed(bool gained) override
Called when this view gains or loses focus.
void paint(canvas::Canvas &canvas) override
int hovered_zone() const
Which ‹/› zone is currently hovered / pressed (0 = down, 1 = up, -1 = none).
Definition gap_widgets.hpp:324
void on_mouse_up(Point pos) override
void set_step(double s)
Definition gap_widgets.hpp:319
bool wants_wheel_value() const override
True if this widget adjusts its VALUE on a scroll-wheel over it (knobs, faders, sliders,...
Definition gap_widgets.hpp:336
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 gap_widgets.hpp:337
void set_value(double v)
int pressed_zone() const
Definition gap_widgets.hpp:325
void on_text_input(const TextInputEvent &event) override
Text input from keyboard/IME (separate from key events).
NumberBox()
Definition gap_widgets.hpp:315
std::function< void(double)> on_change
Definition gap_widgets.hpp:326
double value() const
Definition gap_widgets.hpp:317
void on_mouse_leave() override
void on_wheel(float delta_y) override
Adjust the widget's value by a scroll-wheel delta (delta_y positive = scrolled down).
Definition gap_widgets.hpp:338
void on_mouse_down(Point pos) override
bool on_key_event(const KeyEvent &event) override
Key event with modifiers and up/down state.
void set_suffix(std::string s)
Definition gap_widgets.hpp:320
Definition gap_widgets.hpp:193
std::function< void(float)> on_change
Definition gap_widgets.hpp:197
void paint(canvas::Canvas &canvas) override
float value() const
Definition gap_widgets.hpp:196
void on_mouse_leave() override
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 gap_widgets.hpp:206
void on_mouse_drag(Point pos) override
void on_wheel(float delta_y) override
Adjust the widget's value by a scroll-wheel delta (delta_y positive = scrolled down).
Definition gap_widgets.hpp:207
bool wants_wheel_value() const override
True if this widget adjusts its VALUE on a scroll-wheel over it (knobs, faders, sliders,...
Definition gap_widgets.hpp:205
void on_mouse_down(Point pos) override
void set_value(float v)
void on_mouse_enter() override
void advance_animations(float dt) override
Advance any per-widget non-CSS animation state (hover glows, thumb tweens, spinner phase) by dt secon...
Definition gap_widgets.hpp:203
float hover_scale() const
Definition gap_widgets.hpp:204
float intrinsic_height() const override
Definition gap_widgets.hpp:208
Definition gap_widgets.hpp:218
void set_title(std::string s)
Definition gap_widgets.hpp:220
void paint(canvas::Canvas &canvas) override
float phase() const
Definition gap_widgets.hpp:299
Spinner()
Definition gap_widgets.hpp:289
void paint(canvas::Canvas &canvas) override
void set_progress(float p)
Definition gap_widgets.hpp:292
float intrinsic_height() const override
Definition gap_widgets.hpp:301
float progress() const
Definition gap_widgets.hpp:297
void advance_animations(float dt) override
Advance any per-widget non-CSS animation state (hover glows, thumb tweens, spinner phase) by dt secon...
Definition gap_widgets.hpp:298
void set_step(double s)
Definition gap_widgets.hpp:127
void set_suffix(std::string s)
Definition gap_widgets.hpp:140
void on_text_input(const TextInputEvent &event) override
Text input from keyboard/IME (separate from key events).
void on_mouse_up(Point pos) override
void on_mouse_drag(Point pos) override
bool on_key_event(const KeyEvent &event) override
Key event with modifiers and up/down state.
void set_maximum(double hi)
Definition gap_widgets.hpp:120
bool is_editing() const
Definition gap_widgets.hpp:145
std::function< void(double)> on_change
Definition gap_widgets.hpp:150
Stepper()
Definition gap_widgets.hpp:98
double value() const
Definition gap_widgets.hpp:104
double step() const
Definition gap_widgets.hpp:139
void on_hover_move(Point local_pos) override
Pointer moved over this view with no button held, reported in this view's LOCAL coordinates.
int hovered_zone() const
Which −/+ zone is currently hovered / pressed (0 = minus, 1 = plus, -1 = none).
Definition gap_widgets.hpp:148
void on_mouse_leave() override
void set_value_silent(double v)
double maximum() const
Definition gap_widgets.hpp:138
void on_mouse_down(Point pos) override
bool designed_overlay() const
Definition gap_widgets.hpp:144
void on_wheel(float delta_y) override
Adjust the widget's value by a scroll-wheel delta (delta_y positive = scrolled down).
Definition gap_widgets.hpp:162
float intrinsic_height() const override
Definition gap_widgets.hpp:167
void paint(canvas::Canvas &canvas) override
void set_designed_overlay(bool enabled)
Marks a browser-captured control as a live replacement.
Definition gap_widgets.hpp:143
void set_value(double v)
void set_minimum(double lo)
Definition gap_widgets.hpp:113
int pressed_zone() const
Definition gap_widgets.hpp:149
void on_focus_changed(bool gained) override
Called when this view gains or loses focus.
void set_range(double lo, double hi)
Definition gap_widgets.hpp:105
bool wants_wheel_value() const override
True if this widget adjusts its VALUE on a scroll-wheel over it (knobs, faders, sliders,...
Definition gap_widgets.hpp:160
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 gap_widgets.hpp:161
double minimum() const
Definition gap_widgets.hpp:137
Definition gap_widgets.hpp:60
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 gap_widgets.hpp:68
void set_action(std::string s)
Definition gap_widgets.hpp:64
float intrinsic_height() const override
Definition gap_widgets.hpp:69
void on_mouse_down(Point pos) override
std::function< void()> on_action
Definition gap_widgets.hpp:65
void paint(canvas::Canvas &canvas) override
void set_title(std::string s)
Definition gap_widgets.hpp:62
void set_subtitle(std::string s)
Definition gap_widgets.hpp:63
Lightweight, embeddable value animator for widget members.
Definition animation.hpp:293
void request_repaint()
Request that this view's host invalidate and schedule a repaint.
void set_cursor(CursorStyle c)
Definition view.hpp:2760
@ vertical_resize
↕ Up-down resize (SplitView, row borders)
Definition view.hpp:2745
void set_continuous_repaint(bool on)
Opt a custom view into per-vsync repaints — required for live content (meters/spectrum,...
Definition view.hpp:2373
bool enabled() const
CSS :disabled equivalent — blocks input, reduces opacity.
Definition view.hpp:715
void set_focusable(bool f)
Definition view.hpp:669
Definition affine_transform.hpp:24
Hover-cursor tracking for platform window hosts.
Definition fwd.hpp:27
Tone
Definition gap_widgets.hpp:23
@ success
Definition gap_widgets.hpp:23
@ neutral
Definition gap_widgets.hpp:23
@ danger
Definition gap_widgets.hpp:23
@ info
Definition gap_widgets.hpp:23
@ s
Definition input_events.hpp:41
@ d
Definition input_events.hpp:39
@ p
Definition input_events.hpp:40
@ x
Definition input_events.hpp:41
@ v
Definition input_events.hpp:41
@ t
Definition input_events.hpp:41
@ warning
Definition design_ir.hpp:696
@ info
Definition design_ir.hpp:695
STL namespace.
Rich key event with key code, modifiers, and repeat state.
Definition input_events.hpp:193
Definition geometry.hpp:20
Text input from IME or keyboard composition (separate from KeyEvent).
Definition input_events.hpp:210