Struct InputSnapshot

Source
pub struct InputSnapshot {
    pub focused: Option<ElementId>,
    pub hovered: Option<ElementId>,
    pub pressed: Option<ElementId>,
}
Expand description

Copyable strict focus/hover/press targets for one pointer view.

hovered and pressed belong to the selected pointer ID; focused is global to the router/window and is identical across pointer snapshots.

§Examples

use ailloli_ui_core::ElementId;
use ailloli_ui_runtime::input::InputSnapshot;
let snapshot = InputSnapshot { focused: Some(ElementId(1)), hovered: None, pressed: None };
assert_eq!(snapshot.interaction_for(ElementId(1)).focused, true);

Fields§

§focused: Option<ElementId>

Strict keyboard-focus owner.

§hovered: Option<ElementId>

Strict pointer hover target.

§pressed: Option<ElementId>

Strict pointer press target.

Implementations§

Source§

impl InputSnapshot

Resolves snapshot targets into per-element paint interaction.

Source

pub fn interaction_for(self, id: ElementId) -> InputInteraction

Resolves strict interaction flags for id without consulting a tree.

focus_within equals strict focused here. Use Self::interaction_for_widget_paint to include ancestor/child paint propagation.

§Examples
use ailloli_ui_core::ElementId;
use ailloli_ui_runtime::input::InputSnapshot;
let snapshot = InputSnapshot { focused: Some(ElementId(1)), hovered: Some(ElementId(2)), pressed: None };
let interaction = snapshot.interaction_for(ElementId(2));
assert!(!interaction.focused && interaction.hovered && !interaction.pressed);
Source

pub fn interaction_for_widget_paint<A: 'static>( self, tree: &ElementTree<A>, id: ElementId, ) -> InputInteraction

Interaction state for paint: walks the hit-test chain without false sibling hovers.

  • Parent (e.g. Button) hovers when the pointer hits a child (Icon).
  • Child hovers when the hit is on a non-flex parent (button padding).
  • Hit on empty Row/Column gaps does not hover all sibling buttons.

Focus remains strict on the focused element only. focus_within follows stored parent links. Malformed parent cycles can therefore inherit the nontermination behavior of ElementTree::is_ancestor_of.

§Examples
use ailloli_ui_core::ElementId;
use ailloli_ui_runtime::element::{ElementKind, ElementTree};
use ailloli_ui_runtime::input::InputSnapshot;
let mut tree = ElementTree::<()>::new();
let root = tree.create_element(ElementKind::Empty, None, None);
let child = tree.create_element(ElementKind::Empty, None, Some(root));
let interaction = InputSnapshot { focused: Some(child), hovered: None, pressed: None }
    .interaction_for_widget_paint(&tree, root);
assert!(!interaction.focused && interaction.focus_within);

Trait Implementations§

Source§

impl Clone for InputSnapshot

Source§

fn clone(&self) -> InputSnapshot

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for InputSnapshot

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for InputSnapshot

Source§

fn default() -> InputSnapshot

Returns the “default value” for a type. Read more
Source§

impl PartialEq for InputSnapshot

Source§

fn eq(&self, other: &InputSnapshot) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for InputSnapshot

Source§

impl Eq for InputSnapshot

Source§

impl StructuralPartialEq for InputSnapshot

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<A> IntoClickAction<A> for A
where A: Clone + 'static,

Source§

fn into_click_action(self) -> ClickAction<A>

Implements the into_click_action helper used by this module.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> Brush for T
where T: Clone + PartialEq + Default + Debug,

§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> Props for T
where T: Clone + 'static,