#[repr(C)]pub struct Rect {
pub min: Vec2,
pub max: Vec2,
}Expand description
A rectangle defined by two opposite corners.
The rectangle is axis aligned, and defined by its minimum and maximum coordinates,
stored in Rect::min and Rect::max, respectively. The minimum/maximum invariant
must be upheld by the user when directly assigning the fields, otherwise some methods
produce invalid results. It is generally recommended to use one of the constructor
methods instead, which will ensure this invariant is met, unless you already have
the minimum and maximum corners.
Fields§
§min: Vec2The minimum corner point of the rect.
max: Vec2The maximum corner point of the rect.
Implementations§
Source§impl Rect
impl Rect
Sourcepub const EMPTY: Self
pub const EMPTY: Self
An empty Rect, represented by maximum and minimum corner points
at Vec2::NEG_INFINITY and Vec2::INFINITY, respectively.
This is so the Rect has a infinitely negative size.
This is useful, because when taking a union B of a non-empty Rect A and
this empty Rect, B will simply equal A.
Sourcepub fn new(x0: f32, y0: f32, x1: f32, y1: f32) -> Self
pub fn new(x0: f32, y0: f32, x1: f32, y1: f32) -> Self
Create a new rectangle from two corner points.
The two points do not need to be the minimum and/or maximum corners. They only need to be two opposite corners.
§Examples
let r = Rect::new(0., 4., 10., 6.); // w=10 h=2
let r = Rect::new(2., 3., 5., -1.); // w=3 h=4Sourcepub fn from_corners(p0: Vec2, p1: Vec2) -> Self
pub fn from_corners(p0: Vec2, p1: Vec2) -> Self
Create a new rectangle from two corner points.
The two points do not need to be the minimum and/or maximum corners. They only need to be two opposite corners.
§Examples
// Unit rect from [0,0] to [1,1]
let r = Rect::from_corners(Vec2::ZERO, Vec2::ONE); // w=1 h=1
// Same; the points do not need to be ordered
let r = Rect::from_corners(Vec2::ONE, Vec2::ZERO); // w=1 h=1Sourcepub fn from_center_size(origin: Vec2, size: Vec2) -> Self
pub fn from_center_size(origin: Vec2, size: Vec2) -> Self
Create a new rectangle from its center and size.
§Panics
This method panics if any of the components of the size is negative.
§Examples
let r = Rect::from_center_size(Vec2::ZERO, Vec2::ONE); // w=1 h=1
assert!(r.min.abs_diff_eq(Vec2::splat(-0.5), 1e-5));
assert!(r.max.abs_diff_eq(Vec2::splat(0.5), 1e-5));Sourcepub fn from_center_half_size(origin: Vec2, half_size: Vec2) -> Self
pub fn from_center_half_size(origin: Vec2, half_size: Vec2) -> Self
Create a new rectangle from its center and half-size.
§Panics
This method panics if any of the components of the half-size is negative.
§Examples
let r = Rect::from_center_half_size(Vec2::ZERO, Vec2::ONE); // w=2 h=2
assert!(r.min.abs_diff_eq(Vec2::splat(-1.), 1e-5));
assert!(r.max.abs_diff_eq(Vec2::splat(1.), 1e-5));Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Check if the rectangle is empty.
§Examples
let r = Rect::from_corners(Vec2::ZERO, Vec2::new(0., 1.)); // w=0 h=1
assert!(r.is_empty());Sourcepub fn width(&self) -> f32
pub fn width(&self) -> f32
Rectangle width (max.x - min.x).
§Examples
let r = Rect::new(0., 0., 5., 1.); // w=5 h=1
assert!((r.width() - 5.).abs() <= 1e-5);Sourcepub fn height(&self) -> f32
pub fn height(&self) -> f32
Rectangle height (max.y - min.y).
§Examples
let r = Rect::new(0., 0., 5., 1.); // w=5 h=1
assert!((r.height() - 1.).abs() <= 1e-5);Sourcepub fn size(&self) -> Vec2
pub fn size(&self) -> Vec2
Rectangle size.
§Examples
let r = Rect::new(0., 0., 5., 1.); // w=5 h=1
assert!(r.size().abs_diff_eq(Vec2::new(5., 1.), 1e-5));Sourcepub fn half_size(&self) -> Vec2
pub fn half_size(&self) -> Vec2
Rectangle half-size.
§Examples
let r = Rect::new(0., 0., 5., 1.); // w=5 h=1
assert!(r.half_size().abs_diff_eq(Vec2::new(2.5, 0.5), 1e-5));Sourcepub fn center(&self) -> Vec2
pub fn center(&self) -> Vec2
The center point of the rectangle.
§Examples
let r = Rect::new(0., 0., 5., 1.); // w=5 h=1
assert!(r.center().abs_diff_eq(Vec2::new(2.5, 0.5), 1e-5));Sourcepub fn contains(&self, point: Vec2) -> bool
pub fn contains(&self, point: Vec2) -> bool
Check if a point lies within this rectangle, inclusive of its edges.
§Examples
let r = Rect::new(0., 0., 5., 1.); // w=5 h=1
assert!(r.contains(r.center()));
assert!(r.contains(r.min));
assert!(r.contains(r.max));Sourcepub fn union(&self, other: Self) -> Self
pub fn union(&self, other: Self) -> Self
Build a new rectangle formed of the union of this rectangle and another rectangle.
The union is the smallest rectangle enclosing both rectangles.
§Examples
let r1 = Rect::new(0., 0., 5., 1.); // w=5 h=1
let r2 = Rect::new(1., -1., 3., 3.); // w=2 h=4
let r = r1.union(r2);
assert!(r.min.abs_diff_eq(Vec2::new(0., -1.), 1e-5));
assert!(r.max.abs_diff_eq(Vec2::new(5., 3.), 1e-5));Sourcepub fn union_point(&self, other: Vec2) -> Self
pub fn union_point(&self, other: Vec2) -> Self
Build a new rectangle formed of the union of this rectangle and a point.
The union is the smallest rectangle enclosing both the rectangle and the point. If the point is already inside the rectangle, this method returns a copy of the rectangle.
§Examples
let r = Rect::new(0., 0., 5., 1.); // w=5 h=1
let u = r.union_point(Vec2::new(3., 6.));
assert!(u.min.abs_diff_eq(Vec2::ZERO, 1e-5));
assert!(u.max.abs_diff_eq(Vec2::new(5., 6.), 1e-5));Sourcepub fn intersect(&self, other: Self) -> Self
pub fn intersect(&self, other: Self) -> Self
Build a new rectangle formed of the intersection of this rectangle and another rectangle.
The intersection is the largest rectangle enclosed in both rectangles. If the intersection
is empty, this method returns an empty rectangle (Rect::is_empty() returns true), but
the actual values of Rect::min and Rect::max are implementation-dependent.
§Examples
let r1 = Rect::new(0., 0., 5., 1.); // w=5 h=1
let r2 = Rect::new(1., -1., 3., 3.); // w=2 h=4
let r = r1.intersect(r2);
assert!(r.min.abs_diff_eq(Vec2::new(1., 0.), 1e-5));
assert!(r.max.abs_diff_eq(Vec2::new(3., 1.), 1e-5));Sourcepub fn inflate(&self, expansion: f32) -> Self
pub fn inflate(&self, expansion: f32) -> Self
Create a new rectangle by expanding it evenly on all sides.
A positive expansion value produces a larger rectangle,
while a negative expansion value produces a smaller rectangle.
If this would result in zero or negative width or height, Rect::EMPTY is returned instead.
§Examples
let r = Rect::new(0., 0., 5., 1.); // w=5 h=1
let r2 = r.inflate(3.); // w=11 h=7
assert!(r2.min.abs_diff_eq(Vec2::splat(-3.), 1e-5));
assert!(r2.max.abs_diff_eq(Vec2::new(8., 4.), 1e-5));
let r = Rect::new(0., -1., 6., 7.); // w=6 h=8
let r2 = r.inflate(-2.); // w=11 h=7
assert!(r2.min.abs_diff_eq(Vec2::new(2., 1.), 1e-5));
assert!(r2.max.abs_diff_eq(Vec2::new(4., 5.), 1e-5));Sourcepub fn normalize(&self, other: Self) -> Self
pub fn normalize(&self, other: Self) -> Self
Build a new rectangle from this one with its coordinates expressed
relative to other in a normalized ([0..1] x [0..1]) coordinate system.
§Examples
let r = Rect::new(2., 3., 4., 6.);
let s = Rect::new(0., 0., 10., 10.);
let n = r.normalize(s);
assert_eq!(n.min.x, 0.2);
assert_eq!(n.min.y, 0.3);
assert_eq!(n.max.x, 0.4);
assert_eq!(n.max.y, 0.6);Trait Implementations§
Source§impl<'de> Deserialize<'de> for Rect
impl<'de> Deserialize<'de> for Rect
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl FromReflect for Rect
impl FromReflect for Rect
Source§fn from_reflect(reflect: &dyn PartialReflect) -> Option<Self>
fn from_reflect(reflect: &dyn PartialReflect) -> Option<Self>
Self from a reflected value.Source§fn take_from_reflect(
reflect: Box<dyn PartialReflect>,
) -> Result<Self, Box<dyn PartialReflect>>
fn take_from_reflect( reflect: Box<dyn PartialReflect>, ) -> Result<Self, Box<dyn PartialReflect>>
Self using,
constructing the value using from_reflect if that fails. Read moreSource§impl GetTypeRegistration for Rect
impl GetTypeRegistration for Rect
Source§fn get_type_registration() -> TypeRegistration
fn get_type_registration() -> TypeRegistration
TypeRegistration for this type.Source§fn register_type_dependencies(registry: &mut TypeRegistry)
fn register_type_dependencies(registry: &mut TypeRegistry)
Source§impl PartialReflect for Rect
impl PartialReflect for Rect
Source§fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
Source§fn try_apply(&mut self, value: &dyn PartialReflect) -> Result<(), ApplyError>
fn try_apply(&mut self, value: &dyn PartialReflect) -> Result<(), ApplyError>
Source§fn reflect_kind(&self) -> ReflectKind
fn reflect_kind(&self) -> ReflectKind
Source§fn reflect_ref(&self) -> ReflectRef<'_>
fn reflect_ref(&self) -> ReflectRef<'_>
Source§fn reflect_mut(&mut self) -> ReflectMut<'_>
fn reflect_mut(&mut self) -> ReflectMut<'_>
Source§fn reflect_owned(self: Box<Self>) -> ReflectOwned
fn reflect_owned(self: Box<Self>) -> ReflectOwned
Source§fn try_into_reflect(
self: Box<Self>,
) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
fn try_into_reflect( self: Box<Self>, ) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
Source§fn try_as_reflect(&self) -> Option<&dyn Reflect>
fn try_as_reflect(&self) -> Option<&dyn Reflect>
Source§fn try_as_reflect_mut(&mut self) -> Option<&mut dyn Reflect>
fn try_as_reflect_mut(&mut self) -> Option<&mut dyn Reflect>
Source§fn into_partial_reflect(self: Box<Self>) -> Box<dyn PartialReflect>
fn into_partial_reflect(self: Box<Self>) -> Box<dyn PartialReflect>
Source§fn as_partial_reflect(&self) -> &dyn PartialReflect
fn as_partial_reflect(&self) -> &dyn PartialReflect
Source§fn as_partial_reflect_mut(&mut self) -> &mut dyn PartialReflect
fn as_partial_reflect_mut(&mut self) -> &mut dyn PartialReflect
Source§fn reflect_partial_eq(&self, value: &dyn PartialReflect) -> Option<bool>
fn reflect_partial_eq(&self, value: &dyn PartialReflect) -> Option<bool>
Source§fn reflect_clone(&self) -> Result<Box<dyn Reflect>, ReflectCloneError>
fn reflect_clone(&self) -> Result<Box<dyn Reflect>, ReflectCloneError>
Self using reflection. Read moreSource§fn apply(&mut self, value: &(dyn PartialReflect + 'static))
fn apply(&mut self, value: &(dyn PartialReflect + 'static))
Source§fn to_dynamic(&self) -> Box<dyn PartialReflect>
fn to_dynamic(&self) -> Box<dyn PartialReflect>
Source§fn reflect_clone_and_take<T>(&self) -> Result<T, ReflectCloneError>
fn reflect_clone_and_take<T>(&self) -> Result<T, ReflectCloneError>
PartialReflect, combines reflect_clone and
take in a useful fashion, automatically constructing an appropriate
ReflectCloneError if the downcast fails. Read moreSource§fn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
Source§fn is_dynamic(&self) -> bool
fn is_dynamic(&self) -> bool
Source§impl Reflect for Rect
impl Reflect for Rect
Source§fn as_any_mut(&mut self) -> &mut dyn Any
fn as_any_mut(&mut self) -> &mut dyn Any
&mut dyn Any. Read moreSource§fn into_reflect(self: Box<Self>) -> Box<dyn Reflect>
fn into_reflect(self: Box<Self>) -> Box<dyn Reflect>
Source§fn as_reflect(&self) -> &dyn Reflect
fn as_reflect(&self) -> &dyn Reflect
Source§fn as_reflect_mut(&mut self) -> &mut dyn Reflect
fn as_reflect_mut(&mut self) -> &mut dyn Reflect
Source§impl Struct for Rect
impl Struct for Rect
Source§fn field(&self, name: &str) -> Option<&dyn PartialReflect>
fn field(&self, name: &str) -> Option<&dyn PartialReflect>
name as a &dyn PartialReflect.Source§fn field_mut(&mut self, name: &str) -> Option<&mut dyn PartialReflect>
fn field_mut(&mut self, name: &str) -> Option<&mut dyn PartialReflect>
name as a
&mut dyn PartialReflect.Source§fn field_at(&self, index: usize) -> Option<&dyn PartialReflect>
fn field_at(&self, index: usize) -> Option<&dyn PartialReflect>
index as a
&dyn PartialReflect.Source§fn field_at_mut(&mut self, index: usize) -> Option<&mut dyn PartialReflect>
fn field_at_mut(&mut self, index: usize) -> Option<&mut dyn PartialReflect>
index
as a &mut dyn PartialReflect.Source§fn name_at(&self, index: usize) -> Option<&str>
fn name_at(&self, index: usize) -> Option<&str>
index.Source§fn iter_fields(&self) -> FieldIter<'_>
fn iter_fields(&self) -> FieldIter<'_>
Source§fn to_dynamic_struct(&self) -> DynamicStruct
fn to_dynamic_struct(&self) -> DynamicStruct
DynamicStruct from this struct.Source§fn get_represented_struct_info(&self) -> Option<&'static StructInfo>
fn get_represented_struct_info(&self) -> Option<&'static StructInfo>
None if TypeInfo is not available.Source§impl TypePath for Rect
impl TypePath for Rect
Source§fn type_path() -> &'static str
fn type_path() -> &'static str
Source§fn short_type_path() -> &'static str
fn short_type_path() -> &'static str
Source§fn type_ident() -> Option<&'static str>
fn type_ident() -> Option<&'static str>
Source§fn crate_name() -> Option<&'static str>
fn crate_name() -> Option<&'static str>
impl Copy for Rect
impl StructuralPartialEq for Rect
Auto Trait Implementations§
impl Freeze for Rect
impl RefUnwindSafe for Rect
impl Send for Rect
impl Sync for Rect
impl Unpin for Rect
impl UnwindSafe for Rect
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DynamicTypePath for Twhere
T: TypePath,
impl<T> DynamicTypePath for Twhere
T: TypePath,
Source§fn reflect_type_path(&self) -> &str
fn reflect_type_path(&self) -> &str
TypePath::type_path.Source§fn reflect_short_type_path(&self) -> &str
fn reflect_short_type_path(&self) -> &str
Source§fn reflect_type_ident(&self) -> Option<&str>
fn reflect_type_ident(&self) -> Option<&str>
TypePath::type_ident.Source§fn reflect_crate_name(&self) -> Option<&str>
fn reflect_crate_name(&self) -> Option<&str>
TypePath::crate_name.Source§fn reflect_module_path(&self) -> Option<&str>
fn reflect_module_path(&self) -> Option<&str>
Source§impl<T> DynamicTyped for Twhere
T: Typed,
impl<T> DynamicTyped for Twhere
T: Typed,
Source§fn reflect_type_info(&self) -> &'static TypeInfo
fn reflect_type_info(&self) -> &'static TypeInfo
Typed::type_info.Source§impl<S> GetField for Swhere
S: Struct,
impl<S> GetField for Swhere
S: Struct,
Source§impl<T> GetPath for T
impl<T> GetPath for T
Source§fn reflect_path<'p>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&(dyn PartialReflect + 'static), ReflectPathError<'p>>
fn reflect_path<'p>( &self, path: impl ReflectPath<'p>, ) -> Result<&(dyn PartialReflect + 'static), ReflectPathError<'p>>
path. Read moreSource§fn reflect_path_mut<'p>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut (dyn PartialReflect + 'static), ReflectPathError<'p>>
fn reflect_path_mut<'p>( &mut self, path: impl ReflectPath<'p>, ) -> Result<&mut (dyn PartialReflect + 'static), ReflectPathError<'p>>
path. Read moreSource§fn path<'p, T>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&T, ReflectPathError<'p>>where
T: Reflect,
fn path<'p, T>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&T, ReflectPathError<'p>>where
T: Reflect,
path. Read moreSource§fn path_mut<'p, T>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut T, ReflectPathError<'p>>where
T: Reflect,
fn path_mut<'p, T>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut T, ReflectPathError<'p>>where
T: Reflect,
path. Read moreSource§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more