TachyonUI 0.1.0
High-performance UI for building tools.
Loading...
Searching...
No Matches
gui_interaction_state.h
Go to the documentation of this file.
1#pragma once
2
3#include <gui_core/gui_id.h>
6
7#include <vector>
8
9namespace tachyon
10{
13
17 {
18 ID m_hoveredID = ID::Invalid();
19 ID m_hoveredDisabledID = ID::Invalid();
20 ID m_activeID = ID::Invalid();
21 ID m_captureID = ID::Invalid();
22 ID m_focusedID = ID::Invalid();
23 ID m_activeWindowID = ID::Invalid();
24 ID m_clickID = ID::Invalid();
25
28 ID m_activeFlashID = ID::Invalid();
29 float m_activeFlashStartSecs = 0.0f;
30 static constexpr float kActiveFlashDuration = 0.12f;
31
33 float m_frameTimeSecs = 0.0f;
34
36 std::vector<ID> m_propagatedHoverIDs;
37 std::vector<ID> m_propagatedFocusedIDs;
38
41 bool m_hoverSuppressed = false;
42
45 bool m_pendingCaptureClear = false;
46
49 ScrollAxis m_focusScrollAxis = ScrollAxis::Both;
50
52 bool m_focusVisible = false;
53
54 MouseButtons m_prevMouseButtonFlags = MouseButtons::None;
55
56 public:
57 ID GetHoveredID() const { return m_hoveredID; }
60 ID GetHoveredDisabledID() const { return m_hoveredDisabledID; }
61 ID GetActiveID() const { return m_activeID; }
62 ID GetCaptureID() const { return m_captureID; }
63 ID GetFocusedID() const { return m_focusedID; }
64 ID GetActiveWindowID() const { return m_activeWindowID; }
65
66 void SetActiveWindowID(ID id) { m_activeWindowID = id; }
67
68 void SetCaptureID(ID id) { m_captureID = id; m_pendingCaptureClear = false; }
69 void ReleaseCaptureID() { m_captureID = ID::Invalid(); m_pendingCaptureClear = false; }
70
71 void SetFocusID(ID id) { m_focusedID = id; m_focusScrollAxis = ScrollAxis::Both; }
72 void SetFocusIDNoScroll(ID id) { m_focusedID = id; m_focusScrollAxis = ScrollAxis::None; }
73 void SetFocusIDScrollAxis(ID id, ScrollAxis a) { m_focusedID = id; m_focusScrollAxis = a; }
74 ScrollAxis ConsumeFocusScrollAxis() { ScrollAxis v = m_focusScrollAxis; m_focusScrollAxis = ScrollAxis::Both; return v; }
75
77 void SetFocusVisible(bool visible) { m_focusVisible = visible; }
78 bool IsFocusVisible() const { return m_focusVisible; }
79
80 void SuppressHover() { m_hoverSuppressed = true; }
81 void ClearHoverSuppression() { m_hoverSuppressed = false; }
82 bool IsHoverSuppressed() const { return m_hoverSuppressed; }
83
84 bool HasBeenClicked(ID id) const { return m_clickID == id; }
85 void SetClicked(ID id) { m_clickID = id; }
86
88 void SetFrameTime(float secs) { m_frameTimeSecs = secs; }
89 float GetFrameTime() const { return m_frameTimeSecs; }
90
93 void FlashActive(ID id) { m_activeFlashID = id; m_activeFlashStartSecs = m_frameTimeSecs; }
94 ID GetActiveFlashID() const { return m_activeFlashID; }
95 bool IsActiveFlashing(ID id) const { return id == m_activeFlashID && (m_frameTimeSecs - m_activeFlashStartSecs) < kActiveFlashDuration; }
96
97 const std::vector<ID>& GetPropagatedHoverIDs() const { return m_propagatedHoverIDs; }
98 const std::vector<ID>& GetPropagatedFocusedIDs() const { return m_propagatedFocusedIDs; }
99 void SetPropagatedHoverIDs(std::vector<ID> v) { m_propagatedHoverIDs = std::move(v); }
100 void SetPropagatedFocusedIDs(std::vector<ID> v) { m_propagatedFocusedIDs = std::move(v); }
101
104 void EndFrame(ID overID, MouseButtons mouseButtons, ID disabledID = ID::Invalid());
105 };
106
107}
The hovered, active, focused and captured elements, the active window, the one-shot click,...
Definition gui_interaction_state.h:17
bool IsActiveFlashing(ID id) const
Definition gui_interaction_state.h:95
ID GetCaptureID() const
Definition gui_interaction_state.h:62
ScrollAxis ConsumeFocusScrollAxis()
Definition gui_interaction_state.h:74
void SetPropagatedFocusedIDs(std::vector< ID > v)
Definition gui_interaction_state.h:100
ID GetHoveredID() const
Definition gui_interaction_state.h:57
void SetFrameTime(float secs)
The frame time in seconds that FlashActive is timed against; set once at BeginFrame.
Definition gui_interaction_state.h:88
void SetCaptureID(ID id)
Definition gui_interaction_state.h:68
const std::vector< ID > & GetPropagatedFocusedIDs() const
Definition gui_interaction_state.h:98
void SuppressHover()
Definition gui_interaction_state.h:80
void SetFocusVisible(bool visible)
Shows the focus ring (:focus-visible), e.g. on a dialog's default button.
Definition gui_interaction_state.h:77
void SetFocusIDNoScroll(ID id)
Definition gui_interaction_state.h:72
void SetPropagatedHoverIDs(std::vector< ID > v)
Definition gui_interaction_state.h:99
float GetFrameTime() const
Definition gui_interaction_state.h:89
void ClearHoverSuppression()
Definition gui_interaction_state.h:81
void FlashActive(ID id)
Reports id as Active for about 120 ms: the pressed look of a keyboard or programmatic activation.
Definition gui_interaction_state.h:93
bool HasBeenClicked(ID id) const
Definition gui_interaction_state.h:84
const std::vector< ID > & GetPropagatedHoverIDs() const
Definition gui_interaction_state.h:97
void SetClicked(ID id)
Definition gui_interaction_state.h:85
ID GetActiveFlashID() const
Definition gui_interaction_state.h:94
bool IsFocusVisible() const
Definition gui_interaction_state.h:78
void SetActiveWindowID(ID id)
Definition gui_interaction_state.h:66
void SetFocusIDScrollAxis(ID id, ScrollAxis a)
Definition gui_interaction_state.h:73
void ReleaseCaptureID()
Definition gui_interaction_state.h:69
ID GetActiveWindowID() const
Definition gui_interaction_state.h:64
ID GetFocusedID() const
Definition gui_interaction_state.h:63
void SetFocusID(ID id)
Definition gui_interaction_state.h:71
void EndFrame(ID overID, MouseButtons mouseButtons, ID disabledID=ID::Invalid())
Applies hover, active-ID edges and deferred capture release; clears the click and expired flash.
ID GetHoveredDisabledID() const
The disabled element under the cursor when nothing is hovered: it takes no input, but shows its toolt...
Definition gui_interaction_state.h:60
bool IsHoverSuppressed() const
Definition gui_interaction_state.h:82
ID GetActiveID() const
Definition gui_interaction_state.h:61
ScrollAxis
Axis mask for scroll-into-view, so e.g. a horizontal sizer doesn't scroll vertically.
Definition gui_scroll_management.h:22
@ Both
Definition gui_scroll_management.h:26
@ None
Definition gui_scroll_management.h:23
MouseButtons
Mouse buttons, combined with |.
Definition gui_input_enums.h:38
@ None
Definition gui_input_enums.h:39
Definition gui_logging.h:24
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