[cairo-commit] src/cairo-win32-printing-surface.c
Adrian Johnson
ajohnson at kemper.freedesktop.org
Fri Feb 15 05:25:31 PST 2008
src/cairo-win32-printing-surface.c | 28 ++++++++++++++++------------
1 file changed, 16 insertions(+), 12 deletions(-)
New commits:
commit 896da0305a09e53518d6d1af6f58bbfaf3ddc89c
Author: Adrian Johnson <ajohnson at redneon.com>
Date: Fri Feb 15 23:54:55 2008 +1030
Win32-printing: Fix meta surface patterns
Ensure the win32-printing surface has the same fixes for meta surface
patterns with more than one level of push/pop group that PS/PDF
received in 060f384310e887f7f431a98e847b8a36fc303a0c
diff --git a/src/cairo-win32-printing-surface.c b/src/cairo-win32-printing-surface.c
index f7b9681..70f6220 100644
--- a/src/cairo-win32-printing-surface.c
+++ b/src/cairo-win32-printing-surface.c
@@ -201,16 +201,22 @@ _cairo_win32_printing_surface_analyze_operation (cairo_win32_surface_t *surface,
if (! pattern_supported (surface, pattern))
return CAIRO_INT_STATUS_UNSUPPORTED;
+ if (!(op == CAIRO_OPERATOR_SOURCE ||
+ op == CAIRO_OPERATOR_OVER ||
+ op == CAIRO_OPERATOR_CLEAR))
+ return CAIRO_INT_STATUS_UNSUPPORTED;
+
+ if (pattern->type == CAIRO_PATTERN_TYPE_SURFACE) {
+ cairo_surface_pattern_t *surface_pattern = (cairo_surface_pattern_t *) pattern;
+
+ if ( _cairo_surface_is_meta (surface_pattern->surface))
+ return CAIRO_INT_STATUS_ANALYZE_META_SURFACE_PATTERN;
+ }
+
if (op == CAIRO_OPERATOR_SOURCE ||
op == CAIRO_OPERATOR_CLEAR)
return CAIRO_STATUS_SUCCESS;
- /* If the operation is anything other than CLEAR, SOURCE, or
- * OVER, we have to go to fallback.
- */
- if (op != CAIRO_OPERATOR_OVER)
- return CAIRO_INT_STATUS_UNSUPPORTED;
-
/* CAIRO_OPERATOR_OVER is only supported for opaque patterns. If
* the pattern contains transparency, we return
* CAIRO_INT_STATUS_FLATTEN_TRANSPARENCY to the analysis
@@ -224,10 +230,7 @@ _cairo_win32_printing_surface_analyze_operation (cairo_win32_surface_t *surface,
if (pattern->type == CAIRO_PATTERN_TYPE_SURFACE) {
cairo_surface_pattern_t *surface_pattern = (cairo_surface_pattern_t *) pattern;
- if ( _cairo_surface_is_meta (surface_pattern->surface))
- return CAIRO_INT_STATUS_ANALYZE_META_SURFACE_PATTERN;
- else
- return analyze_surface_pattern_transparency (surface_pattern);
+ return analyze_surface_pattern_transparency (surface_pattern);
}
if (_cairo_pattern_is_opaque (pattern))
@@ -461,8 +464,9 @@ _cairo_win32_printing_surface_paint_meta_pattern (cairo_win32_surface_t *surfa
SelectClipPath (surface->dc, RGN_AND);
SaveDC (surface->dc); /* Allow clip path to be reset during replay */
- status = _cairo_meta_surface_replay (meta_surface, &surface->base);
-
+ status = _cairo_meta_surface_replay_region (meta_surface, &surface->base,
+ CAIRO_META_REGION_NATIVE);
+ assert (status != CAIRO_INT_STATUS_UNSUPPORTED);
/* Restore both the clip save and our earlier path SaveDC */
RestoreDC (surface->dc, -2);
More information about the cairo-commit
mailing list