summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2009-08-13 18:37:01 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2009-08-29 08:08:37 +0100
commit8f8b91d9049433c9210e0b3aad574cf659862ae0 (patch)
tree4dbe425ac042cc36fb4093e6114dd19ef961527e
parentfee647c98506eedad0fea667a9442786cb0804b7 (diff)
downloadcairo-8f8b91d9049433c9210e0b3aad574cf659862ae0.tar.gz
[script] Wrap snapshot.
Use the snapshot of our target surface if available.
-rw-r--r--src/cairo-script-surface.c20
-rw-r--r--src/cairo-surface-wrapper-private.h3
-rw-r--r--src/cairo-surface-wrapper.c6
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)
{