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>) -> Self
pub fn line_segment(points: [Pos2; 2], stroke: impl Into<PathStroke>) -> Self
A line between two points.
More efficient than calling Self::line
.
sourcepub fn hline(
x: impl Into<Rangef>,
y: f32,
stroke: impl Into<PathStroke>,
) -> Self
pub fn hline( x: impl Into<Rangef>, y: f32, stroke: impl Into<PathStroke>, ) -> Self
A horizontal line.
sourcepub fn vline(
x: f32,
y: impl Into<Rangef>,
stroke: impl Into<PathStroke>,
) -> Self
pub fn vline( x: f32, y: impl Into<Rangef>, stroke: impl Into<PathStroke>, ) -> Self
A vertical line.
sourcepub fn line(points: Vec<Pos2>, stroke: impl Into<PathStroke>) -> Self
pub fn line(points: Vec<Pos2>, stroke: impl Into<PathStroke>) -> Self
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>) -> Self
pub fn closed_line(points: Vec<Pos2>, stroke: impl Into<PathStroke>) -> Self
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<Self>
pub fn dotted_line( path: &[Pos2], color: impl Into<Color32>, spacing: f32, radius: f32, ) -> Vec<Self>
Turn a line into equally spaced dots.
sourcepub fn dashed_line(
path: &[Pos2],
stroke: impl Into<Stroke>,
dash_length: f32,
gap_length: f32,
) -> Vec<Self>
pub fn dashed_line( path: &[Pos2], stroke: impl Into<Stroke>, dash_length: f32, gap_length: f32, ) -> Vec<Self>
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<Self>
pub fn dashed_line_with_offset( path: &[Pos2], stroke: impl Into<Stroke>, dash_lengths: &[f32], gap_lengths: &[f32], dash_offset: f32, ) -> Vec<Self>
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<Self>,
)
pub fn dashed_line_many( points: &[Pos2], stroke: impl Into<Stroke>, dash_length: f32, gap_length: f32, shapes: &mut Vec<Self>, )
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<Self>,
)
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<Self>, )
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>,
) -> Self
pub fn convex_polygon( points: Vec<Pos2>, fill: impl Into<Color32>, stroke: impl Into<PathStroke>, ) -> Self
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>, ) -> Self
pub fn circle_stroke( center: Pos2, radius: f32, stroke: impl Into<Stroke>, ) -> Self
pub fn ellipse_filled( center: Pos2, radius: Vec2, fill_color: impl Into<Color32>, ) -> Self
pub fn ellipse_stroke( center: Pos2, radius: Vec2, stroke: impl Into<Stroke>, ) -> Self
pub fn rect_filled( rect: Rect, rounding: impl Into<Rounding>, fill_color: impl Into<Color32>, ) -> Self
pub fn rect_stroke( rect: Rect, rounding: impl Into<Rounding>, stroke: impl Into<Stroke>, ) -> Self
pub fn text( fonts: &Fonts, pos: Pos2, anchor: Align2, text: impl ToString, font_id: FontId, color: Color32, ) -> Self
sourcepub fn galley(pos: Pos2, galley: Arc<Galley>, fallback_color: Color32) -> Self
pub fn galley(pos: Pos2, galley: Arc<Galley>, fallback_color: Color32) -> Self
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,
) -> Self
pub fn galley_with_override_text_color( pos: Pos2, galley: Arc<Galley>, text_color: Color32, ) -> Self
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, ) -> Self
Shape::galley
or Shape::galley_with_override_text_color
insteadpub fn mesh(mesh: Mesh) -> Self
sourcepub fn image(texture_id: TextureId, rect: Rect, uv: Rect, tint: Color32) -> Self
pub fn image(texture_id: TextureId, rect: Rect, uv: Rect, tint: Color32) -> Self
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.
Trait Implementations§
source§impl From<CircleShape> for Shape
impl From<CircleShape> for Shape
source§fn from(shape: CircleShape) -> Self
fn from(shape: CircleShape) -> Self
source§impl From<CubicBezierShape> for Shape
impl From<CubicBezierShape> for Shape
source§fn from(shape: CubicBezierShape) -> Self
fn from(shape: CubicBezierShape) -> Self
source§impl From<EllipseShape> for Shape
impl From<EllipseShape> for Shape
source§fn from(shape: EllipseShape) -> Self
fn from(shape: EllipseShape) -> Self
source§impl From<PaintCallback> for Shape
impl From<PaintCallback> for Shape
source§fn from(shape: PaintCallback) -> Self
fn from(shape: PaintCallback) -> Self
source§impl From<QuadraticBezierShape> for Shape
impl From<QuadraticBezierShape> for Shape
source§fn from(shape: QuadraticBezierShape) -> Self
fn from(shape: QuadraticBezierShape) -> Self
impl StructuralPartialEq for Shape
Auto Trait Implementations§
impl Freeze for Shape
impl !RefUnwindSafe for Shape
impl Send for Shape
impl Sync for Shape
impl Unpin for Shape
impl !UnwindSafe for Shape
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)