## GoPath

GoPath — Path handling

## Synopsis

    enum                GOPathDirection;
    enum                GOPathOptions;
                        GOPathPoint;
                        GOPath;
    #define             IS_GO_PATH                          (x)
    GOPath*             go_path_new                         (void);
    void                go_path_clear                       (GOPath *path);
    void                go_path_free                        (GOPath *path);
    void                go_path_set_options                 (GOPath *path,
                                                             GOPathOptions options);
    GOPathOptions       go_path_get_options                 (GOPath const *path);
    void                go_path_move_to                     (GOPath *path,
                                                             double x,
                                                             double y);
    void                go_path_line_to                     (GOPath *path,
                                                             double x,
                                                             double y);
    void                go_path_curve_to                    (GOPath *path,
                                                             double x0,
                                                             double y0,
                                                             double x1,
                                                             double y1,
                                                             double x2,
                                                             double y2);
    void                go_path_close                       (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_pie_wedge                   (GOPath *path,
                                                             double cx,
                                                             double cy,
                                                             double rx,
                                                             double ry,
                                                             double th0,
                                                             double th1);
    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_rectangle                   (GOPath *path,
                                                             double x,
                                                             double y,
                                                             double width,
                                                             double height);
    void                go_path_interpret                   (GOPath const *path,
                                                             GOPathDirection direction,
                                                             GOPathMoveToFunc *move_to,
                                                             GOPathLineToFunc *line_to,
                                                             GOPathCurveToFunc *curve_to,
                                                             GOPathClosePathFunc *close_path,
                                                             void *closure);

## Description

## Details

### enum GOPathDirection

    typedef enum {
    	GO_PATH_DIRECTION_FORWARD,
    	GO_PATH_DIRECTION_BACKWARD
    } GOPathDirection;

### enum GOPathOptions

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

### GOPathPoint

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

### GOPath

    typedef struct {
    	GOPathDataBuffer *data_buffer_head;
    	GOPathDataBuffer *data_buffer_tail;

    	gboolean sharp;
    } GOPath;

### IS_GO_PATH()

    #define IS_GO_PATH(x) ((x) != NULL)

`x` : |

### go_path_new ()

    GOPath*             go_path_new                         (void);

Returns : |

### go_path_clear ()

    void                go_path_clear                       (GOPath *path);

`path` : |

### go_path_free ()

    void                go_path_free                        (GOPath *path);

Frees all memory allocated for `path`.

`path` : | a GOPath

### go_path_set_options ()

    void                go_path_set_options                 (GOPath *path,
                                                             GOPathOptions options);

`path` : |
`options` : |

### go_path_get_options ()

    GOPathOptions       go_path_get_options                 (GOPath const *path);

`path` : |
Returns : |

### go_path_move_to ()

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

`path` : |
`x` : |
`y` : |

### go_path_line_to ()

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

`path` : |
`x` : |
`y` : |

### go_path_curve_to ()

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

`path` : |
`x0` : |
`y0` : |
`x1` : |
`y1` : |
`x2` : |
`y2` : |

### go_path_close ()

    void                go_path_close                       (GOPath *path);

`path` : |

### 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);

`path` : |
`cx` : |
`cy` : |
`rx_out` : |
`ry_out` : |
`rx_in` : |
`ry_in` : |
`th0` : |
`th1` : |

### go_path_pie_wedge ()

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

`path` : |
`cx` : |
`cy` : |
`rx` : |
`ry` : |
`th0` : |
`th1` : |

### go_path_arc ()

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

`path` : |
`cx` : |
`cy` : |
`rx` : |
`ry` : |
`th0` : |
`th1` : |

### go_path_arc_to ()

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

`path` : |
`cx` : |
`cy` : |
`rx` : |
`ry` : |
`th0` : |
`th1` : |

### go_path_rectangle ()

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

`path` : |
`x` : |
`y` : |
`width` : |
`height` : |

### 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);

`path` : |
`direction` : |
`move_to` : |
`line_to` : |
`curve_to` : |
`close_path` : |
`closure` : |