static cairo_status_t _cairo_filler_close (void *closure) { cairo_filler_t *filler = closure; /* close the subpath */ return _cairo_filler_line_to (closure, &filler->last_move_to, NULL); }
static cairo_status_t _cairo_filler_curve_to (void *closure, const cairo_point_t *p1, const cairo_point_t *p2, const cairo_point_t *p3) { cairo_filler_t *filler = closure; cairo_spline_t spline; if (filler->has_limits) { if (! _cairo_spline_intersects (&filler->current_point, p1, p2, p3, &filler->limit)) return _cairo_filler_line_to (filler, p3, NULL); } if (! _cairo_spline_init (&spline, (cairo_spline_add_point_func_t)_cairo_filler_line_to, filler, &filler->current_point, p1, p2, p3)) { return _cairo_filler_line_to (closure, p3, NULL); } return _cairo_spline_decompose (&spline, filler->tolerance); }
static cairo_status_t _cairo_filler_curve_to (void *closure, const cairo_point_t *b, const cairo_point_t *c, const cairo_point_t *d) { cairo_filler_t *filler = closure; cairo_spline_t spline; if (! _cairo_spline_init (&spline, _cairo_filler_line_to, filler, &filler->polygon->current_point, b, c, d)) { return _cairo_filler_line_to (closure, d); } return _cairo_spline_decompose (&spline, filler->tolerance); }
static cairo_status_t _cairo_filler_line_to_wrap (void *closure, const cairo_point_t *point) { return _cairo_filler_line_to (closure, point, NULL); }