Exemple #1
0
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;
}
Exemple #2
0
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);
}
Exemple #3
0
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;
}
Exemple #4
0
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);
}
Exemple #5
0
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);
}
Exemple #6
0
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;
}