oo_ide/interraction/
button.rs1use ratatui::layout::Rect;
4
5pub fn hit_test(position: (u16, u16), rect: Rect) -> bool {
6 position.0 >= rect.x
7 && position.0 < rect.x + rect.width
8 && position.1 >= rect.y
9 && position.1 < rect.y + rect.height
10}
11
12#[cfg(test)]
13mod tests {
14 use super::*;
15 use ratatui::layout::Rect;
16
17 #[test]
18 fn test_hit_test_inside() {
19 let rect = Rect::new(10, 20, 5, 3);
20 assert!(hit_test((10, 20), rect));
21 assert!(hit_test((14, 22), rect));
22 assert!(hit_test((12, 21), rect));
23 }
24
25 #[test]
26 fn test_hit_test_outside() {
27 let rect = Rect::new(10, 20, 5, 3);
28 assert!(!hit_test((9, 20), rect));
29 assert!(!hit_test((10, 19), rect));
30 assert!(!hit_test((15, 20), rect));
31 assert!(!hit_test((10, 23), rect));
32 }
33
34 #[test]
35 fn test_hit_test_edge() {
36 let rect = Rect::new(10, 20, 5, 3);
37 assert!(hit_test((14, 22), rect));
38 assert!(!hit_test((15, 22), rect));
39 assert!(!hit_test((14, 23), rect));
40 }
41}