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§
§impl Shape
impl Shape
§Constructors
pub 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
.
pub 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.
pub 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.
pub 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.
pub 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.
pub 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.
pub 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.
pub 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.
pub 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
.
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>
)
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
.
pub 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
pub 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.
pub 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
pub 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.
pub fn visual_bounding_rect(&self) -> Rect
pub fn visual_bounding_rect(&self) -> Rect
The visual bounding rectangle (includes stroke widths)
§impl Shape
impl Shape
§Inspection and transforms
pub fn texture_id(&self) -> TextureId
pub 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
.
pub 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
.
pub 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§
§impl From<CircleShape> for Shape
impl From<CircleShape> for Shape
§fn from(shape: CircleShape) -> Shape
fn from(shape: CircleShape) -> Shape
§impl From<CubicBezierShape> for Shape
impl From<CubicBezierShape> for Shape
§fn from(shape: CubicBezierShape) -> Shape
fn from(shape: CubicBezierShape) -> Shape
§impl From<EllipseShape> for Shape
impl From<EllipseShape> for Shape
§fn from(shape: EllipseShape) -> Shape
fn from(shape: EllipseShape) -> Shape
§impl From<PaintCallback> for Shape
impl From<PaintCallback> for Shape
§fn from(shape: PaintCallback) -> Shape
fn from(shape: PaintCallback) -> Shape
§impl From<QuadraticBezierShape> for Shape
impl From<QuadraticBezierShape> for Shape
§fn from(shape: QuadraticBezierShape) -> Shape
fn from(shape: QuadraticBezierShape) -> Shape
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> CheckedAs for T
impl<T> CheckedAs for T
source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request