10#include <unordered_map>
86 float x = 0.0f,
y = 0.0f,
w = 0.0f,
h = 0.0f;
197 float x = 0.0f,
y = 0.0f,
w = 0.0f,
h = 0.0f;
369 float panel_x = -1,
float panel_y = -1,
370 float panel_w = -1,
float panel_h = -1);
387 return (
i >= 0 &&
i <
static_cast<int>(elements_.size())) ? elements_[
i].note : -1;
421 static const std::string kEmpty;
422 return (
i >= 0 &&
i <
static_cast<int>(elements_.size())) ? elements_[
i].action : kEmpty;
443 return (
i >= 0 &&
i <
static_cast<int>(elements_.size())) ? elements_[
i].value_y : 0.5f;
447 return (
i >= 0 &&
i <
static_cast<int>(elements_.size())) ? elements_[
i].target_frame : -1;
451 static const std::string kEmpty;
452 return (
i >= 0 &&
i <
static_cast<int>(elements_.size())) ? elements_[
i].text : kEmpty;
506 static const std::string kEmpty;
507 return (
i >= 0 &&
i <
static_cast<int>(elements_.size())) ? elements_[
i].display_text
523 elements_[
i].display_text_bound;
528 return (
i >= 0 &&
i <
static_cast<int>(elements_.size())) && elements_[
i].value_left_align;
534 static const std::string kEmpty;
535 return (
i >= 0 &&
i <
static_cast<int>(elements_.size())) ? elements_[
i].source_node_id
543 static const std::string kEmpty;
544 return (
i >= 0 &&
i <
static_cast<int>(elements_.size())) ? elements_[
i].param_key
553 if (key.empty())
return -1;
555 if (elements_[
i].param_key == key)
return i;
577 std::shared_ptr<ScalarSource> source);
608 int add_frame(std::string svg, std::vector<DesignFrameElement> elements,
609 float panel_x = -1,
float panel_y = -1,
610 float panel_w = -1,
float panel_h = -1);
613 int frame_count()
const {
return static_cast<int>(frames_.size()); }
659 const std::vector<UnregisteredCustomControl>&
661 return unregistered_custom_;
880 return fragments_.find(
id) != fragments_.end();
887 const std::string& recolor_hex = {})
const;
892 const std::string& recolor_hex = {})
const;
951 int resolve_value_count(
int i)
const;
955 float choice_to_norm(
int i,
int selected)
const;
956 int norm_to_choice(
int i,
float v)
const;
959 void notify_choice(
int i,
int selected);
984 void build_overlays();
991 std::vector<DesignFrameElement> elements;
992 float svg_w = 0.0f, svg_h = 0.0f;
993 float panel_x = 0.0f, panel_y = 0.0f, panel_w = 0.0f, panel_h = 0.0f;
997 Frame build_frame(std::string svg, std::vector<DesignFrameElement> elements,
998 float panel_x,
float panel_y,
float panel_w,
float panel_h)
const;
1001 void activate_frame(
int index);
1003 int hit_element(
Point pos)
const;
1008 struct Overlay {
int element_index = -1;
View* widget =
nullptr; };
1013 std::unique_ptr<DesignParamBinding> binding_;
1016 std::vector<DesignFrameElement> elements_;
1017 std::vector<Overlay> overlays_;
1018 float svg_w_ = 0.0f, svg_h_ = 0.0f;
1019 float panel_x_ = 0, panel_y_ = 0, panel_w_ = 0, panel_h_ = 0;
1021 float drag_start_x_ = 0.0f, drag_start_y_ = 0.0f, drag_start_value_ = 0.0f;
1022 int active_view_group_ = -1;
1025 std::function<void(
const UnregisteredCustomControl&)> on_unregistered_custom_;
1026 std::vector<UnregisteredCustomControl> unregistered_custom_;
1028 std::vector<Frame> frames_;
1029 int active_frame_ = 0;
1030 bool route_to_host_params_ =
false;
1031 bool route_actions_to_host_ =
false;
1032 int hovered_element_ = -1;
1033 std::unordered_map<std::string, std::string> fragments_;
1039 bool current_svg_draw_box(
float& ox,
float& oy,
float& ow,
float& oh)
const;
1042 void set_hovered_element(
int i);
1055 int tab_count()
const {
return static_cast<int>(labels_.size()); }
1067 std::vector<std::string> labels_;
1094 std::vector<std::string> options_;
Definition canvas.hpp:240
Definition design_frame_view.hpp:222
std::function< void(float)> on_control_changed
Definition design_frame_view.hpp:236
std::function< void()> on_gesture_begin
Definition design_frame_view.hpp:244
virtual ~DesignControl()=default
std::function< void()> on_gesture_end
Definition design_frame_view.hpp:245
virtual float control_value() const =0
virtual void set_control_value(float value)=0
int add_frame(std::string svg, std::vector< DesignFrameElement > elements, float panel_x=-1, float panel_y=-1, float panel_w=-1, float panel_h=-1)
bool element_has_scalar_source(int i) const
Whether element i of the active frame has a scalar source bound.
void route_changes_to_host_params(bool enable)
Definition design_frame_view.hpp:704
void layout_children() override
float element_value_y(int i) const
Definition design_frame_view.hpp:442
float intrinsic_width() const override
Intrinsic content size (override in widgets that know their natural size).
Definition design_frame_view.hpp:905
std::function< void(const std::string &action)> on_action
Definition design_frame_view.hpp:676
float intrinsic_height() const override
Definition design_frame_view.hpp:906
bool has_fragment(const std::string &id) const
Definition design_frame_view.hpp:879
void build_bind_grid(std::vector< std::string > keys)
bool routes_changes_to_host_params() const
Definition design_frame_view.hpp:705
void set_element_value(int i, float v)
bool draw_fragment(canvas::Canvas &canvas, const std::string &id, const FragmentTransform &xform={}, float opacity=1.0f, const std::string &recolor_hex={}) const
const std::vector< std::string > & bind_grid_keys() const
void set_active_frame(int index)
bool element_hit_point(int i, Point &out) const
const std::string & element_source_node_id(int i) const
Definition design_frame_view.hpp:533
const std::string & element_action(int i) const
Definition design_frame_view.hpp:420
float element_value(int i) const
void emit_element_changed(int i, float value)
float element_scalar(int i) const
The latest value published for element i of the ACTIVE frame, or 0 when i is out of range or its elem...
Rect element_rect(int i) const
float panel_width() const
Definition design_frame_view.hpp:378
const std::string & element_display_text(int i) const
Definition design_frame_view.hpp:505
const std::vector< UnregisteredCustomControl > & unregistered_custom_controls() const
Definition design_frame_view.hpp:660
void on_mouse_down(Point pos) override
std::function< void(int index)> on_gesture_begin
Definition design_frame_view.hpp:671
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 design_frame_view.hpp:915
bool element_left_align(int i) const
Definition design_frame_view.hpp:527
View * overlay_widget(int i) const
void on_hover_move(Point pos) override
Pointer moved over this view with no button held, reported in this view's LOCAL coordinates.
void emit_gesture_begin(int i)
void paint(canvas::Canvas &canvas) override
bool element_is_hovered(int i) const
Definition design_frame_view.hpp:865
int element_count() const
Definition design_frame_view.hpp:377
void sync_from_host_params()
void set_on_param_scale_mismatch(std::function< void(const ParamScaleMismatch &)> cb)
void set_element_scalar_source(const std::string ¶m_key, std::shared_ptr< ScalarSource > source)
void commit_bipolar(const std::string &key, float depth)
const std::string & element_text(int i) const
Definition design_frame_view.hpp:450
void set_element_enabled(int i, bool enabled)
bool element_has_display_text(int i) const
Definition design_frame_view.hpp:521
void on_mouse_up(Point pos) override
void commit_discrete(const std::string &key, int index)
DesignFrameElement::Kind element_kind(int i) const
bool draw_fragment_marker(canvas::Canvas &canvas, const std::string &marker, const FragmentTransform &xform={}, float opacity=1.0f, const std::string &recolor_hex={}) const
void on_mouse_leave() override
bool routes_actions_to_host() const
Definition design_frame_view.hpp:850
DesignFrameView(std::string svg, std::vector< DesignFrameElement > elements, float panel_x=-1, float panel_y=-1, float panel_w=-1, float panel_h=-1)
PanelTransform panel_transform(const Rect &bounds) const
void set_element_text(int i, std::string text)
int element_option_count(int i) const
void on_mouse_drag(Point pos) override
int element_for_param_key(const std::string &key) const
Definition design_frame_view.hpp:552
float panel_height() const
Definition design_frame_view.hpp:379
int element_target_frame(int i) const
Definition design_frame_view.hpp:446
void set_on_unregistered_custom_control(std::function< void(const UnregisteredCustomControl &)> cb)
int element_hovered() const
Definition design_frame_view.hpp:864
virtual void on_active_frame_changed()
Definition design_frame_view.hpp:924
std::function< void(int index, const std::string &key)> on_param_key_changed
Definition design_frame_view.hpp:728
std::function< void(int index, bool entered)> on_element_hover
Definition design_frame_view.hpp:866
void commit_value(const std::string &key, float normalized)
bool element_enabled(int i) const
Definition design_frame_view.hpp:899
const std::string & element_param_key(int i) const
Definition design_frame_view.hpp:542
void route_actions_to_host(bool enable)
Definition design_frame_view.hpp:849
int active_view_group() const
Definition design_frame_view.hpp:593
void set_element_param_key(int i, std::string key)
const std::vector< ParamScaleMismatch > & param_scale_mismatches() const
std::function< void(int index)> on_gesture_end
Definition design_frame_view.hpp:672
void emit_gesture_end(int i)
void set_active_view_group(int group)
bool element_is_bind_grid_stand_in(int i) const
int frame_count() const
Definition design_frame_view.hpp:613
bool element_is_discrete(int i) const
int active_frame() const
Definition design_frame_view.hpp:612
int element_note(int i) const
Definition design_frame_view.hpp:386
std::function< void(int index, float value)> on_element_changed
Definition design_frame_view.hpp:670
void register_fragment(std::string id, std::string marker)
Definition design_param_binding.hpp:27
void set_selected_silent(int index)
void paint(canvas::Canvas &canvas) 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 design_frame_view.hpp:1091
DesignStepper(std::vector< std::string > options, int selected)
int selected() const
Definition design_frame_view.hpp:1080
const std::string & current() const
std::function< void(int index)> on_select
Definition design_frame_view.hpp:1087
void on_mouse_down(Point pos) override
int option_count() const
Definition design_frame_view.hpp:1081
void set_selected_silent(int index)
std::function< void(int index)> on_select
Definition design_frame_view.hpp:1060
int tab_count() const
Definition design_frame_view.hpp:1055
void paint(canvas::Canvas &canvas) override
void on_mouse_down(Point pos) 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 design_frame_view.hpp:1064
DesignTabGroup(std::vector< std::string > labels, int selected)
int selected() const
Definition design_frame_view.hpp:1054
float opacity() const
Definition view.hpp:1117
@ group
Definition view.hpp:989
@ text
Definition view.hpp:2742
bool enabled() const
CSS :disabled equivalent — blocks input, reduces opacity.
Definition view.hpp:715
Rect bounds() const
Definition view.hpp:84
Definition affine_transform.hpp:24
Hover-cursor tracking for platform window hosts.
Definition fwd.hpp:27
std::function< std::unique_ptr< View >(const DesignControlContext &)> DesignControlFactory
Definition design_frame_view.hpp:210
bool suppress_svg_rect(std::string &svg, float x, float y, float w, float h, float tol=2.0f)
void register_design_control_factory(std::string factory_id, DesignControlFactory factory)
bool suppress_svg_glow_at(std::string &svg, float x, float y, float w, float h)
@ value
the widget's primary value (Knob, Fader, RangeSlider, Toggle, ProgressBar)
Definition binding_diagnostics.hpp:19
@ h
Definition input_events.hpp:39
@ y
Definition input_events.hpp:42
@ i
Definition input_events.hpp:40
@ x
Definition input_events.hpp:41
@ v
Definition input_events.hpp:41
@ w
Definition input_events.hpp:41
bool has_design_control_factory(const std::string &factory_id)
void clear_design_control_factories()
bool suppress_svg_glyph_at(std::string &svg, float x, float y, float w, float h)
@ action
Definition design_ir.hpp:490
Definition design_frame_view.hpp:196
std::string factory_id
Definition design_frame_view.hpp:198
std::string props
opaque (typically JSON); Pulp does not parse it
Definition design_frame_view.hpp:199
float w
Definition design_frame_view.hpp:197
float y
Definition design_frame_view.hpp:197
std::string source_node_id
Definition design_frame_view.hpp:200
float x
Definition design_frame_view.hpp:197
float h
Definition design_frame_view.hpp:197
float default_value
opening value.
Definition design_frame_view.hpp:201
Definition design_frame_view.hpp:24
Kind kind
Definition design_frame_view.hpp:64
int selected_index
dropdown / tab selection
Definition design_frame_view.hpp:89
std::string factory_id
For Kind::custom: the id the overlay factory is registered under (register_design_control_factory).
Definition design_frame_view.hpp:131
float h
element rect, SVG coords
Definition design_frame_view.hpp:86
std::string param_key
Optional host-parameter binding id for this control.
Definition design_frame_view.hpp:156
std::string action
For Kind::action: the action id fired (on_action) when clicked, e.g.
Definition design_frame_view.hpp:115
float cy
Definition design_frame_view.hpp:68
std::string needle_d
Definition design_frame_view.hpp:73
std::string source_node_id
Source node id this overlay came from (e.g.
Definition design_frame_view.hpp:142
float x
Definition design_frame_view.hpp:86
bool display_text_bound
Whether display_text came from a host parameter at the last sync, as opposed to being empty because n...
Definition design_frame_view.hpp:184
bool enabled
When false, the element is bypassed/disabled: hit-testing skips it (it cannot be hovered,...
Definition design_frame_view.hpp:83
float value
0..1 (xy_pad: the X axis)
Definition design_frame_view.hpp:74
int note
Raw parsed number: typing keys = relative semitone (0–15), piano keys = absolute MIDI note.
Definition design_frame_view.hpp:101
std::vector< std::string > options
dropdown options / tab labels
Definition design_frame_view.hpp:88
int view_group
View scope for per-view keyboards (e.g.
Definition design_frame_view.hpp:105
std::string text
For Kind::value_label: the live display string painted over the rect (right-aligned to match the desi...
Definition design_frame_view.hpp:121
std::string placeholder
text_field
Definition design_frame_view.hpp:87
float hit_radius
click-target radius, SVG coords
Definition design_frame_view.hpp:69
std::string bg_color
text_field: the design's own field background ("#RRGGBB").
Definition design_frame_view.hpp:94
float w
Definition design_frame_view.hpp:86
bool value_left_align
value_label: left-align the text in the rect instead of right-aligning.
Definition design_frame_view.hpp:126
float cx
pivot / hit center, SVG coords
Definition design_frame_view.hpp:67
Kind
Definition design_frame_view.hpp:60
@ fader
Definition design_frame_view.hpp:60
@ toggle
Definition design_frame_view.hpp:60
@ stepper
Definition design_frame_view.hpp:61
@ custom
Definition design_frame_view.hpp:62
@ momentary
Definition design_frame_view.hpp:61
@ dropdown
Definition design_frame_view.hpp:60
@ knob
Definition design_frame_view.hpp:60
@ xy_pad
Definition design_frame_view.hpp:61
@ text_field
Definition design_frame_view.hpp:60
@ value_label
Definition design_frame_view.hpp:61
@ swap
Definition design_frame_view.hpp:61
@ tab_group
Definition design_frame_view.hpp:60
std::string display_text
Host-formatted readout for param_key, cached by sync_from_host_params() once per tick so paint() can ...
Definition design_frame_view.hpp:180
bool flash
toggle only: press-flash command button (sample next/prev/random, dice).
Definition design_frame_view.hpp:79
int target_frame
For Kind::swap: the frame index to activate when this button is clicked (the swap link target).
Definition design_frame_view.hpp:110
float value_y
0..1 (xy_pad: the Y axis, 0=top)
Definition design_frame_view.hpp:75
std::string custom_props
For Kind::custom: opaque props handed to the factory (typically a JSON string the factory parses).
Definition design_frame_view.hpp:134
float y
Definition design_frame_view.hpp:86
Definition design_frame_view.hpp:312
std::string param_key
the bound host-parameter key
Definition design_frame_view.hpp:313
bool host_has_param
whether a live surface resolved param_key at all.
Definition design_frame_view.hpp:317
int host_step_count
values the host's parameter exposes (authoritative); 0 means the surface reported no index domain
Definition design_frame_view.hpp:315
int ui_option_count
positions the control draws (element_option_count)
Definition design_frame_view.hpp:314
Definition geometry.hpp:20
Axis-aligned rectangle in continuous (float) coordinates.
Definition geometry.hpp:52
Definition design_frame_view.hpp:270
std::string factory_id
the id that had no factory
Definition design_frame_view.hpp:271
std::string source_node_id
the design-source node id (e.g. Figma), if any
Definition design_frame_view.hpp:272
View-side bindings for the paint-safe host→view channels in value_source.hpp.