pub enum Shape {
Noop,
Vec(Vec<Shape>),
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>)
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§
source§impl 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: impl Into<Rangef>, y: f32, stroke: impl Into<Stroke>) -> Shape
pub fn hline(x: impl Into<Rangef>, y: f32, stroke: impl Into<Stroke>) -> Shape
A horizontal line.
sourcepub fn vline(x: f32, y: impl Into<Rangef>, stroke: impl Into<Stroke>) -> Shape
pub fn vline(x: f32, y: impl Into<Rangef>, stroke: impl Into<Stroke>) -> Shape
A vertical line.
sourcepub fn line(points: Vec<Pos2>, stroke: impl Into<Stroke>) -> Shape
pub fn line(points: Vec<Pos2>, 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>, stroke: impl Into<Stroke>) -> Shape
pub fn closed_line(points: Vec<Pos2>, 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>
pub fn dotted_line( path: &[Pos2], color: impl Into<Color32>, spacing: f32, radius: f32 ) -> Vec<Shape>
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>
pub fn dashed_line( path: &[Pos2], stroke: impl Into<Stroke>, dash_length: f32, gap_length: f32 ) -> Vec<Shape>
Turn a line into dashes.
sourcepub fn dashed_line_with_offset(
path: &[Pos2],
stroke: impl Into<Stroke>,
dash_lengths: &[f32],
gap_lengths: &[f32],
dash_offset: f32
) -> Vec<Shape>
pub fn dashed_line_with_offset( path: &[Pos2], stroke: impl Into<Stroke>, dash_lengths: &[f32], gap_lengths: &[f32], dash_offset: f32 ) -> Vec<Shape>
Turn a line into dashes with different dash/gap lengths and a start offset.
sourcepub fn dashed_line_many(
points: &[Pos2],
stroke: impl Into<Stroke>,
dash_length: f32,
gap_length: f32,
shapes: &mut Vec<Shape>
)
pub fn dashed_line_many( points: &[Pos2], stroke: impl Into<Stroke>, dash_length: f32, gap_length: f32, shapes: &mut Vec<Shape> )
Turn a line into dashes. If you need to create many dashed lines use this instead of
Self::dashed_line
.
sourcepub fn dashed_line_many_with_offset(
points: &[Pos2],
stroke: impl Into<Stroke>,
dash_lengths: &[f32],
gap_lengths: &[f32],
dash_offset: f32,
shapes: &mut Vec<Shape>
)
pub fn dashed_line_many_with_offset( points: &[Pos2], stroke: impl Into<Stroke>, dash_lengths: &[f32], gap_lengths: &[f32], dash_offset: f32, shapes: &mut Vec<Shape> )
Turn a line into dashes with different dash/gap lengths and a start offset. If you need to
create many dashed lines use this instead of Self::dashed_line_with_offset
.
sourcepub fn convex_polygon(
points: Vec<Pos2>,
fill: impl Into<Color32>,
stroke: impl Into<Stroke>
) -> Shape
pub fn convex_polygon( points: Vec<Pos2>, 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
sourcepub fn galley(pos: Pos2, galley: Arc<Galley>, fallback_color: Color32) -> Shape
pub fn galley(pos: Pos2, galley: Arc<Galley>, fallback_color: Color32) -> Shape
Any uncolored parts of the Galley
(using Color32::PLACEHOLDER
) will be replaced with the given color.
Any non-placeholder color in the galley takes precedence over this fallback color.
sourcepub fn galley_with_override_text_color(
pos: Pos2,
galley: Arc<Galley>,
text_color: Color32
) -> Shape
pub fn galley_with_override_text_color( pos: Pos2, galley: Arc<Galley>, text_color: Color32 ) -> Shape
All text color in the Galley
will be replaced with the given color.
pub fn galley_with_color( pos: Pos2, galley: Arc<Galley>, text_color: Color32 ) -> Shape
Shape::galley
or Shape::galley_with_override_text_color
insteadpub fn mesh(mesh: Mesh) -> Shape
sourcepub fn image(
texture_id: TextureId,
rect: Rect,
uv: Rect,
tint: Color32
) -> Shape
pub fn image( texture_id: TextureId, rect: Rect, uv: Rect, tint: Color32 ) -> Shape
An image at the given position.
uv
should normally be Rect::from_min_max(pos2(0.0, 0.0), pos2(1.0, 1.0))
unless you want to crop or flip the image.
tint
is a color multiplier. Use Color32::WHITE
if you don’t want to tint the image.
sourcepub fn visual_bounding_rect(&self) -> Rect
pub fn visual_bounding_rect(&self) -> Rect
The visual bounding rectangle (includes stroke widths)