Skip to main content

oo_ide/interraction/
button.rs

1//! Common button input handling.
2
3use 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}