TachyonUI 0.1.0
High-performance UI for building tools.
Loading...
Searching...
No Matches
gui_state_atomic_values.h
Go to the documentation of this file.
1#pragma once
2
3#include <assert.h>
4#include <stdint.h>
5
6#include <gui_core/gui_id.h>
8
9// Small state values owned by GUIStateManager.
10
11namespace tachyon
12{
15
16 enum class MouseCursor : uint8_t; // gui_core/style/gui_style.h
17
20 {
22 MouseCursor m_requested{};
23
24 public:
25 void Request(MouseCursor c) { m_requested = c; }
26 void Clear() { m_requested = {}; }
27 MouseCursor Get() const { return m_requested; }
28 };
29
32 {
33 ID m_focusedID = ID::Invalid();
34 ID m_prevFocusedID = ID::Invalid();
35
36 public:
37 ID GetFocusedID() const { return m_focusedID; }
40 ID GetPrevFocusedID() const { return m_prevFocusedID; }
41
42 void Set(ID id) { m_focusedID = id; }
43 void Clear() { m_focusedID = ID::Invalid(); }
44 void Commit() { m_prevFocusedID = m_focusedID; }
45 };
46
50 {
51 uint32_t m_disabledLevel = 0;
52 uint32_t m_selectedLevel = 0;
53 uint32_t m_indeterminateLevel = 0;
54 uint32_t m_invalidLevel = 0;
55
56 public:
57 void PushDisabled() { m_disabledLevel++; }
58 void PopDisabled() { if (m_disabledLevel > 0) m_disabledLevel--; else ReportUnmatchedPop("ConstructionScopes: PopDisabled without PushDisabled (ignored)"); }
59
60 void PushSelected() { m_selectedLevel++; }
61 void PopSelected() { if (m_selectedLevel > 0) m_selectedLevel--; else ReportUnmatchedPop("ConstructionScopes: PopSelected without PushSelected (ignored)"); }
62
63 void PushInvalid() { m_invalidLevel++; }
64 void PopInvalid() { if (m_invalidLevel > 0) m_invalidLevel--; else ReportUnmatchedPop("ConstructionScopes: PopInvalid without PushInvalid (ignored)"); }
65
66 void PushIndeterminate() { m_indeterminateLevel++; }
67 void PopIndeterminate() { if (m_indeterminateLevel > 0) m_indeterminateLevel--; else ReportUnmatchedPop("ConstructionScopes: PopIndeterminate without PushIndeterminate (ignored)"); }
68
69 bool IsDisabled() const { return m_disabledLevel > 0; }
70 bool IsSelected() const { return m_selectedLevel > 0; }
71 bool IsIndeterminate() const { return m_indeterminateLevel > 0; }
72 bool IsInvalid() const { return m_invalidLevel > 0; }
73
74 void Reset() { m_disabledLevel = 0; m_selectedLevel = 0; m_indeterminateLevel = 0; m_invalidLevel = 0; }
77 ConstructionScopes SetAside() { const ConstructionScopes kept = *this; Reset(); return kept; }
78 void Restore(const ConstructionScopes& kept) { *this = kept; }
79 bool IsBalanced() const { return m_disabledLevel == 0 && m_selectedLevel == 0 && m_indeterminateLevel == 0 && m_invalidLevel == 0; }
80
81 private:
83 static void ReportUnmatchedPop(const char* message)
84 {
86 }
87 };
88
89}
Construction-time Push/Pop nesting read by GUIStateManager::GetCurrentState.
Definition gui_state_atomic_values.h:50
void PopDisabled()
Definition gui_state_atomic_values.h:58
bool IsDisabled() const
Definition gui_state_atomic_values.h:69
void Restore(const ConstructionScopes &kept)
Definition gui_state_atomic_values.h:78
void PopSelected()
Definition gui_state_atomic_values.h:61
bool IsBalanced() const
Definition gui_state_atomic_values.h:79
void PushIndeterminate()
Definition gui_state_atomic_values.h:66
void PopIndeterminate()
Definition gui_state_atomic_values.h:67
void PushDisabled()
Definition gui_state_atomic_values.h:57
void Reset()
Definition gui_state_atomic_values.h:74
void PushInvalid()
Definition gui_state_atomic_values.h:63
bool IsIndeterminate() const
Definition gui_state_atomic_values.h:71
ConstructionScopes SetAside()
Clears the scopes for something built inside them that isn't part of them (a tooltip on a disabled co...
Definition gui_state_atomic_values.h:77
bool IsSelected() const
Definition gui_state_atomic_values.h:70
void PopInvalid()
Definition gui_state_atomic_values.h:64
void PushSelected()
Definition gui_state_atomic_values.h:60
bool IsInvalid() const
Definition gui_state_atomic_values.h:72
The mouse cursor requested this frame.
Definition gui_state_atomic_values.h:20
MouseCursor Get() const
Definition gui_state_atomic_values.h:27
void Request(MouseCursor c)
Definition gui_state_atomic_values.h:25
void Clear()
Definition gui_state_atomic_values.h:26
The focused text editor, plus the one as of the last Commit, to detect changes.
Definition gui_state_atomic_values.h:32
void Commit()
Definition gui_state_atomic_values.h:44
ID GetFocusedID() const
Definition gui_state_atomic_values.h:37
void Clear()
Definition gui_state_atomic_values.h:43
ID GetPrevFocusedID() const
The focused editor as of the last Commit, when the text system switched its editor to it: the field t...
Definition gui_state_atomic_values.h:40
void Set(ID id)
Definition gui_state_atomic_values.h:42
constexpr LogCategory MakeLogCategory(std::string_view staticName)
A category named staticName, which must be a static string.
Definition gui_logging.h:41
void ReportMisuse(LogCategory category, const char *message)
API misuse (an unbalanced Begin/End, a call outside its frame, ...) is reported, not fatal: the calle...
MouseCursor
Mouse cursor shown over an element (CSS: cursor).
Definition gui_style.h:478
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