## GOPath

GOPath

## Synopsis

                        GOPath;
    void                (*GOPathClosePathFunc)              (void *closure);
    void                (*GOPathCurveToFunc)                (void *closure,
                                                             GOPathPoint const *point0,
                                                             GOPathPoint const *point1,
                                                             GOPathPoint const *point2);
    void                (*GOPathLineToFunc)                 (void *closure,
                                                             GOPathPoint const *point);
    void                (*GOPathMoveToFunc)                 (void *closure,
                                                             GOPathPoint const *point);
    enum                GOPathDirection;
    enum                GOPathOptions;
                        GOPathPoint;
    GOPath *            go_path_append                      (GOPath *path1,
                                                             GOPath const *path2);
    void                go_path_arc                         (GOPath *path,
                                                             double cx,
                                                             double cy,
                                                             double rx,
                                                             double ry,
                                                             double th0,
                                                             double th1);
    void                go_path_arc_to                      (GOPath *path,
                                                             double cx,
                                                             double cy,
                                                             double rx,
                                                             double ry,
                                                             double th0,
                                                             double th1);
    void                go_path_clear                       (GOPath *path);
    void                go_path_close                       (GOPath *path);
    GOPath *            go_path_copy                        (GOPath const *path);
    void                go_path_curve_to                    (GOPath *path,
                                                             double x0,
                                                             double y0,
                                                             double x1,
                                                             double y1,
                                                             double x2,
                                                             double y2);
    void                go_path_free                        (GOPath *path);
    GOPathOptions       go_path_get_options                 (GOPath const *path);
    void                go_path_interpret                   (GOPath const *path,
                                                             GOPathDirection direction,
                                                             GOPathMoveToFunc move_to,
                                                             GOPathLineToFunc line_to,
                                                             GOPathCurveToFunc curve_to,
                                                             GOPathClosePathFunc close_path,
                                                             void *closure);
    void                go_path_line_to                     (GOPath *path,
                                                             double x,
                                                             double y);
    void                go_path_move_to                     (GOPath *path,
                                                             double x,
                                                             double y);
    GOPath *            go_path_new                         (void);
    GOPath *            go_path_new_from_odf_enhanced_path  (char const *src,
                                                             GHashTable const *variables);
    GOPath *            go_path_new_from_svg                (char const *src);
    void                go_path_pie_wedge                   (GOPath *path,
                                                             double cx,
                                                             double cy,
                                                             double rx,
                                                             double ry,
                                                             double th0,
                                                             double th1);
    void                go_path_rectangle                   (GOPath *path,
                                                             double x,
                                                             double y,
                                                             double width,
                                                             double height);
    GOPath *            go_path_ref                         (GOPath *path);
    void                go_path_ring_wedge                  (GOPath *path,
                                                             double cx,
                                                             double cy,
                                                             double rx_out,
                                                             double ry_out,
                                                             double rx_in,
                                                             double ry_in,
                                                             double th0,
                                                             double th1);
    void                go_path_set_options                 (GOPath *path,
                                                             GOPathOptions options);
    void                go_path_to_cairo                    (GOPath const *path,
                                                             GOPathDirection direction,
                                                             cairo_t *cr);
    char *              go_path_to_svg                      (GOPath *path);
    GOPath *            go_path_scale                       (GOPath *path,
                                                             double scale_x,
                                                             double scale_y);

## Object Hierarchy

      GBoxed
       +----GOPath

## Description

## Details

### GOPath

    typedef struct _GOPath GOPath;

### GOPathClosePathFunc ()

    void                (*GOPathClosePathFunc)              (void *closure);

### GOPathCurveToFunc ()

    void                (*GOPathCurveToFunc)                (void *closure,
                                                             GOPathPoint const *point0,
                                                             GOPathPoint const *point1,
                                                             GOPathPoint const *point2);

### GOPathLineToFunc ()

    void                (*GOPathLineToFunc)                 (void *closure,
                                                             GOPathPoint const *point);

### GOPathMoveToFunc ()

    void                (*GOPathMoveToFunc)                 (void *closure,
                                                             GOPathPoint const *point);

### enum GOPathDirection

    typedef enum {
    	GO_PATH_DIRECTION_FORWARD,
    	GO_PATH_DIRECTION_BACKWARD
    } GOPathDirection;

`GO_PATH_DIRECTION_FORWARD` | go through the pass from start to end.
`GO_PATH_DIRECTION_BACKWARD` | go through the pass from end to start.

### enum GOPathOptions

    typedef enum {
    	GO_PATH_OPTIONS_SNAP_COORDINATES 	= 1<<0,
    	GO_PATH_OPTIONS_SNAP_WIDTH		= 1<<1,
    	GO_PATH_OPTIONS_SHARP			= 3
    } GOPathOptions;

`GO_PATH_OPTIONS_SNAP_COORDINATES` | round coordinates to avoid aliasing in pixbufs.
`GO_PATH_OPTIONS_SNAP_WIDTH` | round width so that it correpond to a round pixels number.
`GO_PATH_OPTIONS_SHARP` | use raw coordinates.

### GOPathPoint

    typedef struct {
    	double x;
    	double y;
    } GOPathPoint;

