1#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
3pub struct Size {
4 pub width: u16,
5 pub height: u16,
6}
7
8#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
10pub struct Pos {
11 pub x: u16,
12 pub y: u16,
13}
14
15#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
17pub struct Rect {
18 pub x: u16,
19 pub y: u16,
20 pub width: u16,
21 pub height: u16,
22}
23
24#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
26pub struct Insets {
27 pub top: u16,
28 pub right: u16,
29 pub bottom: u16,
30 pub left: u16,
31}
32
33impl Insets {
34 pub const ZERO: Insets = Insets {
35 top: 0,
36 right: 0,
37 bottom: 0,
38 left: 0,
39 };
40
41 pub fn all(value: u16) -> Self {
42 Self {
43 top: value,
44 right: value,
45 bottom: value,
46 left: value,
47 }
48 }
49}
50
51impl Rect {
52 pub fn contains(&self, pos: Pos) -> bool {
54 pos.x >= self.x
55 && pos.x < self.x.saturating_add(self.width)
56 && pos.y >= self.y
57 && pos.y < self.y.saturating_add(self.height)
58 }
59
60 pub fn inner(&self, insets: Insets) -> Rect {
62 let x = self.x.saturating_add(insets.left);
63 let y = self.y.saturating_add(insets.top);
64 let width = self
65 .width
66 .saturating_sub(insets.left.saturating_add(insets.right));
67 let height = self
68 .height
69 .saturating_sub(insets.top.saturating_add(insets.bottom));
70
71 Rect { x, y, width, height }
72 }
73}