mod animation;
mod click;
mod cursor;
mod focus;
mod interaction;
mod keyboard;
pub(crate) mod query;
mod scroll;
mod selection;
mod toast;
mod types;
mod widget_state;
use std::fmt::Debug;
use crate::event::{KeyModifiers, PointerButton, UiTarget};
pub use types::{AnimationMode, EnvelopeKind, ScrollMetrics, ThumbDrag, WidgetState};
pub(crate) use types::{SelectionDrag, caret_blink_alpha_for};
use types::{
AnimationState, CaretState, ClickState, FocusState, HotkeyState, LayoutState,
NodeInteractionState, PopoverFocusState, ScrollState, SelectionState, ToastState, TooltipState,
WidgetStateStore,
};
#[derive(Default)]
pub struct UiState {
pub pointer_pos: Option<(f32, f32)>,
pub hovered: Option<UiTarget>,
pub pressed: Option<UiTarget>,
pub(crate) pressed_secondary: Option<(UiTarget, PointerButton)>,
pub focused: Option<UiTarget>,
pub focus_visible: bool,
pub(crate) focus: FocusState,
pub current_selection: crate::selection::Selection,
pub(crate) selection: SelectionState,
pub(crate) click: ClickState,
pub(crate) caret: CaretState,
pub(crate) popover_focus: PopoverFocusState,
pub(crate) tooltip: TooltipState,
pub(crate) scroll: ScrollState,
pub(crate) toast: ToastState,
pub(crate) hotkeys: HotkeyState,
pub(crate) animation: AnimationState,
pub(crate) layout: LayoutState,
pub(crate) node_states: NodeInteractionState,
widget_states: WidgetStateStore,
pub modifiers: KeyModifiers,
}
impl UiState {
pub fn new() -> Self {
Self::default()
}
}
impl Debug for UiState {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("UiState")
.field("pointer_pos", &self.pointer_pos)
.field("hovered", &self.hovered)
.field("pressed", &self.pressed)
.field("focused", &self.focused)
.field("focus_visible", &self.focus_visible)
.field("focus", &self.focus)
.field("popover_focus", &self.popover_focus)
.field("click", &self.click)
.field("caret", &self.caret)
.field("scroll", &self.scroll)
.field("toast", &self.toast)
.field("tooltip", &self.tooltip)
.field("hotkeys", &self.hotkeys)
.field("animation", &self.animation)
.field("layout", &self.layout)
.field("node_states", &self.node_states)
.field("modifiers", &self.modifiers)
.field("widget_states", &self.widget_states)
.finish()
}
}
#[cfg(test)]
mod tests;