summaryrefslogtreecommitdiffstats
path: root/core/src/rectangle.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-03-24 19:08:21 +0100
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-03-24 19:08:21 +0100
commite77fa175aa0eaf62be4ebafbd8e0dbc5df18f006 (patch)
tree78608f77c6db3ff1e61a58008bd54d114f32352c /core/src/rectangle.rs
parent7cb1452d29ddfdcd29fd7ecc7c96a79ea2681fce (diff)
parentfd7d9622e333a0a2cd5c2e8e6cc38cc09d7981e4 (diff)
downloadiced-e77fa175aa0eaf62be4ebafbd8e0dbc5df18f006.tar.gz
iced-e77fa175aa0eaf62be4ebafbd8e0dbc5df18f006.tar.bz2
iced-e77fa175aa0eaf62be4ebafbd8e0dbc5df18f006.zip
Merge branch 'master' into feature/text-selection
Diffstat (limited to 'core/src/rectangle.rs')
-rw-r--r--core/src/rectangle.rs50
1 files changed, 50 insertions, 0 deletions
diff --git a/core/src/rectangle.rs b/core/src/rectangle.rs
index ee1e3807..7ed3d2df 100644
--- a/core/src/rectangle.rs
+++ b/core/src/rectangle.rs
@@ -27,6 +27,34 @@ impl Rectangle<f32> {
&& self.y <= point.y
&& point.y <= self.y + self.height
}
+
+ /// Computes the intersection with the given [`Rectangle`].
+ ///
+ /// [`Rectangle`]: struct.Rectangle.html
+ pub fn intersection(
+ &self,
+ other: &Rectangle<f32>,
+ ) -> Option<Rectangle<f32>> {
+ let x = self.x.max(other.x);
+ let y = self.y.max(other.y);
+
+ let lower_right_x = (self.x + self.width).min(other.x + other.width);
+ let lower_right_y = (self.y + self.height).min(other.y + other.height);
+
+ let width = lower_right_x - x;
+ let height = lower_right_y - y;
+
+ if width > 0.0 && height > 0.0 {
+ Some(Rectangle {
+ x,
+ y,
+ width,
+ height,
+ })
+ } else {
+ None
+ }
+ }
}
impl std::ops::Mul<f32> for Rectangle<u32> {
@@ -41,3 +69,25 @@ impl std::ops::Mul<f32> for Rectangle<u32> {
}
}
}
+
+impl From<Rectangle<u32>> for Rectangle<f32> {
+ fn from(rectangle: Rectangle<u32>) -> Rectangle<f32> {
+ Rectangle {
+ x: rectangle.x as f32,
+ y: rectangle.y as f32,
+ width: rectangle.width as f32,
+ height: rectangle.height as f32,
+ }
+ }
+}
+
+impl From<Rectangle<f32>> for Rectangle<u32> {
+ fn from(rectangle: Rectangle<f32>) -> Rectangle<u32> {
+ Rectangle {
+ x: rectangle.x as u32,
+ y: rectangle.y as u32,
+ width: rectangle.width.ceil() as u32,
+ height: rectangle.height.ceil() as u32,
+ }
+ }
+}