static cairo_int_status_t _cairo_xcb_surface_stroke (void *abstract_surface, cairo_operator_t op, const cairo_pattern_t *source, const cairo_path_fixed_t *path, const cairo_stroke_style_t *style, const cairo_matrix_t *ctm, const cairo_matrix_t *ctm_inverse, 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_stroke (&composite, &surface->base, op, source, path, style, ctm, clip); if (unlikely (status)) return status; if (surface->fallback == NULL) { status = _cairo_xcb_surface_cairo_stroke (surface, op, source, path, style, ctm, ctm_inverse, tolerance, antialias, clip); if (status != CAIRO_INT_STATUS_UNSUPPORTED) goto done; status = _cairo_xcb_surface_render_stroke (surface, op, source, path, style, ctm, ctm_inverse, tolerance, antialias, &composite); if (status != CAIRO_INT_STATUS_UNSUPPORTED) goto done; } status = _cairo_surface_stroke (_cairo_xcb_surface_fallback (surface, &composite), op, source, path, style, ctm, ctm_inverse, tolerance, antialias, clip); done: _cairo_composite_rectangles_fini (&composite); return status; }
static cairo_int_status_t _cairo_xcb_fallback_compositor_paint (const cairo_compositor_t *compositor, cairo_composite_rectangles_t *extents) { cairo_xcb_surface_t *surface = (cairo_xcb_surface_t *) extents->surface; cairo_surface_t *fallback = _cairo_xcb_surface_fallback (surface, extents); return _cairo_surface_paint (fallback, extents->op, &extents->source_pattern.base, extents->clip); }
static cairo_int_status_t _cairo_xcb_surface_glyphs (void *abstract_surface, cairo_operator_t op, const cairo_pattern_t *source, cairo_glyph_t *glyphs, int num_glyphs, cairo_scaled_font_t *scaled_font, const cairo_clip_t *clip) { cairo_xcb_surface_t *surface = abstract_surface; cairo_composite_rectangles_t composite; cairo_int_status_t status; cairo_bool_t overlap; status = _cairo_composite_rectangles_init_for_glyphs (&composite, &surface->base, op, source, scaled_font, glyphs, num_glyphs, clip, &overlap); if (unlikely (status)) return status; if (surface->fallback == NULL) { status = _cairo_xcb_surface_cairo_glyphs (surface, op, source, scaled_font, glyphs, num_glyphs, clip); if (status != CAIRO_INT_STATUS_UNSUPPORTED) goto done; status = _cairo_xcb_surface_render_glyphs (surface, op, source, scaled_font, glyphs, num_glyphs, &composite, overlap); if (status != CAIRO_INT_STATUS_UNSUPPORTED) goto done; } status = _cairo_surface_show_text_glyphs (_cairo_xcb_surface_fallback (surface, &composite), op, source, NULL, 0, glyphs, num_glyphs, NULL, 0, 0, scaled_font, clip); done: _cairo_composite_rectangles_fini (&composite); return status; }
static cairo_int_status_t _cairo_xcb_fallback_compositor_fill (const cairo_compositor_t *compositor, cairo_composite_rectangles_t *extents, const cairo_path_fixed_t *path, cairo_fill_rule_t fill_rule, double tolerance, cairo_antialias_t antialias) { cairo_xcb_surface_t *surface = (cairo_xcb_surface_t *) extents->surface; cairo_surface_t *fallback = _cairo_xcb_surface_fallback (surface, extents); return _cairo_surface_fill (fallback, extents->op, &extents->source_pattern.base, path, fill_rule, tolerance, antialias, extents->clip); }
static cairo_int_status_t _cairo_xcb_fallback_compositor_glyphs (const cairo_compositor_t *compositor, cairo_composite_rectangles_t *extents, cairo_scaled_font_t *scaled_font, cairo_glyph_t *glyphs, int num_glyphs, cairo_bool_t overlap) { cairo_xcb_surface_t *surface = (cairo_xcb_surface_t *) extents->surface; cairo_surface_t *fallback = _cairo_xcb_surface_fallback (surface, extents); return _cairo_surface_show_text_glyphs (fallback, extents->op, &extents->source_pattern.base, NULL, 0, glyphs, num_glyphs, NULL, 0, 0, scaled_font, extents->clip); }
static cairo_int_status_t _cairo_xcb_surface_mask (void *abstract_surface, cairo_operator_t op, const cairo_pattern_t *source, const cairo_pattern_t *mask, 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_mask (&composite, &surface->base, op, source, mask, clip); if (unlikely (status)) return status; if (surface->fallback == NULL) { status = _cairo_xcb_surface_cairo_mask (surface, op, source, mask, clip); if (status != CAIRO_INT_STATUS_UNSUPPORTED) goto done; status = _cairo_xcb_surface_render_mask (surface, op, source, mask, &composite); if (status != CAIRO_INT_STATUS_UNSUPPORTED) goto done; } status = _cairo_surface_mask (_cairo_xcb_surface_fallback (surface, &composite), op, source, mask, clip); done: _cairo_composite_rectangles_fini (&composite); return status; }