wcanvas/geo/
pos.rs

1use std::ops::{Add, AddAssign, Div, DivAssign, Mul, MulAssign, Sub, SubAssign};
2
3/// Represents a position.
4#[derive(Debug, Clone, Copy, Eq, PartialEq)]
5pub struct Pos {
6    pub x: i32,
7    pub y: i32,
8}
9
10impl Pos {
11    /// Construct a position.
12    pub fn new(x: i32, y: i32) -> Self {
13        Self { x, y }
14    }
15}
16
17impl Add<Pos> for Pos {
18    type Output = Pos;
19
20    fn add(self, rhs: Pos) -> Self::Output {
21        Self::new(self.x + rhs.x, self.y + rhs.y)
22    }
23}
24
25impl AddAssign<Pos> for Pos {
26    fn add_assign(&mut self, rhs: Pos) {
27        self.x += rhs.x;
28        self.y += rhs.y;
29    }
30}
31
32impl Sub<Pos> for Pos {
33    type Output = Pos;
34
35    fn sub(self, rhs: Pos) -> Self::Output {
36        Self::new(self.x - rhs.x, self.y - rhs.y)
37    }
38}
39
40impl SubAssign<Pos> for Pos {
41    fn sub_assign(&mut self, rhs: Pos) {
42        self.x -= rhs.x;
43        self.y -= rhs.y;
44    }
45}
46
47impl Mul<i32> for Pos {
48    type Output = Self;
49
50    fn mul(self, rhs: i32) -> Self::Output {
51        Self::new(self.x * rhs, self.y * rhs)
52    }
53}
54
55impl MulAssign<i32> for Pos {
56    fn mul_assign(&mut self, rhs: i32) {
57        self.x *= rhs;
58        self.y *= rhs;
59    }
60}
61
62impl Mul<Pos> for Pos {
63    type Output = Self;
64
65    fn mul(self, rhs: Pos) -> Self::Output {
66        Self::new(self.x * rhs.x, self.y * rhs.y)
67    }
68}
69
70impl MulAssign<Pos> for Pos {
71    fn mul_assign(&mut self, rhs: Pos) {
72        self.x *= rhs.x;
73        self.y *= rhs.y;
74    }
75}
76
77impl Div<i32> for Pos {
78    type Output = Self;
79
80    fn div(self, rhs: i32) -> Self::Output {
81        Self::new(self.x / rhs, self.y / rhs)
82    }
83}
84
85impl DivAssign<i32> for Pos {
86    fn div_assign(&mut self, rhs: i32) {
87        self.x /= rhs;
88        self.y /= rhs;
89    }
90}
91
92impl Div<Pos> for Pos {
93    type Output = Self;
94
95    fn div(self, rhs: Pos) -> Self::Output {
96        Self::new(self.x / rhs.x, self.y / rhs.y)
97    }
98}
99
100impl DivAssign<Pos> for Pos {
101    fn div_assign(&mut self, rhs: Pos) {
102        self.x /= rhs.x;
103        self.y /= rhs.y;
104    }
105}