ferroui_base/rendering/composition/hit_testing/
point_composition_hit_tester.rs1use super::ICompositionHitTester;
2use crate::media::IntersectionResult;
3use crate::platform::{IGeometryImpl, LtrbRect};
4use crate::rendering::composition::CompositionVisual;
5use crate::{Matrix, Point};
6
7pub struct PointCompositionHitTester;
9
10impl ICompositionHitTester for PointCompositionHitTester {
11 type Input = Point;
12
13 fn transform(input: &Point, matrix: Matrix) -> Point {
14 input.transform(matrix)
15 }
16
17 fn hit_test(visual: &CompositionVisual, input: &Point) -> IntersectionResult {
18 if visual.hit_test(*input) {
19 IntersectionResult::FullyContains
20 } else {
21 IntersectionResult::Empty
22 }
23 }
24
25 fn transformed_sub_tree_bounds_match(bounds: LtrbRect, input: &Point) -> bool {
26 bounds.contains(input.x, input.y)
27 }
28
29 fn clipped_bounds_match(visual: &CompositionVisual, input: &Point) -> bool {
30 let size = visual.size();
31 input.x >= 0.0 && input.y >= 0.0 && input.x <= size.x && input.y <= size.y
32 }
33
34 fn clip_matches(clip: &dyn IGeometryImpl, input: &Point) -> bool {
35 clip.fill_contains(*input)
36 }
37}