1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// devela/src/ui/route/_.rs
//
// public
//!
//! [`HitRegion`] associates a resolved [`UiId`] with the [`UiRect`] that may
//! participate in hit testing. The remaining types represent distinct forms
//! of current interaction ownership or candidacy.
//!
//! ```text
//! HitRegion
//! ├── UiId
//! └── UiRect
//!
//! routing state (each stores an optional UiId)
//! ├── RouteHot direct pointing candidate
//! ├── RouteActive ongoing interaction owner
//! ├── RouteFocus keyboard or navigation owner
//! └── RouteCapture pointer-capture owner
//! ```
//!
//! These states are related but not interchangeable. An identity may be hot
//! without being active, focused without holding pointer capture, or active
//! after the pointer has moved away from its original region. Separate wrapper
//! types preserve those distinctions even though their current representations
//! are similarly compact.
//!
//! # Boundaries
//!
//! - Identity is supplied by [`ui::frame`][crate::ui::frame].
//! - Region geometry is supplied by [`ui::layout`][crate::ui::layout].
//!
//! This module associates those facts with interaction state;
//! it does not prescribe hit ordering, overlap resolution,
//! event propagation, gesture recognition, or a particular routing algorithm.
//!
//! [`RouteFocus`] records current focus ownership. The corresponding
//! semantic action is [`UiAction::Focus`][crate::UiAction::Focus].
//!
//! [`UiId`]: crate::UiId
//! [`UiRect`]: crate::UiRect
//
cratemods_in!
cratemods_out!