double `x`; | horizontal position.
double `y`; | vertical dimension.

### go_path_append ()

    GOPath *            go_path_append                      (GOPath *path1,
                                                             GOPath const *path2);

Appends `path2` at the end of `path1`.

`path1` : | GOPath
`path2` : | GOPath
Returns : | `path1`

### go_path_arc ()

    void                go_path_arc                         (GOPath *path,
                                                             double cx,
                                                             double cy,
                                                             double rx,
                                                             double ry,
                                                             double th0,
                                                             double th1);

### go_path_arc_to ()

    void                go_path_arc_to                      (GOPath *path,
                                                             double cx,
                                                             double cy,
                                                             double rx,
                                                             double ry,
                                                             double th0,
                                                             double th1);

### go_path_clear ()

    void                go_path_clear                       (GOPath *path);

### go_path_close ()

    void                go_path_close                       (GOPath *path);

### go_path_copy ()

    GOPath *            go_path_copy                        (GOPath const *path);

`path` : | GOPath
Returns : | a new GOPath identical to `path`.

### go_path_curve_to ()

    void                go_path_curve_to                    (GOPath *path,
                                                             double x0,
                                                             double y0,
                                                             double x1,
                                                             double y1,
                                                             double x2,
                                                             double y2);

### go_path_free ()

    void                go_path_free                        (GOPath *path);

Decrements references count and frees all memory allocated for `path` if references count reaches 0.

`path` : | a GOPath

### go_path_get_options ()

    GOPathOptions       go_path_get_options                 (GOPath const *path);

### go_path_interpret ()

    void                go_path_interpret                   (GOPath const *path,
                                                             GOPathDirection direction,
                                                             GOPathMoveToFunc move_to,
                                                             GOPathLineToFunc line_to,
                                                             GOPathCurveToFunc curve_to,
                                                             GOPathClosePathFunc close_path,
                                                             void *closure);

This function can be used to draw a path or for other purposes. To draw using cairo, the closure argument should be a valid cairo_t.

`path` : | GOPath
`direction` : | GOPathDirection
`move_to` : | the callback for move to. [scope call]
`line_to` : | the callback for drawing a line. [scope call]
`curve_to` : | the callback for drawing a bezier cubic spline. [scope call]
`close_path` : | the callback for closing the path. [scope call]
`closure` : | data to pass as first argument to the callbacks.

### go_path_line_to ()

    void                go_path_line_to                     (GOPath *path,
                                                             double x,
                                                             double y);

### go_path_move_to ()

    void                go_path_move_to                     (GOPath *path,
                                                             double x,
                                                             double y);

### go_path_new ()

    GOPath *            go_path_new                         (void);

### go_path_new_from_odf_enhanced_path ()

    GOPath *            go_path_new_from_odf_enhanced_path  (char const *src,
                                                             GHashTable const *variables);

`src` : | an ODF enhanced path.
Returns : | the newly allocated GOPath or `NULL` on error. [transfer full]

### go_path_new_from_svg ()

    GOPath *            go_path_new_from_svg                (char const *src);

`src` : | an SVG path.
Returns : | the newly allocated GOPath. [transfer full]

### go_path_pie_wedge ()

    void                go_path_pie_wedge                   (GOPath *path,
                                                             double cx,
                                                             double cy,
                                                             double rx,
                                                             double ry,
                                                             double th0,
                                                             double th1);

### go_path_rectangle ()

    void                go_path_rectangle                   (GOPath *path,
                                                             double x,
                                                             double y,
                                                             double width,
                                                             double height);

### go_path_ref ()

    GOPath *            go_path_ref                         (GOPath *path);

Increments references count to `path`.

`path` : | a GOPath
Returns : | the path with an incremented references count.

### go_path_ring_wedge ()

    void                go_path_ring_wedge                  (GOPath *path,
                                                             double cx,
                                                             double cy,
                                                             double rx_out,
                                                             double ry_out,
                                                             double rx_in,
                                                             double ry_in,
                                                             double th0,
                                                             double th1);

### go_path_set_options ()

    void                go_path_set_options                 (GOPath *path,
                                                             GOPathOptions options);

Change the rendering options for `path` using `GO_PATH_OPTIONS_SNAP_COORDINATES` `GO_PATH_OPTIONS_SNAP_WIDTH` `GO_PATH_OPTIONS_SHARP`

`path` : | a GOPath
`options` : | GOPathOptions

### go_path_to_cairo ()

    void                go_path_to_cairo                    (GOPath const *path,
                                                             GOPathDirection direction,
                                                             cairo_t *cr);

Renders the path to the cairo context using its current settings.

`path` : | GOPath
`direction` : | GOPathDirection
`cr` : | cairo_t

### go_path_to_svg ()

    char *              go_path_to_svg                      (GOPath *path);

Builds an svg path from `path`.

`path` : | a GOPath
Returns : | the svg:d string. [transfer full]

### go_path_scale ()

    GOPath *            go_path_scale                       (GOPath *path,
                                                             double scale_x,
                                                             double scale_y);

Builds a scaled.

`path` : | GOPath
`scale_x` : | horizontal scale.
`scale_y` : | vertical scale.
Returns : | the scaled path. [transfer full]