[script] Wrap snapshot.

Use the snapshot of our target surface if available.
This commit is contained in:
Chris Wilson 2009-08-13 18:37:01 +01:00
parent fee647c985
commit 8f8b91d904
3 changed files with 25 additions and 4 deletions

View file

@ -761,9 +761,10 @@ _emit_solid_pattern (cairo_script_surface_t *surface,
! CAIRO_COLOR_IS_OPAQUE (&solid->color))
{
if (! (solid->content & CAIRO_CONTENT_COLOR) ||
(solid->color.red_short == 0 &&
solid->color.green_short == 0 &&
solid->color.blue_short == 0))
! (surface->base.content & CAIRO_CONTENT_COLOR) ||
((solid->color.red_short == 0 || solid->color.red_short == 0xffff) &&
(solid->color.green_short == 0 || solid->color.green_short == 0xffff) &&
(solid->color.blue_short == 0 || solid->color.blue_short == 0xffff) ))
{
_cairo_output_stream_printf (surface->ctx->stream,
"%f a",
@ -2206,6 +2207,17 @@ _cairo_script_surface_fill (void *abstract_surface,
return CAIRO_STATUS_SUCCESS;
}
static cairo_surface_t *
_cairo_script_surface_snapshot (void *abstract_surface)
{
cairo_script_surface_t *surface = abstract_surface;
if (_cairo_surface_wrapper_is_active (&surface->wrapper))
return _cairo_surface_wrapper_snapshot (&surface->wrapper);
return NULL;
}
static cairo_bool_t
_cairo_script_surface_has_show_text_glyphs (void *abstract_surface)
{
@ -3058,7 +3070,7 @@ _cairo_script_surface_backend = {
_cairo_script_surface_fill,
NULL,
NULL, /* _cairo_script_surface_snapshot, */
_cairo_script_surface_snapshot,
NULL, /* is_similar */
/* XXX need fill-stroke for passthrough */

View file

@ -142,6 +142,9 @@ cairo_private cairo_bool_t
_cairo_surface_wrapper_get_extents (cairo_surface_wrapper_t *wrapper,
cairo_rectangle_int_t *extents);
cairo_private cairo_surface_t *
_cairo_surface_wrapper_snapshot (cairo_surface_wrapper_t *wrapper);
cairo_private cairo_bool_t
_cairo_surface_wrapper_has_show_text_glyphs (cairo_surface_wrapper_t *wrapper);

View file

@ -429,6 +429,12 @@ _cairo_surface_wrapper_get_extents (cairo_surface_wrapper_t *wrapper,
return _cairo_surface_get_extents (wrapper->target, extents);
}
cairo_surface_t *
_cairo_surface_wrapper_snapshot (cairo_surface_wrapper_t *wrapper)
{
return _cairo_surface_snapshot (wrapper->target);
}
cairo_bool_t
_cairo_surface_wrapper_has_show_text_glyphs (cairo_surface_wrapper_t *wrapper)
{