Enum me3_framework::overlay::Shape
source · [−]pub enum Shape {
Noop,
Vec(Vec<Shape, Global>),
Circle(CircleShape),
LineSegment {
points: [Pos2; 2],
stroke: Stroke,
},
Path(PathShape),
Rect(RectShape),
Text(TextShape),
Mesh(Mesh),
QuadraticBezier(QuadraticBezierShape),
CubicBezier(CubicBezierShape),
Callback(PaintCallback),
}
Expand description
A paint primitive such as a circle or a piece of text. Coordinates are all screen space points (not physical pixels).
You should generally recreate your Shape
s each frame,
but storing them should also be fine with one exception:
Shape::Text
depends on the current pixels_per_point
(dpi scale)
and so must be recreated every time pixels_per_point
changes.
Variants
Noop
Paint nothing. This can be useful as a placeholder.
Vec(Vec<Shape, Global>)
Recursively nest more shapes - sometimes a convenience to be able to do. For performance reasons it is better to avoid it.
Circle(CircleShape)
Circle with optional outline and fill.
LineSegment
A line between two points.
Path(PathShape)
A series of lines between points. The path can have a stroke and/or fill (if closed).
Rect(RectShape)
Rectangle with optional outline and fill.
Text(TextShape)
Text.
This needs to be recreated if pixels_per_point
(dpi scale) changes.
Mesh(Mesh)
A general triangle mesh.
Can be used to display images.
QuadraticBezier(QuadraticBezierShape)
A quadratic Bézier Curve.
CubicBezier(CubicBezierShape)
A cubic Bézier Curve.
Callback(PaintCallback)
Backend-specific painting.
Implementations
sourceimpl Shape
impl Shape
sourcepub fn line_segment(points: [Pos2; 2], stroke: impl Into<Stroke>) -> Shape
pub fn line_segment(points: [Pos2; 2], stroke: impl Into<Stroke>) -> Shape
A line between two points.
More efficient than calling Self::line
.
sourcepub fn hline(x: RangeInclusive<f32>, y: f32, stroke: impl Into<Stroke>) -> Shape
pub fn hline(x: RangeInclusive<f32>, y: f32, stroke: impl Into<Stroke>) -> Shape
A horizontal line.
sourcepub fn vline(x: f32, y: RangeInclusive<f32>, stroke: impl Into<Stroke>) -> Shape
pub fn vline(x: f32, y: RangeInclusive<f32>, stroke: impl Into<Stroke>) -> Shape
A vertical line.
sourcepub fn line(points: Vec<Pos2, Global>, stroke: impl Into<Stroke>) -> Shape
pub fn line(points: Vec<Pos2, Global>, stroke: impl Into<Stroke>) -> Shape
A line through many points.
Use Self::line_segment
instead if your line only connects two points.
sourcepub fn closed_line(points: Vec<Pos2, Global>, stroke: impl Into<Stroke>) -> Shape
pub fn closed_line(points: Vec<Pos2, Global>, stroke: impl Into<Stroke>) -> Shape
A line that closes back to the start point again.
sourcepub fn dotted_line(
path: &[Pos2],
color: impl Into<Color32>,
spacing: f32,
radius: f32
) -> Vec<Shape, Global>ⓘNotable traits for Vec<u8, A>impl<A> Write for Vec<u8, A>where
A: Allocator,
pub fn dotted_line(
path: &[Pos2],
color: impl Into<Color32>,
spacing: f32,
radius: f32
) -> Vec<Shape, Global>ⓘNotable traits for Vec<u8, A>impl<A> Write for Vec<u8, A>where
A: Allocator,
A: Allocator,
Turn a line into equally spaced dots.
sourcepub fn dashed_line(
path: &[Pos2],
stroke: impl Into<Stroke>,
dash_length: f32,
gap_length: f32
) -> Vec<Shape, Global>ⓘNotable traits for Vec<u8, A>impl<A> Write for Vec<u8, A>where
A: Allocator,
pub fn dashed_line(
path: &[Pos2],
stroke: impl Into<Stroke>,
dash_length: f32,
gap_length: f32
) -> Vec<Shape, Global>ⓘNotable traits for Vec<u8, A>impl<A> Write for Vec<u8, A>where
A: Allocator,
A: Allocator,
Turn a line into dashes.
sourcepub fn dashed_line_many(
points: &[Pos2],
stroke: impl Into<Stroke>,
dash_length: f32,
gap_length: f32,
shapes: &mut Vec<Shape, Global>
)
pub fn dashed_line_many(
points: &[Pos2],
stroke: impl Into<Stroke>,
dash_length: f32,
gap_length: f32,
shapes: &mut Vec<Shape, Global>
)
Turn a line into dashes. If you need to create many dashed lines use this instead of
Self::dashed_line
sourcepub fn convex_polygon(
points: Vec<Pos2, Global>,
fill: impl Into<Color32>,
stroke: impl Into<Stroke>
) -> Shape
pub fn convex_polygon(
points: Vec<Pos2, Global>,
fill: impl Into<Color32>,
stroke: impl Into<Stroke>
) -> Shape
A convex polygon with a fill and optional stroke.
The most performant winding order is clockwise.
pub fn circle_filled(
center: Pos2,
radius: f32,
fill_color: impl Into<Color32>
) -> Shape
pub fn circle_stroke(
center: Pos2,
radius: f32,
stroke: impl Into<Stroke>
) -> Shape
pub fn rect_filled(
rect: Rect,
rounding: impl Into<Rounding>,
fill_color: impl Into<Color32>
) -> Shape
pub fn rect_stroke(
rect: Rect,
rounding: impl Into<Rounding>,
stroke: impl Into<Stroke>
) -> Shape
pub fn text(
fonts: &Fonts,
pos: Pos2,
anchor: Align2,
text: impl ToString,
font_id: FontId,
color: Color32
) -> Shape
pub fn galley(pos: Pos2, galley: Arc<Galley>) -> Shape
sourcepub fn galley_with_color(
pos: Pos2,
galley: Arc<Galley>,
text_color: Color32
) -> Shape
pub fn galley_with_color(
pos: Pos2,
galley: Arc<Galley>,
text_color: Color32
) -> Shape
The text color in the Galley
will be replaced with the given color.
pub fn mesh(mesh: Mesh) -> Shape
pub fn image(texture_id: TextureId, rect: Rect, uv: Rect, tint: Color32) -> Shape
sourcepub fn visual_bounding_rect(&self) -> Rect
pub fn visual_bounding_rect(&self) -> Rect
The visual bounding rectangle (includes stroke widths)