pub struct RoundedRectangle {
pub rectangle: Rectangle,
pub corners: CornerRadii,
}
Expand description
Rounded rectangle primitive.
Creates a rectangle with rounded corners. Corners can be circular or elliptical in shape, and
each corner may have a separate radius applied to it. To create a rounded rectangle with the same
radius for each corner, use the with_equal_corners
method.
Rounded rectangles with different radii for each corner can be created by passing a
CornerRadii
configuration struct to the new
method.
Overlapping corners
It is possible to create a RoundedRectangle
with corner radii too large to be contained within
its edges. When this happens, the corner radii will be confined to fit within the rounded
rectangle before use by other parts of embedded-graphics.
This is similar but not identical to how the CSS specification works as it relies on floating point calculations.
Examples
Create a uniform rounded rectangle
This example creates a rounded rectangle 50px wide by 60px tall. Using
with_equal_corners
, all corners are given the same 10px circular
radius. The rectangle is drawn using a solid green fill with a 5px red stroke.
use embedded_graphics::{
pixelcolor::Rgb565,
prelude::*,
primitives::{Rectangle, RoundedRectangle, PrimitiveStyle, PrimitiveStyleBuilder},
};
let style = PrimitiveStyleBuilder::new()
.stroke_width(5)
.stroke_color(Rgb565::RED)
.fill_color(Rgb565::GREEN)
.build();
RoundedRectangle::with_equal_corners(
Rectangle::new(Point::new(5, 5), Size::new(40, 50)),
Size::new(10, 10),
)
.into_styled(style)
.draw(&mut display)?;
Different corner radii
This example creates a rounded rectangle 50px wide by 60px tall. Each corner is given a distinct
radius in the x and y direction by creating a CornerRadii
object and passing that to RoundedRectangle::new
.
use embedded_graphics::{
pixelcolor::Rgb565,
prelude::*,
primitives::{CornerRadiiBuilder, Rectangle, RoundedRectangle, PrimitiveStyle, PrimitiveStyleBuilder},
};
let style = PrimitiveStyleBuilder::new()
.stroke_width(5)
.stroke_color(Rgb565::RED)
.fill_color(Rgb565::GREEN)
.build();
let radii = CornerRadiiBuilder::new()
.top_left(Size::new(5, 6))
.top_right(Size::new(7, 8))
.bottom_right(Size::new(9, 10))
.bottom_left(Size::new(11, 12))
.build();
RoundedRectangle::new(Rectangle::new(Point::new(5, 5), Size::new(40, 50)), radii)
.into_styled(style)
.draw(&mut display)?;
Using CornerRadiiBuilder
This example creates a rounded rectangle 50px wide by 60px tall. Corner radii are set using the
CornerRadiiBuilder
builder.
use embedded_graphics::{
pixelcolor::Rgb565,
prelude::*,
primitives::{CornerRadii, CornerRadiiBuilder, Rectangle, RoundedRectangle, PrimitiveStyle, PrimitiveStyleBuilder},
};
let style = PrimitiveStyleBuilder::new()
.stroke_width(5)
.stroke_color(Rgb565::RED)
.fill_color(Rgb565::GREEN)
.build();
let radii = CornerRadiiBuilder::new()
// Set the top left and top right corner radii to 10 x 20px
.top(Size::new(10, 20))
// Set the bottom right corner radius to 5 x 8px
.bottom_right(Size::new(5, 8))
.build();
RoundedRectangle::new(Rectangle::new(Point::new(5, 5), Size::new(40, 50)), radii)
.into_styled(style)
.draw(&mut display)?;
Fields§
§rectangle: Rectangle
The base rectangle
corners: CornerRadii
The radius of each corner
Implementations§
source§impl RoundedRectangle
impl RoundedRectangle
sourcepub const fn new(rectangle: Rectangle, corners: CornerRadii) -> Self
pub const fn new(rectangle: Rectangle, corners: CornerRadii) -> Self
Creates a new rounded rectangle with the given corner radii.
The size and position of the rounded rectangle is determined by the given base rectangle.
sourcepub const fn with_equal_corners(
rectangle: Rectangle,
corner_radius: Size
) -> Self
pub const fn with_equal_corners( rectangle: Rectangle, corner_radius: Size ) -> Self
Creates a new rounded rectangle with equal corner radius for all corners.
The size and position of the rounded rectangle is determined by the given base rectangle.
sourcepub fn confine_radii(&self) -> Self
pub fn confine_radii(&self) -> Self
Return the rounded rectangle with confined corner radii.
This method will return a rounded rectangle of the same width and height, but with all corner radii confined to fit within its base rectangle.
Calling this method is not necessary when using operations provided by embedded-graphics
(.into_styled()
, .contains()
, etc) as these confine the corner radii internally.
Examples
Confine corner radii that are too large
This example creates a rounded rectangle 50px x 60px in size. Each corner is set to an equal
radius of 40px x 40px. Each edge of the rectangle would thus need to be at least 80px long
to contain all corner radii completely. By using confine_radii
, the corner radii are
reduced to 25px x 25px so that they fit within the 50px x 60px base rectangle.
use embedded_graphics::{
geometry::{Point, Size},
primitives::{CornerRadii, CornerRadiiBuilder, Rectangle, RoundedRectangle},
};
let radii = CornerRadiiBuilder::new().all(Size::new(40, 40)).build();
let base_rectangle = Rectangle::new(Point::zero(), Size::new(50, 60));
let rounded_rectangle = RoundedRectangle::new(base_rectangle, radii);
let confined = rounded_rectangle.confine_radii();
assert_eq!(
confined.corners,
CornerRadii {
top_left: Size::new(25, 25),
top_right: Size::new(25, 25),
bottom_right: Size::new(25, 25),
bottom_left: Size::new(25, 25),
}
);
Trait Implementations§
source§impl Clone for RoundedRectangle
impl Clone for RoundedRectangle
source§fn clone(&self) -> RoundedRectangle
fn clone(&self) -> RoundedRectangle
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl ContainsPoint for RoundedRectangle
impl ContainsPoint for RoundedRectangle
source§impl Debug for RoundedRectangle
impl Debug for RoundedRectangle
source§impl Dimensions for RoundedRectangle
impl Dimensions for RoundedRectangle
source§fn bounding_box(&self) -> Rectangle
fn bounding_box(&self) -> Rectangle
source§impl Format for RoundedRectangle
impl Format for RoundedRectangle
source§impl Hash for RoundedRectangle
impl Hash for RoundedRectangle
source§impl OffsetOutline for RoundedRectangle
impl OffsetOutline for RoundedRectangle
source§impl Ord for RoundedRectangle
impl Ord for RoundedRectangle
source§fn cmp(&self, other: &RoundedRectangle) -> Ordering
fn cmp(&self, other: &RoundedRectangle) -> Ordering
1.21.0 · source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere Self: Sized,
source§impl PartialEq<RoundedRectangle> for RoundedRectangle
impl PartialEq<RoundedRectangle> for RoundedRectangle
source§fn eq(&self, other: &RoundedRectangle) -> bool
fn eq(&self, other: &RoundedRectangle) -> bool
self
and other
values to be equal, and is used
by ==
.source§impl PartialOrd<RoundedRectangle> for RoundedRectangle
impl PartialOrd<RoundedRectangle> for RoundedRectangle
source§fn partial_cmp(&self, other: &RoundedRectangle) -> Option<Ordering>
fn partial_cmp(&self, other: &RoundedRectangle) -> Option<Ordering>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moresource§impl PointsIter for RoundedRectangle
impl PointsIter for RoundedRectangle
source§impl Primitive for RoundedRectangle
impl Primitive for RoundedRectangle
source§fn 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,
Styled
.source§impl<C: PixelColor> StyledDimensions<PrimitiveStyle<C>> for RoundedRectangle
impl<C: PixelColor> StyledDimensions<PrimitiveStyle<C>> for RoundedRectangle
source§fn styled_bounding_box(&self, style: &PrimitiveStyle<C>) -> Rectangle
fn styled_bounding_box(&self, style: &PrimitiveStyle<C>) -> Rectangle
source§impl<C: PixelColor> StyledDrawable<PrimitiveStyle<C>> for RoundedRectangle
impl<C: PixelColor> StyledDrawable<PrimitiveStyle<C>> for RoundedRectangle
source§fn 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>,
source§impl Transform for RoundedRectangle
impl Transform for RoundedRectangle
source§fn translate(&self, by: Point) -> Self
fn translate(&self, by: Point) -> Self
Translate the rounded rectangle from its current position to a new position by (x, y)
pixels, returning a new RoundedRectangle
. For a mutating transform, see translate_mut
.
use embedded_graphics::primitives::{Rectangle, RoundedRectangle};
let original = RoundedRectangle::with_equal_corners(
Rectangle::new(Point::new(5, 10), Size::new(20, 30)),
Size::new(10, 15),
);
let moved = original.translate(Point::new(10, 12));
assert_eq!(original.bounding_box().top_left, Point::new(5, 10));
assert_eq!(moved.bounding_box().top_left, Point::new(15, 22));
source§fn translate_mut(&mut self, by: Point) -> &mut Self
fn translate_mut(&mut self, by: Point) -> &mut Self
Translate the rounded rectangle from its current position to a new position by (x, y) pixels.
use embedded_graphics::primitives::{Rectangle, RoundedRectangle};
let mut shape = RoundedRectangle::with_equal_corners(
Rectangle::new(Point::new(5, 10), Size::new(20, 30)),
Size::new(10, 15),
);
shape.translate_mut(Point::new(10, 12));
assert_eq!(shape.bounding_box().top_left, Point::new(15, 22));
impl Copy for RoundedRectangle
impl Eq for RoundedRectangle
impl StructuralEq for RoundedRectangle
impl StructuralPartialEq for RoundedRectangle
Auto Trait Implementations§
impl RefUnwindSafe for RoundedRectangle
impl Send for RoundedRectangle
impl Sync for RoundedRectangle
impl Unpin for RoundedRectangle
impl UnwindSafe for RoundedRectangle
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> CheckedAs for T
impl<T> CheckedAs for T
source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where T: CheckedCast<Dst>,
source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere Src: CheckedCast<Dst>,
source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
source§impl<Src, Dst> LosslessTryInto<Dst> for Srcwhere
Dst: LosslessTryFrom<Src>,
impl<Src, Dst> LosslessTryInto<Dst> for Srcwhere Dst: LosslessTryFrom<Src>,
source§fn lossless_try_into(self) -> Option<Dst>
fn lossless_try_into(self) -> Option<Dst>
source§impl<Src, Dst> LossyInto<Dst> for Srcwhere
Dst: LossyFrom<Src>,
impl<Src, Dst> LossyInto<Dst> for Srcwhere Dst: LossyFrom<Src>,
source§fn lossy_into(self) -> Dst
fn lossy_into(self) -> Dst
source§impl<T> OverflowingAs for T
impl<T> OverflowingAs for T
source§fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
fn overflowing_as<Dst>(self) -> (Dst, bool)where T: OverflowingCast<Dst>,
source§impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere Src: OverflowingCast<Dst>,
source§fn overflowing_cast_from(src: Src) -> (Dst, bool)
fn overflowing_cast_from(src: Src) -> (Dst, bool)
source§impl<T> SaturatingAs for T
impl<T> SaturatingAs for T
source§fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
fn saturating_as<Dst>(self) -> Dstwhere T: SaturatingCast<Dst>,
source§impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere Src: SaturatingCast<Dst>,
source§fn saturating_cast_from(src: Src) -> Dst
fn saturating_cast_from(src: Src) -> Dst
§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self
from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self
is actually part of its subset T
(and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset
but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self
to the equivalent element of its superset.