pub enum Shape {
Noop,
Vec(Vec<Shape>),
Circle(CircleShape),
Ellipse(EllipseShape),
LineSegment {
points: [Pos2; 2],
stroke: PathStroke,
},
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.
Ellipse(EllipseShape)
Ellipse 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
§Constructors
sourcepub fn line_segment(points: [Pos2; 2], stroke: impl Into<PathStroke>) -> Shape
pub fn line_segment(points: [Pos2; 2], stroke: impl Into<PathStroke>) -> Shape
A line between two points.
More efficient than calling Self::line
.
sourcepub fn hline(
x: impl Into<Rangef>,
y: f32,
stroke: impl Into<PathStroke>,
) -> Shape
pub fn hline( x: impl Into<Rangef>, y: f32, stroke: impl Into<PathStroke>, ) -> Shape
A horizontal line.
sourcepub fn vline(
x: f32,
y: impl Into<Rangef>,
stroke: impl Into<PathStroke>,
) -> Shape
pub fn vline( x: f32, y: impl Into<Rangef>, stroke: impl Into<PathStroke>, ) -> Shape
A vertical line.
sourcepub fn line(points: Vec<Pos2>, stroke: impl Into<PathStroke>) -> Shape
pub fn line(points: Vec<Pos2>, stroke: impl Into<PathStroke>) -> 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<PathStroke>) -> Shape
pub fn closed_line(points: Vec<Pos2>, stroke: impl Into<PathStroke>) -> 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<PathStroke>,
) -> Shape
pub fn convex_polygon( points: Vec<Pos2>, fill: impl Into<Color32>, stroke: impl Into<PathStroke>, ) -> 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 ellipse_filled( center: Pos2, radius: Vec2, fill_color: impl Into<Color32>, ) -> Shape
pub fn ellipse_stroke( center: Pos2, radius: Vec2, 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)
source§impl Shape
impl Shape
§Inspection and transforms
pub fn texture_id(&self) -> TextureId
sourcepub fn scale(&mut self, factor: f32)
pub fn scale(&mut self, factor: f32)
Scale the shape by factor
, in-place.
A wrapper around Self::transform
.
sourcepub fn translate(&mut self, delta: Vec2)
pub fn translate(&mut self, delta: Vec2)
Move the shape by delta
, in-place.
A wrapper around Self::transform
.
sourcepub fn transform(&mut self, transform: TSTransform)
pub fn transform(&mut self, transform: TSTransform)
Move the shape by this many points, in-place.
If using a PaintCallback
, note that only the rect is scaled as opposed
to other shapes where the stroke is also scaled.