Trait SvgPathBuilder
pub trait SvgPathBuilder {
Show 21 methods
// Required methods
fn move_to(&mut self, to: Point2D<f32, UnknownUnit>);
fn close(&mut self);
fn line_to(&mut self, to: Point2D<f32, UnknownUnit>);
fn quadratic_bezier_to(
&mut self,
ctrl: Point2D<f32, UnknownUnit>,
to: Point2D<f32, UnknownUnit>,
);
fn cubic_bezier_to(
&mut self,
ctrl1: Point2D<f32, UnknownUnit>,
ctrl2: Point2D<f32, UnknownUnit>,
to: Point2D<f32, UnknownUnit>,
);
fn relative_move_to(&mut self, to: Vector2D<f32, UnknownUnit>);
fn relative_line_to(&mut self, to: Vector2D<f32, UnknownUnit>);
fn relative_quadratic_bezier_to(
&mut self,
ctrl: Vector2D<f32, UnknownUnit>,
to: Vector2D<f32, UnknownUnit>,
);
fn relative_cubic_bezier_to(
&mut self,
ctrl1: Vector2D<f32, UnknownUnit>,
ctrl2: Vector2D<f32, UnknownUnit>,
to: Vector2D<f32, UnknownUnit>,
);
fn smooth_cubic_bezier_to(
&mut self,
ctrl2: Point2D<f32, UnknownUnit>,
to: Point2D<f32, UnknownUnit>,
);
fn smooth_relative_cubic_bezier_to(
&mut self,
ctrl2: Vector2D<f32, UnknownUnit>,
to: Vector2D<f32, UnknownUnit>,
);
fn smooth_quadratic_bezier_to(&mut self, to: Point2D<f32, UnknownUnit>);
fn smooth_relative_quadratic_bezier_to(
&mut self,
to: Vector2D<f32, UnknownUnit>,
);
fn horizontal_line_to(&mut self, x: f32);
fn relative_horizontal_line_to(&mut self, dx: f32);
fn vertical_line_to(&mut self, y: f32);
fn relative_vertical_line_to(&mut self, dy: f32);
fn arc_to(
&mut self,
radii: Vector2D<f32, UnknownUnit>,
x_rotation: Angle<f32>,
flags: ArcFlags,
to: Point2D<f32, UnknownUnit>,
);
fn relative_arc_to(
&mut self,
radii: Vector2D<f32, UnknownUnit>,
x_rotation: Angle<f32>,
flags: ArcFlags,
to: Vector2D<f32, UnknownUnit>,
);
// Provided methods
fn reserve(&mut self, _endpoints: usize, _ctrl_points: usize) { ... }
fn add_polygon(&mut self, polygon: Polygon<'_, Point2D<f32, UnknownUnit>>) { ... }
}
canvas
only.Expand description
A path building interface that tries to stay close to SVG’s path specification. https://svgwg.org/specs/paths/
Some of the wording in the documentation of this trait is borrowed from the SVG specification.
Unlike PathBuilder
, implementations of this trait are expected to deal with
various corners cases such as adding segments without starting a sub-path.
Required Methods§
fn move_to(&mut self, to: Point2D<f32, UnknownUnit>)
fn move_to(&mut self, to: Point2D<f32, UnknownUnit>)
Start a new sub-path at the given position.
Corresponding SVG command: M
.
This command establishes a new initial point and a new current point. The effect is as if the “pen” were lifted and moved to a new location. If a sub-path is in progress, it is ended without being closed.
fn close(&mut self)
fn close(&mut self)
Ends the current sub-path by connecting it back to its initial point.
Corresponding SVG command: Z
.
A straight line is drawn from the current point to the initial point of the current sub-path. The current position is set to the initial position of the sub-path that was closed.
fn line_to(&mut self, to: Point2D<f32, UnknownUnit>)
fn line_to(&mut self, to: Point2D<f32, UnknownUnit>)
Adds a line segment to the current sub-path.
Corresponding SVG command: L
.
The segment starts at the builder’s current position.
If this is the very first command of the path (the builder therefore does not
have a current position), the line_to
command is replaced with a move_to(to)
.
fn quadratic_bezier_to(
&mut self,
ctrl: Point2D<f32, UnknownUnit>,
to: Point2D<f32, UnknownUnit>,
)
fn quadratic_bezier_to( &mut self, ctrl: Point2D<f32, UnknownUnit>, to: Point2D<f32, UnknownUnit>, )
Adds a quadratic bézier segment to the current sub-path.
Corresponding SVG command: Q
.
The segment starts at the builder’s current position.
If this is the very first command of the path (the builder therefore does not
have a current position), the quadratic_bezier_to
command is replaced with
a move_to(to)
.
fn cubic_bezier_to(
&mut self,
ctrl1: Point2D<f32, UnknownUnit>,
ctrl2: Point2D<f32, UnknownUnit>,
to: Point2D<f32, UnknownUnit>,
)
fn cubic_bezier_to( &mut self, ctrl1: Point2D<f32, UnknownUnit>, ctrl2: Point2D<f32, UnknownUnit>, to: Point2D<f32, UnknownUnit>, )
Adds a cubic bézier segment to the current sub-path.
Corresponding SVG command: C
.
The segment starts at the builder’s current position.
If this is the very first command of the path (the builder therefore does not
have a current position), the cubic_bezier_to
command is replaced with
a move_to(to)
.
fn relative_move_to(&mut self, to: Vector2D<f32, UnknownUnit>)
fn relative_move_to(&mut self, to: Vector2D<f32, UnknownUnit>)
Equivalent to move_to
in relative coordinates.
Corresponding SVG command: m
.
The provided coordinates are offsets relative to the current position of the builder.
fn relative_line_to(&mut self, to: Vector2D<f32, UnknownUnit>)
fn relative_line_to(&mut self, to: Vector2D<f32, UnknownUnit>)
Equivalent to line_to
in relative coordinates.
Corresponding SVG command: l
.
The provided coordinates are offsets relative to the current position of the builder.
fn relative_quadratic_bezier_to(
&mut self,
ctrl: Vector2D<f32, UnknownUnit>,
to: Vector2D<f32, UnknownUnit>,
)
fn relative_quadratic_bezier_to( &mut self, ctrl: Vector2D<f32, UnknownUnit>, to: Vector2D<f32, UnknownUnit>, )
Equivalent to quadratic_bezier_to
in relative coordinates.
Corresponding SVG command: q
.
the provided coordinates are offsets relative to the current position of the builder.
fn relative_cubic_bezier_to(
&mut self,
ctrl1: Vector2D<f32, UnknownUnit>,
ctrl2: Vector2D<f32, UnknownUnit>,
to: Vector2D<f32, UnknownUnit>,
)
fn relative_cubic_bezier_to( &mut self, ctrl1: Vector2D<f32, UnknownUnit>, ctrl2: Vector2D<f32, UnknownUnit>, to: Vector2D<f32, UnknownUnit>, )
Equivalent to cubic_bezier_to
in relative coordinates.
Corresponding SVG command: c
.
The provided coordinates are offsets relative to the current position of the builder.
fn smooth_cubic_bezier_to(
&mut self,
ctrl2: Point2D<f32, UnknownUnit>,
to: Point2D<f32, UnknownUnit>,
)
fn smooth_cubic_bezier_to( &mut self, ctrl2: Point2D<f32, UnknownUnit>, to: Point2D<f32, UnknownUnit>, )
Equivalent to cubic_bezier_to
with implicit first control point.
Corresponding SVG command: S
.
The first control point is assumed to be the reflection of the second control point on the previous command relative to the current point. If there is no previous command or if the previous command was not a cubic bézier segment, the first control point is coincident with the current position.
fn smooth_relative_cubic_bezier_to(
&mut self,
ctrl2: Vector2D<f32, UnknownUnit>,
to: Vector2D<f32, UnknownUnit>,
)
fn smooth_relative_cubic_bezier_to( &mut self, ctrl2: Vector2D<f32, UnknownUnit>, to: Vector2D<f32, UnknownUnit>, )
Equivalent to smooth_cubic_bezier_to
in relative coordinates.
Corresponding SVG command: s
.
The provided coordinates are offsets relative to the current position of the builder.
fn smooth_quadratic_bezier_to(&mut self, to: Point2D<f32, UnknownUnit>)
fn smooth_quadratic_bezier_to(&mut self, to: Point2D<f32, UnknownUnit>)
Equivalent to quadratic_bezier_to
with implicit control point.
Corresponding SVG command: T
.
The control point is assumed to be the reflection of the control point on the previous command relative to the current point. If there is no previous command or if the previous command was not a quadratic bézier segment, a line segment is added instead.
fn smooth_relative_quadratic_bezier_to(
&mut self,
to: Vector2D<f32, UnknownUnit>,
)
fn smooth_relative_quadratic_bezier_to( &mut self, to: Vector2D<f32, UnknownUnit>, )
Equivalent to smooth_quadratic_bezier_to
in relative coordinates.
Corresponding SVG command: t
.
The provided coordinates are offsets relative to the current position of the builder.
fn horizontal_line_to(&mut self, x: f32)
fn horizontal_line_to(&mut self, x: f32)
Adds an horizontal line segment.
Corresponding SVG command: H
.
Equivalent to line_to
, using the y coordinate of the current position.
fn relative_horizontal_line_to(&mut self, dx: f32)
fn relative_horizontal_line_to(&mut self, dx: f32)
Adds an horizontal line segment in relative coordinates.
Corresponding SVG command: l
.
Equivalent to line_to
, using the y coordinate of the current position.
dx
is the horizontal offset relative to the current position.
fn vertical_line_to(&mut self, y: f32)
fn vertical_line_to(&mut self, y: f32)
Adds a vertical line segment.
Corresponding SVG command: V
.
Equivalent to line_to
, using the x coordinate of the current position.
fn relative_vertical_line_to(&mut self, dy: f32)
fn relative_vertical_line_to(&mut self, dy: f32)
Adds a vertical line segment in relative coordinates.
Corresponding SVG command: v
.
Equivalent to line_to
, using the y coordinate of the current position.
dy
is the horizontal offset relative to the current position.
fn arc_to(
&mut self,
radii: Vector2D<f32, UnknownUnit>,
x_rotation: Angle<f32>,
flags: ArcFlags,
to: Point2D<f32, UnknownUnit>,
)
fn arc_to( &mut self, radii: Vector2D<f32, UnknownUnit>, x_rotation: Angle<f32>, flags: ArcFlags, to: Point2D<f32, UnknownUnit>, )
Adds an elliptical arc.
Corresponding SVG command: A
.
The arc starts at the current point and ends at to
.
The size and orientation of the ellipse are defined by radii
and an x_rotation
,
which indicates how the ellipse as a whole is rotated relative to the current coordinate
system. The center of the ellipse is calculated automatically to satisfy the constraints
imposed by the other parameters. the arc flags
contribute to the automatic calculations
and help determine how the arc is built.
fn relative_arc_to(
&mut self,
radii: Vector2D<f32, UnknownUnit>,
x_rotation: Angle<f32>,
flags: ArcFlags,
to: Vector2D<f32, UnknownUnit>,
)
fn relative_arc_to( &mut self, radii: Vector2D<f32, UnknownUnit>, x_rotation: Angle<f32>, flags: ArcFlags, to: Vector2D<f32, UnknownUnit>, )
Equivalent to arc_to
in relative coordinates.
Corresponding SVG command: a
.
The provided to
coordinates are offsets relative to the current position of
the builder.
Provided Methods§
fn reserve(&mut self, _endpoints: usize, _ctrl_points: usize)
fn reserve(&mut self, _endpoints: usize, _ctrl_points: usize)
Hints at the builder that a certain number of endpoints and control points will be added.
The Builder implementation may use this information to pre-allocate memory as an optimization.
fn add_polygon(&mut self, polygon: Polygon<'_, Point2D<f32, UnknownUnit>>)
fn add_polygon(&mut self, polygon: Polygon<'_, Point2D<f32, UnknownUnit>>)
Adds a sub-path from a polygon.
There must be no sub-path in progress when this method is called. No sub-path is in progress after the method is called.