mutils/geom/position/
point_position.rs

1use crate::geom::HorizontalPosition;
2use crate::geom::VerticalPosition;
3
4#[derive(Copy, Clone, PartialEq, Debug)]
5pub struct PointPosition(pub HorizontalPosition, pub VerticalPosition);
6
7impl PointPosition {
8    pub fn new(horizontal: HorizontalPosition, vertical: VerticalPosition) -> Self {
9        Self(horizontal, vertical)
10    }
11
12    #[inline(always)]
13    pub fn horizontal(self) -> HorizontalPosition {
14        self.0
15    }
16
17    #[inline(always)]
18    pub fn vertical(self) -> VerticalPosition {
19        self.1
20    }
21
22    pub fn is_left(self) -> bool {
23        self.horizontal() == HorizontalPosition::Left
24    }
25
26    pub fn is_right(self) -> bool {
27        self.horizontal() == HorizontalPosition::Right
28    }
29
30    pub fn is_above(self) -> bool {
31        self.vertical() == VerticalPosition::Above
32    }
33
34    pub fn is_below(self) -> bool {
35        self.vertical() == VerticalPosition::Below
36    }
37
38    pub fn is_entirely_inside(self) -> bool {
39        self == PointPosition(HorizontalPosition::Inside, VerticalPosition::Inside)
40    }
41
42    // It is outside if either the horizontal or the vertical, is not inside.
43    pub fn is_outside(self) -> bool {
44        self.horizontal() != HorizontalPosition::Inside
45            || self.vertical() != VerticalPosition::Inside
46    }
47
48    // It is entirely outside if neither the horizontal or the vertical, are inside.
49    pub fn is_entirely_outside(self) -> bool {
50        self.horizontal() != HorizontalPosition::Inside
51            && self.vertical() != VerticalPosition::Inside
52    }
53}