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
sourceimpl 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
sourceimpl Clone for RoundedRectangle
impl Clone for RoundedRectangle
sourcefn clone(&self) -> RoundedRectangle
fn clone(&self) -> RoundedRectangle
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
sourceimpl ContainsPoint for RoundedRectangle
impl ContainsPoint for RoundedRectangle
sourceimpl Debug for RoundedRectangle
impl Debug for RoundedRectangle
sourceimpl Dimensions for RoundedRectangle
impl Dimensions for RoundedRectangle
sourcefn bounding_box(&self) -> Rectangle
fn bounding_box(&self) -> Rectangle
Returns the bounding box.
sourceimpl Hash for RoundedRectangle
impl Hash for RoundedRectangle
sourceimpl OffsetOutline for RoundedRectangle
impl OffsetOutline for RoundedRectangle
sourceimpl Ord for RoundedRectangle
impl Ord for RoundedRectangle
sourceimpl PartialEq<RoundedRectangle> for RoundedRectangle
impl PartialEq<RoundedRectangle> for RoundedRectangle
sourcefn eq(&self, other: &RoundedRectangle) -> bool
fn eq(&self, other: &RoundedRectangle) -> bool
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
sourcefn ne(&self, other: &RoundedRectangle) -> bool
fn ne(&self, other: &RoundedRectangle) -> bool
This method tests for !=
.
sourceimpl PartialOrd<RoundedRectangle> for RoundedRectangle
impl PartialOrd<RoundedRectangle> for RoundedRectangle
sourcefn partial_cmp(&self, other: &RoundedRectangle) -> Option<Ordering>
fn partial_cmp(&self, other: &RoundedRectangle) -> 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 RoundedRectangle
impl PointsIter for RoundedRectangle
sourceimpl Primitive for RoundedRectangle
impl Primitive for RoundedRectangle
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 RoundedRectangle
impl<C: PixelColor> StyledDimensions<PrimitiveStyle<C>> for RoundedRectangle
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 RoundedRectangle
impl<C: PixelColor> StyledDrawable<PrimitiveStyle<C>> for RoundedRectangle
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 RoundedRectangle
impl Transform for RoundedRectangle
sourcefn 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));
sourcefn 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
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.