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