Struct gsk4::PathBuilder
source · #[repr(transparent)]pub struct PathBuilder { /* private fields */ }
v4_14
only.Expand description
PathBuilder
is an auxiliary object for constructing
Path
objects.
A path is constructed like this:
⚠️ The following code is in C ⚠️
GskPath *
construct_path (void)
{
GskPathBuilder *builder;
builder = gsk_path_builder_new ();
// add contours to the path here
return gsk_path_builder_free_to_path (builder);
Adding contours to the path can be done in two ways.
The easiest option is to use the gsk_path_builder_add_*
group
of functions that add predefined contours to the current path,
either common shapes like add_circle()
or by adding from other paths like add_path()
.
The gsk_path_builder_add_*
methods always add complete contours,
and do not use or modify the current point.
The other option is to define each line and curve manually with
the gsk_path_builder_*_to
group of functions. You start with
a call to move_to()
to set the starting point
and then use multiple calls to any of the drawing functions to
move the pen along the plane. Once you are done, you can call
close()
to close the path by connecting it
back with a line to the starting point.
This is similar to how paths are drawn in Cairo.
Note that PathBuilder
will reduce the degree of added Bézier
curves as much as possible, to simplify rendering.
Implementations§
source§impl PathBuilder
impl PathBuilder
source§impl PathBuilder
impl PathBuilder
sourcepub fn new() -> PathBuilder
pub fn new() -> PathBuilder
Create a new PathBuilder
object.
The resulting builder would create an empty Path
.
Use addition functions to add types to it.
Returns
a new PathBuilder
sourcepub fn add_circle(&self, center: &Point, radius: f32)
pub fn add_circle(&self, center: &Point, radius: f32)
sourcepub fn add_layout(&self, layout: &Layout)
pub fn add_layout(&self, layout: &Layout)
sourcepub fn add_rect(&self, rect: &Rect)
pub fn add_rect(&self, rect: &Rect)
Adds @rect as a new contour to the path built by the builder.
The path is going around the rectangle in clockwise direction.
If the the width or height are 0, the path will be a closed horizontal or vertical line. If both are 0, it’ll be a closed dot.
rect
The rectangle to create a path for
sourcepub fn add_reverse_path(&self, path: &Path)
pub fn add_reverse_path(&self, path: &Path)
sourcepub fn add_rounded_rect(&self, rect: &RoundedRect)
pub fn add_rounded_rect(&self, rect: &RoundedRect)
Adds @rect as a new contour to the path built in @self.
The path is going around the rectangle in clockwise direction.
rect
the rounded rect
sourcepub fn add_segment(&self, path: &Path, start: &PathPoint, end: &PathPoint)
pub fn add_segment(&self, path: &Path, start: &PathPoint, end: &PathPoint)
Adds to @self the segment of @path from @start to @end.
If @start is equal to or after @end, the path will first add the segment from @start to the end of the path, and then add the segment from the beginning to @end. If the path is closed, these segments will be connected.
Note that this method always adds a path with the given start point
and end point. To add a closed path, use add_path()
.
path
the Path
to take the segment to
start
the point on @path to start at
end
the point on @path to end at
sourcepub fn arc_to(&self, x1: f32, y1: f32, x2: f32, y2: f32)
pub fn arc_to(&self, x1: f32, y1: f32, x2: f32, y2: f32)
Adds an elliptical arc from the current point to @x3, @y3 with @x1, @y1 determining the tangent directions.
After this, @x3, @y3 will be the new current point.
Note: Two points and their tangents do not determine
a unique ellipse, so GSK just picks one. If you need more
precise control, use conic_to()
or svg_arc_to()
.
sourcepub fn close(&self)
pub fn close(&self)
Ends the current contour with a line back to the start point.
Note that this is different from calling line_to()
with the start point in that the contour will be closed. A closed
contour behaves differently from an open one. When stroking, its
start and end point are considered connected, so they will be
joined via the line join, and not ended with line caps.
sourcepub fn conic_to(&self, x1: f32, y1: f32, x2: f32, y2: f32, weight: f32)
pub fn conic_to(&self, x1: f32, y1: f32, x2: f32, y2: f32, weight: f32)
Adds a conic curve from the current point to @x2, @y2 with the given @weight and @x1, @y1 as the control point.
The weight determines how strongly the curve is pulled towards the control point. A conic with weight 1 is identical to a quadratic Bézier curve with the same points.
Conic curves can be used to draw ellipses and circles. They are also known as rational quadratic Bézier curves.
After this, @x2, @y2 will be the new current point.
## `x1` x coordinate of control point ## `y1` y coordinate of control point ## `x2` x coordinate of the end of the curve ## `y2` y coordinate of the end of the curve ## `weight` weight of the control point, must be greater than zerosourcepub fn cubic_to(&self, x1: f32, y1: f32, x2: f32, y2: f32, x3: f32, y3: f32)
pub fn cubic_to(&self, x1: f32, y1: f32, x2: f32, y2: f32, x3: f32, y3: f32)
Adds a cubic Bézier curve from the current point to @x3, @y3 with @x1, @y1 and @x2, @y2 as the control points.
After this, @x3, @y3 will be the new current point.
## `x1` x coordinate of first control point ## `y1` y coordinate of first control point ## `x2` x coordinate of second control point ## `y2` y coordinate of second control point ## `x3` x coordinate of the end of the curve ## `y3` y coordinate of the end of the curvesourcepub fn current_point(&self) -> Point
pub fn current_point(&self) -> Point
Gets the current point.
The current point is used for relative drawing commands and updated after every operation.
When the builder is created, the default current point is set
to 0, 0
. Note that this is different from cairo, which starts
out without a current point.
Returns
The current point
sourcepub fn html_arc_to(&self, x1: f32, y1: f32, x2: f32, y2: f32, radius: f32)
pub fn html_arc_to(&self, x1: f32, y1: f32, x2: f32, y2: f32, radius: f32)
Implements arc-to according to the HTML Canvas spec.
A convenience function that implements the HTML arc_to functionality.
After this, the current point will be the point where the circle with the given radius touches the line from @x1, @y1 to @x2, @y2.
x1
X coordinate of first control point
y1
Y coordinate of first control point
x2
X coordinate of second control point
y2
Y coordinate of second control point
radius
Radius of the circle
sourcepub fn line_to(&self, x: f32, y: f32)
pub fn line_to(&self, x: f32, y: f32)
Draws a line from the current point to @x, @y and makes it the new current point.
## `x` x coordinate ## `y` y coordinatesourcepub fn quad_to(&self, x1: f32, y1: f32, x2: f32, y2: f32)
pub fn quad_to(&self, x1: f32, y1: f32, x2: f32, y2: f32)
Adds a quadratic Bézier curve from the current point to @x2, @y2 with @x1, @y1 as the control point.
After this, @x2, @y2 will be the new current point.
## `x1` x coordinate of control point ## `y1` y coordinate of control point ## `x2` x coordinate of the end of the curve ## `y2` y coordinate of the end of the curvesourcepub fn rel_arc_to(&self, x1: f32, y1: f32, x2: f32, y2: f32)
pub fn rel_arc_to(&self, x1: f32, y1: f32, x2: f32, y2: f32)
Adds an elliptical arc from the current point to @x3, @y3 with @x1, @y1 determining the tangent directions.
All coordinates are given relative to the current point.
This is the relative version of arc_to()
.
x1
x coordinate of first control point
y1
y coordinate of first control point
x2
x coordinate of second control point
y2
y coordinate of second control point
sourcepub fn rel_conic_to(&self, x1: f32, y1: f32, x2: f32, y2: f32, weight: f32)
pub fn rel_conic_to(&self, x1: f32, y1: f32, x2: f32, y2: f32, weight: f32)
Adds a conic curve from the current point to @x2, @y2 with the given @weight and @x1, @y1 as the control point.
All coordinates are given relative to the current point.
This is the relative version of conic_to()
.
x1
x offset of control point
y1
y offset of control point
x2
x offset of the end of the curve
y2
y offset of the end of the curve
weight
weight of the curve, must be greater than zero
sourcepub fn rel_cubic_to(&self, x1: f32, y1: f32, x2: f32, y2: f32, x3: f32, y3: f32)
pub fn rel_cubic_to(&self, x1: f32, y1: f32, x2: f32, y2: f32, x3: f32, y3: f32)
Adds a cubic Bézier curve from the current point to @x3, @y3 with @x1, @y1 and @x2, @y2 as the control points.
All coordinates are given relative to the current point.
This is the relative version of cubic_to()
.
x1
x offset of first control point
y1
y offset of first control point
x2
x offset of second control point
y2
y offset of second control point
x3
x offset of the end of the curve
y3
y offset of the end of the curve
sourcepub fn rel_html_arc_to(&self, x1: f32, y1: f32, x2: f32, y2: f32, radius: f32)
pub fn rel_html_arc_to(&self, x1: f32, y1: f32, x2: f32, y2: f32, radius: f32)
Implements arc-to according to the HTML Canvas spec.
All coordinates are given relative to the current point.
This is the relative version of html_arc_to()
.
x1
X coordinate of first control point
y1
Y coordinate of first control point
x2
X coordinate of second control point
y2
Y coordinate of second control point
radius
Radius of the circle
sourcepub fn rel_line_to(&self, x: f32, y: f32)
pub fn rel_line_to(&self, x: f32, y: f32)
sourcepub fn rel_move_to(&self, x: f32, y: f32)
pub fn rel_move_to(&self, x: f32, y: f32)
sourcepub fn rel_quad_to(&self, x1: f32, y1: f32, x2: f32, y2: f32)
pub fn rel_quad_to(&self, x1: f32, y1: f32, x2: f32, y2: f32)
Adds a quadratic Bézier curve from the current point to @x2, @y2 with @x1, @y1 the control point.
All coordinates are given relative to the current point.
This is the relative version of quad_to()
.
x1
x offset of control point
y1
y offset of control point
x2
x offset of the end of the curve
y2
y offset of the end of the curve
sourcepub fn rel_svg_arc_to(
&self,
rx: f32,
ry: f32,
x_axis_rotation: f32,
large_arc: bool,
positive_sweep: bool,
x: f32,
y: f32
)
pub fn rel_svg_arc_to( &self, rx: f32, ry: f32, x_axis_rotation: f32, large_arc: bool, positive_sweep: bool, x: f32, y: f32 )
Implements arc-to according to the SVG spec.
All coordinates are given relative to the current point.
This is the relative version of svg_arc_to()
.
rx
X radius
ry
Y radius
x_axis_rotation
the rotation of the ellipsis
large_arc
whether to add the large arc
positive_sweep
whether to sweep in the positive direction
x
the X coordinate of the endpoint
y
the Y coordinate of the endpoint
sourcepub fn svg_arc_to(
&self,
rx: f32,
ry: f32,
x_axis_rotation: f32,
large_arc: bool,
positive_sweep: bool,
x: f32,
y: f32
)
pub fn svg_arc_to( &self, rx: f32, ry: f32, x_axis_rotation: f32, large_arc: bool, positive_sweep: bool, x: f32, y: f32 )
Implements arc-to according to the SVG spec.
A convenience function that implements the SVG arc_to functionality.
After this, @x, @y will be the new current point.
rx
X radius
ry
Y radius
x_axis_rotation
the rotation of the ellipsis
large_arc
whether to add the large arc
positive_sweep
whether to sweep in the positive direction
x
the X coordinate of the endpoint
y
the Y coordinate of the endpoint
sourcepub fn to_path(&self) -> Path
pub fn to_path(&self) -> Path
Creates a new Path
from the given builder.
The given PathBuilder
is reset once this function returns;
you cannot call this function multiple times on the same builder
instance.
This function is intended primarily for language bindings.
C code should use Gsk::PathBuilder::free_to_path()
.
Returns
the newly created Path
with all the contours added to the builder
source§impl PathBuilder
impl PathBuilder
sourcepub fn add_cairo_path(&self, path: &Path)
pub fn add_cairo_path(&self, path: &Path)
Adds a Cairo path to the builder.
You can use cairo_copy_path() to access the path from a Cairo context.
Trait Implementations§
source§impl Clone for PathBuilder
impl Clone for PathBuilder
source§impl Debug for PathBuilder
impl Debug for PathBuilder
source§impl Default for PathBuilder
impl Default for PathBuilder
source§impl From<PathBuilder> for Value
impl From<PathBuilder> for Value
source§fn from(s: PathBuilder) -> Self
fn from(s: PathBuilder) -> Self
source§impl HasParamSpec for PathBuilder
impl HasParamSpec for PathBuilder
type ParamSpec = ParamSpecBoxed
§type SetValue = PathBuilder
type SetValue = PathBuilder
type BuilderFn = fn(_: &str) -> ParamSpecBoxedBuilder<'_, PathBuilder>
fn param_spec_builder() -> Self::BuilderFn
source§impl Hash for PathBuilder
impl Hash for PathBuilder
source§impl Ord for PathBuilder
impl Ord for PathBuilder
source§fn cmp(&self, other: &PathBuilder) -> Ordering
fn cmp(&self, other: &PathBuilder) -> Ordering
1.21.0 · source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere Self: Sized,
source§impl PartialEq<PathBuilder> for PathBuilder
impl PartialEq<PathBuilder> for PathBuilder
source§fn eq(&self, other: &PathBuilder) -> bool
fn eq(&self, other: &PathBuilder) -> bool
self
and other
values to be equal, and is used
by ==
.source§impl PartialOrd<PathBuilder> for PathBuilder
impl PartialOrd<PathBuilder> for PathBuilder
source§fn partial_cmp(&self, other: &PathBuilder) -> Option<Ordering>
fn partial_cmp(&self, other: &PathBuilder) -> Option<Ordering>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moresource§impl StaticType for PathBuilder
impl StaticType for PathBuilder
source§fn static_type() -> Type
fn static_type() -> Type
Self
.