Fix Clip primitive intersection in iced_wgpu
This commit is contained in:
parent
d6c2b1121c
commit
126133ead7
2 changed files with 60 additions and 17 deletions
|
|
@ -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,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue