Struct embedded_graphics::primitives::rectangle::Rectangle
source · [−]Expand description
Rectangle primitive
Examples
Create some rectangles with different styles
use embedded_graphics::{
pixelcolor::Rgb565, prelude::*, primitives::{Rectangle, PrimitiveStyleBuilder},
};
// Rectangle with red 3 pixel wide stroke and green fill with the top left corner at (30, 20) and
// a size of (10, 15)
let style = PrimitiveStyleBuilder::new()
.stroke_color(Rgb565::RED)
.stroke_width(3)
.fill_color(Rgb565::GREEN)
.build();
Rectangle::new(Point::new(30, 20), Size::new(10, 15))
.into_styled(style)
.draw(&mut display)?;
// Rectangle with translation applied
Rectangle::new(Point::new(30, 20), Size::new(10, 15))
.translate(Point::new(-20, -10))
.into_styled(style)
.draw(&mut display)?;
Fields
top_left: Point
Top left point of the rectangle.
size: Size
Size of the rectangle.
Implementations
sourceimpl Rectangle
impl Rectangle
sourcepub const fn new(top_left: Point, size: Size) -> Rectangle
pub const fn new(top_left: Point, size: Size) -> Rectangle
Creates a new rectangle from the top left point and the size.
sourcepub fn with_corners(corner_1: Point, corner_2: Point) -> Rectangle
pub fn with_corners(corner_1: Point, corner_2: Point) -> Rectangle
Creates a new rectangle from two corners.
sourcepub fn with_center(center: Point, size: Size) -> Rectangle
pub fn with_center(center: Point, size: Size) -> Rectangle
Creates a new rectangle from the center point and the size.
For rectangles with even width and/or height the top left corner doesn’t align with the pixel grid. Because of this the coordinates of the top left corner will be rounded up to the nearest integer coordinate.
sourcepub fn center(&self) -> Point
pub fn center(&self) -> Point
Returns the center of this rectangle.
For rectangles with even width and/or height the returned value is rounded down to the nearest integer coordinate.
sourcepub fn bottom_right(&self) -> Option<Point>
pub fn bottom_right(&self) -> Option<Point>
Returns the bottom right corner of this rectangle.
Because the smallest rectangle that can be represented by its corners
has a size of 1 x 1 pixels, this function returns None
if the width or
height of the rectangle is zero.
sourcepub fn contains(&self, point: Point) -> bool
pub fn contains(&self, point: Point) -> bool
Return whether the rectangle contains a given point.
sourcepub fn intersection(&self, other: &Rectangle) -> Rectangle
pub fn intersection(&self, other: &Rectangle) -> Rectangle
Returns a new Rectangle
containing the intersection of self
and other
.
If no intersection is present, this method will return a zero sized rectangle.
Examples
Intersection
This example draws two rectangles to a mock display using the .
character, along with
their intersection shown with #
characters.
use embedded_graphics::{
mock_display::MockDisplay, pixelcolor::BinaryColor, prelude::*,
primitives::{Rectangle, PrimitiveStyle},
};
let mut display = MockDisplay::new();
let rect1 = Rectangle::new(Point::zero(), Size::new(7, 8));
let rect2 = Rectangle::new(Point::new(2, 3), Size::new(10, 7));
let intersection = rect1.intersection(&rect2);
rect1
.into_styled(PrimitiveStyle::with_stroke(BinaryColor::Off, 1))
.draw(&mut display)?;
rect2
.into_styled(PrimitiveStyle::with_stroke(BinaryColor::Off, 1))
.draw(&mut display)?;
intersection
.into_styled(PrimitiveStyle::with_stroke(BinaryColor::On, 1))
.draw(&mut display)?;
display.assert_pattern(&[
"....... ",
". . ",
". . ",
". #####.....",
". # # .",
". # # .",
". # # .",
"..##### .",
" . .",
" ..........",
]);
No intersection
This example creates two rectangles with no intersection between them. In this case,
intersection
returns a zero-sized rectangle.
use embedded_graphics::{prelude::*, primitives::{Rectangle, PrimitiveStyle}};
let rect1 = Rectangle::new(Point::zero(), Size::new(7, 8));
let rect2 = Rectangle::new(Point::new(10, 15), Size::new(10, 7));
let intersection = rect1.intersection(&rect2);
assert!(intersection.is_zero_sized());
sourcepub fn resized(&self, size: Size, anchor_point: AnchorPoint) -> Rectangle
pub fn resized(&self, size: Size, anchor_point: AnchorPoint) -> Rectangle
Returns a resized copy of this rectangle.
The rectangle is resized relative to the given anchor point.
Examples
use embedded_graphics::{
prelude::*,
primitives::rectangle::Rectangle,
geometry::AnchorPoint,
};
let rect = Rectangle::new(Point::new(20, 20), Size::new(10, 20));
let resized = rect.resized(Size::new(20, 10), AnchorPoint::Center);
assert_eq!(
resized,
Rectangle::new(Point::new(15, 25), Size::new(20, 10))
);
sourcepub fn offset(&self, offset: i32) -> Rectangle
pub fn offset(&self, offset: i32) -> Rectangle
Offset the rectangle by a given value.
Negative values will shrink the rectangle.
sourcepub fn anchor_point(&self, anchor_point: AnchorPoint) -> Point
pub fn anchor_point(&self, anchor_point: AnchorPoint) -> Point
Returns an anchor point.
Examples
use embedded_graphics::{
prelude::*,
primitives::rectangle::Rectangle,
geometry::AnchorPoint,
};
let mut rect = Rectangle::new(Point::new(20, 20), Size::new(11, 21));
assert_eq!(rect.anchor_point(AnchorPoint::TopLeft), Point::new(20, 20));
assert_eq!(
rect.anchor_point(AnchorPoint::BottomCenter),
Point::new(25, 40)
);
sourcepub fn rows(&self) -> Range<i32>
pub fn rows(&self) -> Range<i32>
Returns the range of Y coordinates in this rectangle.
Examples
use embedded_graphics::{prelude::*, primitives::Rectangle};
let rect = Rectangle::new(Point::new(10, 20), Size::new(3, 4));
assert_eq!(rect.rows(), 20..24);
By combining this method with columns
it is possible to iterate over all pixels inside
the rectangle. This can be more flexible than using the points
iterator, for example,
if a different iteration order is required or some operations should be called once per row.
use embedded_graphics::{prelude::*, primitives::Rectangle};
let rect = Rectangle::new(Point::new(10, 20), Size::new(3, 4));
// Iterate over the y coordinates of the rows in reverse order.
for y in rect.rows().rev() {
for x in rect.columns() {
// use x, y coordinates
}
}
sourcepub fn columns(&self) -> Range<i32>
pub fn columns(&self) -> Range<i32>
Returns the range of X coordinates in this rectangle.
Examples
use embedded_graphics::{prelude::*, primitives::Rectangle};
let rect = Rectangle::new(Point::new(10, 20), Size::new(3, 4));
assert_eq!(rect.columns(), 10..13);
By combining this method with rows
it is possible to iterator over all pixels inside
the rectangle. This can be more flexible than using the points
iterator, for example,
if a different iteration order is required or some operations should be called once per row.
use embedded_graphics::{prelude::*, primitives::Rectangle};
let rect = Rectangle::new(Point::new(10, 20), Size::new(3, 4));
// Iterate over all points starting from the top right corner and advancing downwards.
for x in rect.columns().rev() {
for y in rect.rows() {
// use x, y coordinates
}
}
sourcepub fn is_zero_sized(&self) -> bool
pub fn is_zero_sized(&self) -> bool
Returns true
is the rectangle is zero sized.
A rectangle is zero sized if the width or height are zero.
Examples
use embedded_graphics::{prelude::*, primitives::Rectangle};
let rect = Rectangle::new(Point::new(10, 20), Size::new(10, 20));
assert_eq!(rect.is_zero_sized(), false);
let rect = Rectangle::new(Point::new(10, 20), Size::zero());
assert_eq!(rect.is_zero_sized(), true);
Trait Implementations
sourceimpl ContainsPoint for Rectangle
impl ContainsPoint for Rectangle
sourceimpl Dimensions for Rectangle
impl Dimensions for Rectangle
sourcepub fn bounding_box(&self) -> Rectangle
pub fn bounding_box(&self) -> Rectangle
Returns the bounding box.
sourceimpl OffsetOutline for Rectangle
impl OffsetOutline for Rectangle
sourceimpl Ord for Rectangle
impl Ord for Rectangle
sourceimpl PartialOrd<Rectangle> for Rectangle
impl PartialOrd<Rectangle> for Rectangle
sourcepub fn partial_cmp(&self, other: &Rectangle) -> Option<Ordering>
pub fn partial_cmp(&self, other: &Rectangle) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
1.0.0 · sourcefn lt(&self, other: &Rhs) -> bool
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
1.0.0 · sourcefn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
sourceimpl PointsIter for Rectangle
impl PointsIter for Rectangle
sourceimpl Primitive for Rectangle
impl Primitive for Rectangle
sourcefn into_styled<S>(self, style: S) -> Styled<Self, S> where
Self: Sized,
fn into_styled<S>(self, style: S) -> Styled<Self, S> where
Self: Sized,
Converts this primitive into a Styled
.
sourceimpl<C: PixelColor> StyledDimensions<PrimitiveStyle<C>> for Rectangle
impl<C: PixelColor> StyledDimensions<PrimitiveStyle<C>> for Rectangle
sourcefn styled_bounding_box(&self, style: &PrimitiveStyle<C>) -> Rectangle
fn styled_bounding_box(&self, style: &PrimitiveStyle<C>) -> Rectangle
Returns the bounding box using the given style.
sourceimpl<C: PixelColor> StyledDrawable<PrimitiveStyle<C>> for Rectangle
impl<C: PixelColor> StyledDrawable<PrimitiveStyle<C>> for Rectangle
type Color = C
type Color = C
Color type.
sourcefn draw_styled<D>(
&self,
style: &PrimitiveStyle<C>,
target: &mut D
) -> Result<Self::Output, D::Error> where
D: DrawTarget<Color = C>,
fn draw_styled<D>(
&self,
style: &PrimitiveStyle<C>,
target: &mut D
) -> Result<Self::Output, D::Error> where
D: DrawTarget<Color = C>,
Draws the primitive using the given style.
sourceimpl Transform for Rectangle
impl Transform for Rectangle
sourcefn translate(&self, by: Point) -> Self
fn translate(&self, by: Point) -> Self
Translate the rect from its current position to a new position by (x, y) pixels, returning
a new Rectangle
. For a mutating transform, see translate_mut
.
let rect = Rectangle::new(Point::new(5, 10), Size::new(10, 10));
let moved = rect.translate(Point::new(10, 10));
assert_eq!(moved.top_left, Point::new(15, 20));
assert_eq!(moved.size, Size::new(10, 10));
sourcefn translate_mut(&mut self, by: Point) -> &mut Self
fn translate_mut(&mut self, by: Point) -> &mut Self
Translate the rect from its current position to a new position by (x, y) pixels.
let mut rect = Rectangle::new(Point::new(5, 10), Size::new(10, 10));
rect.translate_mut(Point::new(10, 10));
assert_eq!(rect.top_left, Point::new(15, 20));
assert_eq!(rect.size, Size::new(10, 10));
impl Copy for Rectangle
impl Eq for Rectangle
impl StructuralEq for Rectangle
impl StructuralPartialEq for Rectangle
Auto Trait Implementations
impl RefUnwindSafe for Rectangle
impl Send for Rectangle
impl Sync for Rectangle
impl Unpin for Rectangle
impl UnwindSafe for Rectangle
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcepub fn borrow_mut(&mut self) -> &mut T
pub fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> CheckedAs for T
impl<T> CheckedAs for T
sourcepub fn checked_as<Dst>(self) -> Option<Dst> where
T: CheckedCast<Dst>,
pub fn checked_as<Dst>(self) -> Option<Dst> where
T: CheckedCast<Dst>,
Casts the value.
sourceimpl<Src, Dst> CheckedCastFrom<Src> for Dst where
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dst where
Src: CheckedCast<Dst>,
sourcepub fn checked_cast_from(src: Src) -> Option<Dst>
pub fn checked_cast_from(src: Src) -> Option<Dst>
Casts the value.
sourceimpl<T> OverflowingAs for T
impl<T> OverflowingAs for T
sourcepub fn overflowing_as<Dst>(self) -> (Dst, bool) where
T: OverflowingCast<Dst>,
pub fn overflowing_as<Dst>(self) -> (Dst, bool) where
T: OverflowingCast<Dst>,
Casts the value.
sourceimpl<Src, Dst> OverflowingCastFrom<Src> for Dst where
Src: OverflowingCast<Dst>,
impl<Src, Dst> OverflowingCastFrom<Src> for Dst where
Src: OverflowingCast<Dst>,
sourcepub fn overflowing_cast_from(src: Src) -> (Dst, bool)
pub fn overflowing_cast_from(src: Src) -> (Dst, bool)
OverflowingCasts the value.
sourceimpl<T> SaturatingAs for T
impl<T> SaturatingAs for T
sourcepub fn saturating_as<Dst>(self) -> Dst where
T: SaturatingCast<Dst>,
pub fn saturating_as<Dst>(self) -> Dst where
T: SaturatingCast<Dst>,
Casts the value.
sourceimpl<Src, Dst> SaturatingCastFrom<Src> for Dst where
Src: SaturatingCast<Dst>,
impl<Src, Dst> SaturatingCastFrom<Src> for Dst where
Src: SaturatingCast<Dst>,
sourcepub fn saturating_cast_from(src: Src) -> Dst
pub fn saturating_cast_from(src: Src) -> Dst
Casts the value.
sourceimpl<T> UnwrappedAs for T
impl<T> UnwrappedAs for T
sourcepub fn unwrapped_as<Dst>(self) -> Dst where
T: UnwrappedCast<Dst>,
pub fn unwrapped_as<Dst>(self) -> Dst where
T: UnwrappedCast<Dst>,
Casts the value.
sourceimpl<Src, Dst> UnwrappedCastFrom<Src> for Dst where
Src: UnwrappedCast<Dst>,
impl<Src, Dst> UnwrappedCastFrom<Src> for Dst where
Src: UnwrappedCast<Dst>,
sourcepub fn unwrapped_cast_from(src: Src) -> Dst
pub fn unwrapped_cast_from(src: Src) -> Dst
UnwrappedCasts the value.
sourceimpl<T> WrappingAs for T
impl<T> WrappingAs for T
sourcepub fn wrapping_as<Dst>(self) -> Dst where
T: WrappingCast<Dst>,
pub fn wrapping_as<Dst>(self) -> Dst where
T: WrappingCast<Dst>,
Casts the value.
sourceimpl<Src, Dst> WrappingCastFrom<Src> for Dst where
Src: WrappingCast<Dst>,
impl<Src, Dst> WrappingCastFrom<Src> for Dst where
Src: WrappingCast<Dst>,
sourcepub fn wrapping_cast_from(src: Src) -> Dst
pub fn wrapping_cast_from(src: Src) -> Dst
WrappingCasts the value.