69 int& sizeValue,
int minSize,
int maxSize,
70 std::function<
void(
int)> onChanged =
nullptr,
71 std::function<
int()> onAutoSize =
nullptr,
72 bool invertMouseDelta =
false,
float pixelsPerUnit = 1.0f);
77 int& sizeValue,
int minSize,
int maxSize,
78 std::function<
void(
int)> onChanged =
nullptr,
79 std::function<
int()> onAutoSize =
nullptr,
80 bool invertMouseDelta =
false,
float pixelsPerUnit = 1.0f);
98 float* value,
int elementWidth,
99 std::function<
void()> onChanged =
nullptr,
100 float minVal = 0.0f,
float maxVal = 1.0f,
158 ID containerID,
bool vertical,
159 int32_t trackLength = 0);
164 uint32_t payloadType,
165 std::function<uintptr_t()> getPayloadValue =
nullptr,
166 std::function<std::any()> getPayload =
nullptr,
173 std::function<
void(uintptr_t payloadValue,
ID sourceID)> onDrop,
174 std::function<
bool(uintptr_t payloadValue)> canDrop =
nullptr);
193 return [&guiStateManager, value, inner = std::move(inner)](
ElementEvent&& event) ->
bool
195 const T before = *value;
196 const ID id =
event.id;
197 const bool used = inner(std::move(event));
198 if (!(*value == before))
209 struct LabelDragSnapshot { T startValue{}; };
211 return [&guiStateManager, &value, config](
ElementEvent&& event)->
bool
217 if (event.state.LeftPressed())
235 auto& snapshot = store.GetOrCreate<LabelDragSnapshot>(
event.id);
236 snapshot.startValue = value;
237 if constexpr (std::is_floating_point_v<T>)
238 if (!std::isfinite(snapshot.startValue)) { snapshot.startValue = T(0); value = T(0); }
244 auto* snapshot = store.Get<LabelDragSnapshot>(
event.id);
245 if (!snapshot)
return false;
246 T newVal = config.Calculate(
static_cast<int32_t
>(event.state.scroll.x),
LabelDragSpeedScale(event.state), snapshot->startValue);
255 if (
auto* snapshot = store.Get<LabelDragSnapshot>(event.id))
256 value = snapshot->startValue;
277 struct Snapshot { T startValue{}; };
279 return [&guiStateManager, &value, config](
ElementEvent&& event) ->
bool
286 auto& snapshot = store.GetOrCreate<Snapshot>(
event.id);
287 snapshot.startValue = value;
288 if constexpr (std::is_floating_point_v<ComponentT>)
289 for (
int i = 0; i < TypeDimensions<T>::dimensions; i++)
293 if (!std::isfinite(startComp)) { startComp = ComponentT(0); comp = ComponentT(0); }
300 auto* snapshot = store.Get<Snapshot>(
event.id);
301 if (!snapshot)
return false;
303 for (
int i = 0; i < TypeDimensions<T>::dimensions; i++)
307 comp = config.Calculate(
static_cast<int32_t
>(event.state.scroll.x), speed, startComp);
316 if (
auto* snapshot = store.Get<Snapshot>(event.id))
317 value = snapshot->startValue;
The frame's element tree.
Definition gui_element_storage.h:100
Owns the per-frame state objects and runs their BeginFrame / EndFrame in order.
Definition gui_state_manager.h:65
ElementDataStore & GetElementDataStore()
Definition gui_state_manager.h:108
InteractionState & Interaction()
Definition gui_state_manager.h:87
TextEditorFocusState & TextEditorFocus()
Definition gui_state_manager.h:96
Text and icon registration, measurement, rendering and editing.
Definition gui_text_system.h:178
void SetClicked(ID id)
Definition gui_interaction_state.h:85
ID GetFocusedID() const
Definition gui_interaction_state.h:63
void SetFocusID(ID id)
Definition gui_interaction_state.h:71
Bakes serializable Styles into deduplicated runtime layout/visual styles; a StyleRef holds indices in...
Definition gui_style_manager.h:39
void Set(ID id)
Definition gui_state_atomic_values.h:42
constexpr int32_t kScrollbarMinThumbLength
Minimum thumb length in CSS pixels (scale with StyleManager::Px), so the thumb stays clickable over h...
Definition gui_default_handlers.h:150
EventHandler MakeDropTargetHandler(uint32_t acceptedPayloadType, std::function< void(uintptr_t payloadValue, ID sourceID)> onDrop, std::function< bool(uintptr_t payloadValue)> canDrop=nullptr)
Drop target handler for acceptedPayloadType; onDrop gets the payload value and the source ID.
bool TextEditorUsesKey(const InputState &state, bool readOnly)
Whether a focused text editor acts on this key (KeyDown/KeyUp), so its handler takes it; the rest rea...
EventHandler MakeButtonHandler(GUIStateManager &guiStateManager, std::function< void()> onClick)
Button handler: a left click, or an activation key while focused, calls onClick.
EventHandler MakeDragSourceHandler(GUIStateManager &guiStateManager, uint32_t payloadType, std::function< uintptr_t()> getPayloadValue=nullptr, std::function< std::any()> getPayload=nullptr, DragVisualizer sourceVisualizer={})
Drag source handler: a left press starts a drag of payloadType, with the value from getPayloadValue (...
EventHandler MakeGroupLabelHandler(GUIStateManager &guiStateManager, const ElementStorage &elementStorage, LabelGroupVisualState groupVisual)
Label group variants: the right edge resizes the shared label width.
EventHandler MakeGroupDraggableLabelHandler(GUIStateManager &guiStateManager, const ElementStorage &elementStorage, LabelGroupVisualState groupVisual)
EventHandler MakeDraggableLabelHandler(GUIStateManager &guiStateManager, const ElementStorage &elementStorage)
Turns mouse drags on a label into LabelDrag* events sent to the next sibling element.
bool IsActivationKey(const ElementEvent &event)
True for a KeyDown of Return, keypad Enter or Space.
Definition gui_default_handlers.h:34
EventHandler MakeHorizontalSizerHandler(GUIStateManager &guiStateManager, const ElementStorage &elementStorage, int &sizeValue, int minSize, int maxSize, std::function< void(int)> onChanged=nullptr, std::function< int()> onAutoSize=nullptr, bool invertMouseDelta=false, float pixelsPerUnit=1.0f)
Sizer handler that drags sizeValue within [minSize, maxSize], calling onChanged with each new size.
EventHandler MakeNumericalBoxHandler(GUIStateManager &guiStateManager, T &value, NumericFieldConfig< T > config={})
Numeric field handler: a left click focuses it for typing, and LabelDrag* events from its label drag ...
Definition gui_default_handlers.h:207
EventHandler MakeMouseWheelScrollHandler(ScrollManagement &scrollManagement, float wheelStep)
Wheel handler that scrolls the element's own scroll offset by wheelStep pixels per notch (StyleManage...
EventHandler MakeScrollbarHandler(GUIStateManager &guiStateManager, ElementStorage &elementStorage, ID containerID, bool vertical, int32_t trackLength=0)
Scrollbar track/thumb handler; writes the scroll offset of containerID (the scrollable parent).
SliderPress
What pressing a slider does: Edit - a click (no drag) opens its value for typing; Jump - the value mo...
Definition gui_default_handlers.h:92
EventHandler MakeSliderHandler(GUIStateManager &guiStateManager, const ElementStorage &elementStorage, float *value, int elementWidth, std::function< void()> onChanged=nullptr, float minVal=0.0f, float maxVal=1.0f, SliderPress press=SliderPress::Edit)
Slider handler for *value in [minVal, maxVal]; elementWidth (pixels, <= 0 is treated as 1) maps drag ...
EventHandler MakeLabelHandler(GUIStateManager &guiStateManager, const ElementStorage &elementStorage)
Label handler: a left click focuses the control bound to the label (else the label).
EventHandler MakeTextBoxHandler(GUIStateManager &guiStateManager)
Text box handler: a left click focuses it for editing; while focused it takes text input and the keys...
EventHandler ReportingChanges(GUIStateManager &guiStateManager, T *value, EventHandler inner)
Wraps a handler that writes *value: it runs during input, after the control's call returned,...
Definition gui_default_handlers.h:191
double LabelDragSpeedScale(const InputState &state)
Label-drag speed multiplier: 0.1 with Ctrl, 10 with Shift (which wins), else 1.
Definition gui_default_handlers.h:179
EventHandler MakeMultiDimDragHandler(GUIStateManager &guiStateManager, T &value, NumericFieldConfig< typename TypeDimensions< T >::ComponentType > config={})
Applies LabelDrag* events to all components (multi-dimensional Field groups).
Definition gui_default_handlers.h:271
EventHandler MakeVerticalSizerHandler(GUIStateManager &guiStateManager, const ElementStorage &elementStorage, int &sizeValue, int minSize, int maxSize, std::function< void(int)> onChanged=nullptr, std::function< int()> onAutoSize=nullptr, bool invertMouseDelta=false, float pixelsPerUnit=1.0f)
Y-axis counterpart of MakeHorizontalSizerHandler; invertMouseDelta grows the size when dragging up.
@ Jump
Definition gui_default_handlers.h:92
@ Edit
Definition gui_default_handlers.h:92
std::function< void(const DragVisualContext &context)> DragVisualizer
Draws the dragged item while a drag is in progress.
Definition gui_drag_drop_state.h:33
Definition gui_logging.h:24
Click-gesture tracker, owned per widget instance so instances (and tests) don't share it.
Definition gui_widget_state_types.h:75
Per-element state of a draggable label (element data store); internal.
Definition gui_default_handlers.h:105
PointerDrag drag
the press; a drag once it moves the drag distance
Definition gui_default_handlers.h:106
An input event delivered to an element's EventHandler.
Definition gui_input_handler_func.h:20
EventType type
Definition gui_input_handler_func.h:22
A 64-bit element ID whose bit layout depends on its IDMode.
Definition gui_id.h:23
static constexpr ID Invalid()
The "no element" ID (all bits zero); also the default for optional ID parameters.
Definition gui_id.h:66
Shared by all labels in a group, so the edge highlight is synchronized.
Definition gui_default_handlers.h:117
const StyleManager * styleManager
for resolving label padding
Definition gui_default_handlers.h:125
ITextSystem * textSystem
for measuring label text widths
Definition gui_default_handlers.h:124
std::vector< TextID > * labelTextIDs
for double-click auto-size
Definition gui_default_handlers.h:123
bool * edgeHovered
a label's resize edge is hovered
Definition gui_default_handlers.h:121
int32_t * sharedWidth
the group's label width, CSS px
Definition gui_default_handlers.h:118
int32_t maxWidth
CSS px.
Definition gui_default_handlers.h:120
StyleRef labelStyleRef
Definition gui_default_handlers.h:126
int32_t minWidth
CSS px.
Definition gui_default_handlers.h:119
bool * edgeDragging
a label's resize edge is being dragged
Definition gui_default_handlers.h:122
Drag speed and range of a numeric Field, specialized per value type.
Definition gui_numeric_field_config.h:19
One press on an element that may become a drag.
Definition gui_pointer_drag.h:41
Per-element state of the sizer handlers (element data store); internal.
Definition gui_default_handlers.h:55
PointerDrag drag
a drag from the press on
Definition gui_default_handlers.h:56
ID previousTextFocusID
Definition gui_default_handlers.h:58
DoubleClickTracker clicks
a double-click auto-sizes
Definition gui_default_handlers.h:60
int startSize
put back by Escape
Definition gui_default_handlers.h:59
ID previousFocusID
focus to give back after the drag
Definition gui_default_handlers.h:57
Per-element state of MakeSliderHandler and the integer slider (element data store); internal.
Definition gui_default_handlers.h:84
bool editMode
set by a clean click: in-place text editing
Definition gui_default_handlers.h:87
float startValue
put back by Escape and a cancelled label drag
Definition gui_default_handlers.h:86
PointerDrag drag
the press on the bar
Definition gui_default_handlers.h:85
A registered style, as StyleManager::Register returns it: indices into the shared style pools,...
Definition gui_style_ref.h:25
T ComponentType
Definition gui_type_dimensions.h:14
static T & GetComponent(T &value, int)
Definition gui_type_dimensions.h:16