script: Add support for polygons in HtmlAreaElement::hit_test (#37064)

Uses raycasting to determine whether point is in polygon

Testing: Added unittest
Fixes: None to my knowledge

---------

Signed-off-by: Ashwin Naren <arihant2math@gmail.com>
This commit is contained in:
Ashwin Naren 2025-05-24 02:53:27 -07:00 committed by GitHub
parent abc3374f9b
commit 0ed2c4816c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 39 additions and 2 deletions

View file

@ -187,4 +187,19 @@ fn test_hit_test_polygon() {
points: vec![7.0, 7.5, 8.2, 9.0, 11.0, 12.0],
};
assert!(!poly2.hit_test(&Point2D::new(10.0, 5.0)));
let poly3 = Area::Polygon {
points: vec![0.0, 0.0, 5.0, 0.0, 5.0, 5.0, 0.0, 5.0],
};
assert!(poly3.hit_test(&Point2D::new(1.0, 1.0)));
assert!(poly3.hit_test(&Point2D::new(2.0, 4.0)));
assert!(poly3.hit_test(&Point2D::new(4.0, 2.0)));
assert!(!poly3.hit_test(&Point2D::new(6.0, 0.0)));
assert!(!poly3.hit_test(&Point2D::new(0.0, 6.0)));
assert!(!poly3.hit_test(&Point2D::new(6.0, 6.0)));
// Concave polygon test
let poly4 = Area::Polygon {
points: vec![0.0, 0.0, 1.0, 1.0, 2.0, 0.0, 2.0, 2.0, 0.0, 2.0],
};
assert!(poly4.hit_test(&Point2D::new(1.5, 1.5)));
assert!(!poly4.hit_test(&Point2D::new(1.0, 0.0)));
}