pub struct HitTestEngine;Expand description
Stateless rectangle hit-testing helper.
Rectangles and points are expected in the same logical-pixel coordinate space. The engine performs no allocation and does not validate geometry.
§Examples
use ailloli_ui_core::{ElementId, Point, Rect};
use ailloli_ui_runtime::input::HitTestEngine;
let engine = HitTestEngine;
let rects = [(ElementId(1), Rect::new(0.0, 0.0, 10.0, 10.0))];
assert_eq!(engine.hit_test(&rects, Point::new(5.0, 5.0), None), Some(ElementId(1)));Implementations§
Source§impl HitTestEngine
Provides the operations defined for HitTestEngine.
impl HitTestEngine
Provides the operations defined for HitTestEngine.
Sourcepub fn hit_test(
&self,
rects: &[(ElementId, Rect)],
pos: Point,
clip: Option<Rect>,
) -> Option<ElementId>
pub fn hit_test( &self, rects: &[(ElementId, Rect)], pos: Point, clip: Option<Rect>, ) -> Option<ElementId>
Returns the last rectangle containing pos, subject to an optional clip.
Reverse iteration makes later entries topmost. If clip is Some and
does not contain the point, no candidate is examined and None is
returned. Edge inclusion and non-finite behavior follow [Rect::contains].
§Examples
use ailloli_ui_core::{ElementId, Point, Rect};
use ailloli_ui_runtime::input::HitTestEngine;
let rects = [
(ElementId(1), Rect::new(0.0, 0.0, 10.0, 10.0)),
(ElementId(2), Rect::new(0.0, 0.0, 10.0, 10.0)),
];
assert_eq!(HitTestEngine.hit_test(&rects, Point::new(2.0, 2.0), None), Some(ElementId(2)));Sourcepub fn hit_test_overlay_first(
&self,
overlay: &[(ElementId, Rect)],
base: &[(ElementId, Rect)],
pos: Point,
clip: Option<Rect>,
) -> Option<ElementId>
pub fn hit_test_overlay_first( &self, overlay: &[(ElementId, Rect)], base: &[(ElementId, Rect)], pos: Point, clip: Option<Rect>, ) -> Option<ElementId>
Hit-tests overlay rects first, then base (modal / chrome above content).
Each slice is internally topmost-last. The same optional clip is applied to both strata, and an overlay hit prevents examining base rectangles.
§Examples
use ailloli_ui_core::{ElementId, Point, Rect};
use ailloli_ui_runtime::input::HitTestEngine;
let base = [(ElementId(1), Rect::new(0.0, 0.0, 10.0, 10.0))];
let overlay = [(ElementId(2), Rect::new(0.0, 0.0, 4.0, 4.0))];
assert_eq!(HitTestEngine.hit_test_overlay_first(
&overlay, &base, Point::new(2.0, 2.0), None,
), Some(ElementId(2)));Trait Implementations§
Source§impl Clone for HitTestEngine
impl Clone for HitTestEngine
Source§fn clone(&self) -> HitTestEngine
fn clone(&self) -> HitTestEngine
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for HitTestEngine
impl Debug for HitTestEngine
Source§impl Default for HitTestEngine
impl Default for HitTestEngine
Source§fn default() -> HitTestEngine
fn default() -> HitTestEngine
Auto Trait Implementations§
impl Freeze for HitTestEngine
impl RefUnwindSafe for HitTestEngine
impl Send for HitTestEngine
impl Sync for HitTestEngine
impl Unpin for HitTestEngine
impl UnwindSafe for HitTestEngine
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<A> IntoClickAction<A> for Awhere
A: Clone + 'static,
impl<A> IntoClickAction<A> for Awhere
A: Clone + 'static,
Source§fn into_click_action(self) -> ClickAction<A>
fn into_click_action(self) -> ClickAction<A>
Implements the into_click_action helper used by this module.