logo
macro_rules! egrectangle {
    (top_left = $top_left:expr, bottom_right = $bottom_right:expr $(,)?) => { ... };
    (top_left = $top_left:expr, bottom_right = $bottom_right:expr, style = $style:expr $(,)?) => { ... };
}
Expand description

Create a Rectangle with optional styling using a convenient macro.

use embedded_graphics::{
    egrectangle,
    pixelcolor::Rgb565,
    prelude::*,
    primitive_style,
    primitives::Rectangle,
    style::{PrimitiveStyle, Styled},
};

let empty_rect: Styled<Rectangle, PrimitiveStyle<Rgb565>> =
    egrectangle!(top_left = (10, 20), bottom_right = (30, 40));

let filled_rect: Styled<Rectangle, PrimitiveStyle<Rgb565>> = egrectangle!(
    top_left = (10, 20),
    bottom_right = (30, 40),
    style = primitive_style!(stroke_color = Rgb565::RED, fill_color = Rgb565::GREEN)
);

Style properties like stroke_color map to methods on the PrimitiveStyleBuilder struct. For example, the following code makes two identical rectangles:

use embedded_graphics::{
    egrectangle,
    pixelcolor::Rgb565,
    prelude::*,
    primitive_style,
    primitives::Rectangle,
    style::{PrimitiveStyle, PrimitiveStyleBuilder, Styled},
};

let rectangle_1: Styled<Rectangle, PrimitiveStyle<Rgb565>> = egrectangle!(
    top_left = (10, 20),
    bottom_right = (30, 40),
    style = primitive_style!(
        stroke_color = Rgb565::RED,
        fill_color = Rgb565::GREEN,
        stroke_width = 1
    )
);

let style = PrimitiveStyleBuilder::new()
    .fill_color(Rgb565::GREEN)
    .stroke_color(Rgb565::RED)
    .stroke_width(1)
    .build();

let rectangle_2: Styled<Rectangle, PrimitiveStyle<Rgb565>> =
    Rectangle::new(Point::new(10, 20), Point::new(30, 40)).into_styled(style);

assert_eq!(rectangle_1, rectangle_2);