Class PathBuilder

All Implemented Interfaces:
Proxy

@Generated("org.javagi.JavaGI") public class PathBuilder extends ProxyInstance

Constructs GskPath objects.

A path is constructed like this:

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 addCircle(Point, float) or by adding from other paths like addPath(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 moveTo(float, float) 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 GskPathBuilder will reduce the degree of added Bézier curves as much as possible, to simplify rendering.

Since:
4.14
  • Constructor Summary

    Constructors
    Constructor
    Description
    Create a new GskPathBuilder object.
    Create a PathBuilder proxy instance for the provided memory address.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    addCairoPath(org.freedesktop.cairo.Path path)
    Adds a Cairo path to the builder.
    void
    addCircle(Point center, float radius)
    Adds a circle as a new contour.
    void
    addLayout(Layout layout)
    Adds the outlines for the glyphs in layout to the builder.
    void
    addPath(Path path)
    Appends all of path to the builder.
    void
    addRect(Rect rect)
    Adds a rectangle as a new contour.
    void
    Appends all of path to the builder, in reverse order.
    void
    Adds a rounded rectangle as a new contour.
    void
    addSegment(Path path, PathPoint start, PathPoint end)
    Adds a segment of a path to the builder.
    void
    arcTo(float x1, float y1, float x2, float y2)
    Adds an elliptical arc from the current point to x2, y2 with x1, y1 determining the tangent directions.
    void
    Ends the current contour with a line back to the start point.
    void
    conicTo(float x1, float y1, float x2, float y2, float weight)
    Adds a conic curve from the current point to x2, y2 with the given weight and x1, y1 as the control point.
    void
    cubicTo(float x1, float y1, float x2, float y2, float x3, float y3)
    Adds a cubic Bézier curve from the current point to x3, y3 with x1, y1 and x2, y2 as the control points.
    Creates a new path from the current state of the builder, and unrefs the builder.
    Gets the current point.
    The memory layout of the native struct.
    static @Nullable Type
    Get the GType of the PathBuilder class.
    void
    htmlArcTo(float x1, float y1, float x2, float y2, float radius)
    Implements arc-to according to the HTML Canvas spec.
    void
    lineTo(float x, float y)
    Draws a line from the current point to x, y and makes it the new current point.
    void
    moveTo(float x, float y)
    Starts a new contour by placing the pen at x, y.
    void
    quadTo(float x1, float y1, float x2, float y2)
    Adds a quadratic Bézier curve from the current point to x2, y2 with x1, y1 as the control point.
    ref()
    Acquires a reference on the given builder.
    void
    relArcTo(float x1, float y1, float x2, float y2)
    Adds an elliptical arc from the current point to x2, y2 with x1, y1 determining the tangent directions.
    void
    relConicTo(float x1, float y1, float x2, float y2, float weight)
    Adds a conic curve from the current point to x2, y2 with the given weight and x1, y1 as the control point.
    void
    relCubicTo(float x1, float y1, float x2, float y2, float x3, float y3)
    Adds a cubic Bézier curve from the current point to x3, y3 with x1, y1 and x2, y2 as the control points.
    void
    relHtmlArcTo(float x1, float y1, float x2, float y2, float radius)
    Implements arc-to according to the HTML Canvas spec.
    void
    relLineTo(float x, float y)
    Draws a line from the current point to a point offset from it by x, y and makes it the new current point.
    void
    relMoveTo(float x, float y)
    Starts a new contour by placing the pen at x, y relative to the current point.
    void
    relQuadTo(float x1, float y1, float x2, float y2)
    Adds a quadratic Bézier curve from the current point to x2, y2 with x1, y1 the control point.
    void
    relSvgArcTo(float rx, float ry, float xAxisRotation, boolean largeArc, boolean positiveSweep, float x, float y)
    Implements arc-to according to the SVG spec.
    void
    svgArcTo(float rx, float ry, float xAxisRotation, boolean largeArc, boolean positiveSweep, float x, float y)
    Implements arc-to according to the SVG spec.
    Creates a new path from the given builder.
    void
    Releases a reference on the given builder.

    Methods inherited from class ProxyInstance

    equals, handle, hashCode

    Methods inherited from class Object

    clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • PathBuilder

      public PathBuilder(MemorySegment address)
      Create a PathBuilder proxy instance for the provided memory address.
      Parameters:
      address - the memory address of the native object
    • PathBuilder

      public PathBuilder()

      Create a new GskPathBuilder object.

      The resulting builder would create an empty GskPath. Use addition functions to add types to it.

      Since:
      4.14
  • Method Details

    • getType

      public static @Nullable Type getType()
      Get the GType of the PathBuilder class.
      Returns:
      the GType
    • getMemoryLayout

      public static MemoryLayout getMemoryLayout()
      The memory layout of the native struct.
      Returns:
      the memory layout
    • addCairoPath

      public void addCairoPath(org.freedesktop.cairo.Path path)

      Adds a Cairo path to the builder.

      You can use cairo_copy_path() to access the path from a Cairo context.

      Parameters:
      path - a path
      Since:
      4.14
    • addCircle

      public void addCircle(Point center, float radius)

      Adds a circle as a new contour.

      The path is going around the circle in clockwise direction.

      If radius is zero, the contour will be a closed point.

      Parameters:
      center - the center of the circle
      radius - the radius of the circle
      Since:
      4.14
    • addLayout

      public void addLayout(Layout layout)
      Adds the outlines for the glyphs in layout to the builder.
      Parameters:
      layout - the pango layout to add
      Since:
      4.14
    • addPath

      public void addPath(Path path)
      Appends all of path to the builder.
      Parameters:
      path - the path to append
      Since:
      4.14
    • addRect

      public void addRect(Rect rect)

      Adds a rectangle as a new contour.

      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.

      Parameters:
      rect - the rectangle to create a path for
      Since:
      4.14
    • addReversePath

      public void addReversePath(Path path)
      Appends all of path to the builder, in reverse order.
      Parameters:
      path - the path to append
      Since:
      4.14
    • addRoundedRect

      public void addRoundedRect(RoundedRect rect)

      Adds a rounded rectangle as a new contour.

      The path is going around the rectangle in clockwise direction.

      Parameters:
      rect - the rounded rect
      Since:
      4.14
    • addSegment

      public void addSegment(Path path, PathPoint start, PathPoint end)

      Adds a segment of a path to the builder.

      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 addPath(Path).

      Parameters:
      path - the path to take the segment to
      start - the point on path to start at
      end - the point on path to end at
      Since:
      4.14
    • arcTo

      public void arcTo(float x1, float y1, float x2, float y2)

      Adds an elliptical arc from the current point to x2, y2 with x1, y1 determining the tangent directions.

      After this, x2, y2 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 conicTo(float, float, float, float, float) or svgArcTo(float, float, float, boolean, boolean, float, float).

      Arc To
      Parameters:
      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
      Since:
      4.14
    • close

      public void close()

      Ends the current contour with a line back to the start point.

      Note that this is different from calling lineTo(float, float) 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.

      Since:
      4.14
    • conicTo

      public void conicTo(float x1, float y1, float x2, float y2, float weight)

      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.

      Conic To
      Parameters:
      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 zero
      Since:
      4.14
    • cubicTo

      public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3)

      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.

      Cubic To
      Parameters:
      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 curve
      Since:
      4.14
    • freeToPath

      public Path freeToPath()
      Creates a new path from the current state of the builder, and unrefs the builder.
      Returns:
      the newly created path with all the contours added to the builder
      Since:
      4.14
    • getCurrentPoint

      public Point getCurrentPoint()

      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
      Since:
      4.14
    • htmlArcTo

      public void htmlArcTo(float x1, float y1, float x2, float y2, float radius)

      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.

      Parameters:
      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
      Since:
      4.14
    • lineTo

      public void lineTo(float x, float y)

      Draws a line from the current point to x, y and makes it the new current point.

      Line To
      Parameters:
      x - x coordinate
      y - y coordinate
      Since:
      4.14
    • moveTo

      public void moveTo(float x, float y)

      Starts a new contour by placing the pen at x, y.

      If this function is called twice in succession, the first call will result in a contour made up of a single point. The second call will start a new contour.

      Parameters:
      x - x coordinate
      y - y coordinate
      Since:
      4.14
    • quadTo

      public void quadTo(float x1, float y1, float x2, float y2)

      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.

      Quad To
      Parameters:
      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
      Since:
      4.14
    • ref

      public PathBuilder ref()

      Acquires a reference on the given builder.

      This function is intended primarily for language bindings. GskPathBuilder objects should not be kept around.

      Returns:
      the given path builder with its reference count increased
      Since:
      4.14
    • relArcTo

      public void relArcTo(float x1, float y1, float x2, float y2)

      Adds an elliptical arc from the current point to x2, y2 with x1, y1 determining the tangent directions.

      All coordinates are given relative to the current point.

      This is the relative version of arcTo(float, float, float, float).

      Parameters:
      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
      Since:
      4.14
    • relConicTo

      public void relConicTo(float x1, float y1, float x2, float y2, float weight)

      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 conicTo(float, float, float, float, float).

      Parameters:
      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
      Since:
      4.14
    • relCubicTo

      public void relCubicTo(float x1, float y1, float x2, float y2, float x3, float y3)

      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 cubicTo(float, float, float, float, float, float).

      Parameters:
      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
      Since:
      4.14
    • relHtmlArcTo

      public void relHtmlArcTo(float x1, float y1, float x2, float y2, float radius)

      Implements arc-to according to the HTML Canvas spec.

      All coordinates are given relative to the current point.

      This is the relative version of htmlArcTo(float, float, float, float, float).

      Parameters:
      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
      Since:
      4.14
    • relLineTo

      public void relLineTo(float x, float y)

      Draws a line from the current point to a point offset from it by x, y and makes it the new current point.

      This is the relative version of lineTo(float, float).

      Parameters:
      x - x offset
      y - y offset
      Since:
      4.14
    • relMoveTo

      public void relMoveTo(float x, float y)

      Starts a new contour by placing the pen at x, y relative to the current point.

      This is the relative version of moveTo(float, float).

      Parameters:
      x - x offset
      y - y offset
      Since:
      4.14
    • relQuadTo

      public void relQuadTo(float x1, float y1, float x2, float y2)

      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 quadTo(float, float, float, float).

      Parameters:
      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
      Since:
      4.14
    • relSvgArcTo

      public void relSvgArcTo(float rx, float ry, float xAxisRotation, boolean largeArc, boolean positiveSweep, float x, float y)

      Implements arc-to according to the SVG spec.

      All coordinates are given relative to the current point.

      This is the relative version of svgArcTo(float, float, float, boolean, boolean, float, float).

      Parameters:
      rx - x radius
      ry - y radius
      xAxisRotation - the rotation of the ellipsis
      largeArc - whether to add the large arc
      positiveSweep - whether to sweep in the positive direction
      x - x coordinate of the endpoint
      y - y coordinate of the endpoint
      Since:
      4.14
    • svgArcTo

      public void svgArcTo(float rx, float ry, float xAxisRotation, boolean largeArc, boolean positiveSweep, float x, float y)

      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.

      Parameters:
      rx - x radius
      ry - y radius
      xAxisRotation - the rotation of the ellipsis
      largeArc - whether to add the large arc
      positiveSweep - whether to sweep in the positive direction
      x - x coordinate of the endpoint
      y - y coordinate of the endpoint
      Since:
      4.14
    • toPath

      public Path toPath()

      Creates a new path from the given builder.

      The given GskPathBuilder is reset to the initial state once this function returns. Calling this function again on the same builder instance will therefore produce an empty path, not a copy of the same path.

      This function is intended primarily for language bindings. C code should use freeToPath().

      Returns:
      the newly created path with all the contours added to the builder
      Since:
      4.14
    • unref

      public void unref()
      Releases a reference on the given builder.
      Since:
      4.14