static cairo_int_status_t _cairo_xcb_surface_fill (void *abstract_surface, cairo_operator_t op, const cairo_pattern_t *source, const cairo_path_fixed_t*path, cairo_fill_rule_t fill_rule, double tolerance, cairo_antialias_t antialias, const cairo_clip_t *clip) { cairo_xcb_surface_t *surface = abstract_surface; cairo_composite_rectangles_t composite; cairo_int_status_t status; status = _cairo_composite_rectangles_init_for_fill (&composite, &surface->base, op, source, path, clip); if (unlikely (status)) return status; if (surface->fallback == NULL) { status = _cairo_xcb_surface_cairo_fill (surface, op, source, path, fill_rule, tolerance, antialias, clip); if (status != CAIRO_INT_STATUS_UNSUPPORTED) goto done; status = _cairo_xcb_surface_render_fill (surface, op, source, path, fill_rule, tolerance, antialias, &composite); if (status != CAIRO_INT_STATUS_UNSUPPORTED) goto done; } status = _cairo_surface_fill (_cairo_xcb_surface_fallback (surface, &composite), op, source, path, fill_rule, tolerance, antialias, clip); done: _cairo_composite_rectangles_fini (&composite); return status; }
static cairo_int_status_t _cairo_xcb_surface_fill (void *abstract_surface, cairo_operator_t op, const cairo_pattern_t *source, cairo_path_fixed_t *path, cairo_fill_rule_t fill_rule, double tolerance, cairo_antialias_t antialias, cairo_clip_t *clip) { cairo_xcb_surface_t *surface = abstract_surface; cairo_status_t status; if (surface->drm != NULL && ! surface->marked_dirty) { return _cairo_surface_fill (surface->drm, op, source, path, fill_rule, tolerance, antialias, clip); } if (surface->fallback == NULL) { status = _cairo_xcb_surface_cairo_fill (surface, op, source, path, fill_rule, tolerance, antialias, clip); if (status != CAIRO_INT_STATUS_UNSUPPORTED) return status; status = _cairo_xcb_surface_render_fill (surface, op, source, path, fill_rule, tolerance, antialias, clip); if (status != CAIRO_INT_STATUS_UNSUPPORTED) return status; surface->fallback = _cairo_xcb_surface_map_to_image (surface); } return _cairo_surface_fill (surface->fallback, op, source, path, fill_rule, tolerance, antialias, clip); }