8#include <unordered_map>
78 bool IsWatched(
ID id)
const {
return !m_seen.empty() && m_seen.contains(
id); }
81 std::optional<Blend>
Find(
ID id,
float elapsedSecs)
const;
93 void Clear() { m_transitions.clear(); m_seen.clear(); }
102 void SetReducedMotion(
bool reduced) { m_reducedMotion = reduced;
if (reduced) m_transitions.clear(); }
106 struct TransitionEntry
119 std::unordered_map<ID, TransitionEntry> m_transitions;
120 std::unordered_map<ID, Seen> m_seen;
121 uint32_t m_frame = 0;
122 bool m_enabled =
true;
123 bool m_reducedMotion =
false;
Tracks in-progress visual state transitions per element ID.
Definition gui_transition_manager.h:43
std::optional< Blend > Find(ID id, float elapsedSecs) const
The element's running transition, or nothing when it has none.
bool IsEnabled() const
True unless SetEnabled(false) was called.
Definition gui_transition_manager.h:99
void Clear()
Removes all active transitions, for instance after a reorder invalidates ID mappings.
Definition gui_transition_manager.h:93
static TransitionTiming TimingFor(ElementState fromState, ElementState toState)
The timing of a change from fromState to toState.
void Purge(float elapsedSecs)
Once a frame, after the build: removes transitions that have ended and forgets what OnStateSeen saw o...
void SetReducedMotion(bool reduced)
Reduced motion: every change is instant. Turning it on drops the active transitions.
Definition gui_transition_manager.h:102
void OnStateChange(ID id, ElementState fromState, ElementState toState, TransitionTiming timing, float elapsedSecs)
As above, with its own timing.
bool IsWatched(ID id) const
True when OnStateSeen saw the element the frame before or this one.
Definition gui_transition_manager.h:78
static constexpr TransitionTiming kHoverOut
Definition gui_transition_manager.h:48
static constexpr TransitionTiming kFocus
Definition gui_transition_manager.h:50
void OnStateSeen(ID id, ElementState state, ElementState watched, float elapsedSecs)
For an element whose watched bits change between frames rather than with input (Selected for ElementF...
static constexpr TransitionTiming kRelease
Definition gui_transition_manager.h:49
static constexpr TransitionTiming kHoverIn
Definition gui_transition_manager.h:47
TransitionState Resolve(ID id, VisualBoxStyleIndex base, ElementState currentState, float elapsedSecs) const
The style indices and blend for the element's box base in currentState; fromStyleIndex == toStyleInde...
bool IsReducedMotion() const
Definition gui_transition_manager.h:103
void SetEnabled(bool enabled)
Test/debug seam: when disabled, states snap instantly (deterministic rendering).
Definition gui_transition_manager.h:97
static constexpr TransitionTiming kInvalid
the invalid halo growing in
Definition gui_transition_manager.h:52
void OnStateChange(ID id, ElementState fromState, ElementState toState, float elapsedSecs)
Starts (or retargets) the element's transition, timed by TimingFor.
static constexpr TransitionTiming kToggle
a switch, check box or radio turning on or off
Definition gui_transition_manager.h:51
uint32_t ComputeGPUStyleIndex(VisualBoxStyleIndex base, ElementState state)
Flat GPU style index for a base pool index and state.
VisualBoxStyleIndex
Index into StyleManager's visual box style pool; Invalid (0) = none.
Definition gui_style_ref.h:17
ElementState
Interaction state bits of an element; they pick the Style::states variant it draws with.
Definition gui_style.h:42
constexpr CubicBezier EaseInOut
slow at both ends
Definition gui_easing.h:66
constexpr CubicBezier EaseOut
fast start, long settle
Definition gui_easing.h:65
Definition gui_logging.h:24
A CSS cubic-bezier(x1, y1, x2, y2) timing curve: maps the share of a transition's time that has passe...
Definition gui_easing.h:11
A 64-bit element ID whose bit layout depends on its IDMode.
Definition gui_id.h:23
A running transition: the states it blends between, and how far it is (eased).
Definition gui_transition_manager.h:60
float t
0 = fully fromState, 1 = fully toState
Definition gui_transition_manager.h:63
ElementState fromState
Definition gui_transition_manager.h:61
ElementState toState
Definition gui_transition_manager.h:62
Pre-computed GPU style indices for a box that is mid-transition (or not).
Definition gui_transition_manager.h:21
uint32_t fromStyleIndex
Definition gui_transition_manager.h:22
uint32_t toStyleIndex
Definition gui_transition_manager.h:23
float blendT
0 = fully "from", 1 = fully "to"
Definition gui_transition_manager.h:24
How long a change of state takes, and how it eases. A duration of 0 is instant.
Definition gui_transition_manager.h:29
bool operator==(const TransitionTiming &) const =default
CubicBezier easing
Definition gui_transition_manager.h:31
float duration
seconds
Definition gui_transition_manager.h:30