1
0
mirror of https://github.com/emilk/egui.git synced 2026-06-26 22:53:14 -04:00

Change Rect::area to return zero for negative rectangles (#7305)

Previously a single-negative rectangle (where `min.x > max.x` XOR `min.y
> max.y`) would return a negative area, while a doubly-negative
rectangle (`min.x > max.x` AND `min.y > max.y`) would return a positive
area. Now both return zero instead.
This commit is contained in:
Emil Ernerfeldt
2025-07-07 12:03:03 +02:00
committed by GitHub
parent 3622a03a46
commit 93d562221b

View File

@@ -1,6 +1,6 @@
use std::fmt;
use crate::{Div, Mul, Pos2, Rangef, Rot2, Vec2, lerp, pos2, vec2};
use crate::{Div, Mul, NumExt as _, Pos2, Rangef, Rot2, Vec2, lerp, pos2, vec2};
/// A rectangular region of space.
///
@@ -341,11 +341,13 @@ impl Rect {
self.max - self.min
}
/// Note: this can be negative.
#[inline(always)]
pub fn width(&self) -> f32 {
self.max.x - self.min.x
}
/// Note: this can be negative.
#[inline(always)]
pub fn height(&self) -> f32 {
self.max.y - self.min.y
@@ -373,9 +375,10 @@ impl Rect {
}
}
/// This is never negative, and instead returns zero for negative rectangles.
#[inline(always)]
pub fn area(&self) -> f32 {
self.width() * self.height()
self.width().at_least(0.0) * self.height().at_least(0.0)
}
/// The distance from the rect to the position.