diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2009-08-13 18:37:01 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2009-08-29 08:08:37 +0100 |
commit | 8f8b91d9049433c9210e0b3aad574cf659862ae0 (patch) | |
tree | 4dbe425ac042cc36fb4093e6114dd19ef961527e | |
parent | fee647c98506eedad0fea667a9442786cb0804b7 (diff) | |
download | cairo-8f8b91d9049433c9210e0b3aad574cf659862ae0.tar.gz |
[script] Wrap snapshot.
Use the snapshot of our target surface if available.
-rw-r--r-- | src/cairo-script-surface.c | 20 | ||||
-rw-r--r-- | src/cairo-surface-wrapper-private.h | 3 | ||||
-rw-r--r-- | src/cairo-surface-wrapper.c | 6 |
3 files changed, 25 insertions, 4 deletions
diff --git a/src/cairo-script-surface.c b/src/cairo-script-surface.c index a47324d44..e1ce00d47 100644 --- a/src/cairo-script-surface.c +++ b/src/cairo-script-surface.c @@ -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 */ diff --git a/src/cairo-surface-wrapper-private.h b/src/cairo-surface-wrapper-private.h index 5ebcb8606..3ffd9ab88 100644 --- a/src/cairo-surface-wrapper-private.h +++ b/src/cairo-surface-wrapper-private.h @@ -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); diff --git a/src/cairo-surface-wrapper.c b/src/cairo-surface-wrapper.c index b21a32dab..12d67836d 100644 --- a/src/cairo-surface-wrapper.c +++ b/src/cairo-surface-wrapper.c @@ -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) { |