[cairo-commit] src/cairo-surface.c

Benjamin Otte company at kemper.freedesktop.org
Fri Apr 30 11:19:28 PDT 2010


 src/cairo-surface.c |    9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

New commits:
commit 3294daf423e88b55aa13841dfa7c557ee9833f92
Author: Benjamin Otte <otte at redhat.com>
Date:   Fri Apr 30 20:14:54 2010 +0200

    Create cleared surface instead of a scratch surface in clone_similar()
    
    A cleared surface is needed when playing back a recording surface that
    has semi-transparent operations.
    As this only affects surface types where scratch surfaces aren't already
    cleared (ie it affected xlib but not image), the effect was only visible
    for those backends.
    This should not cause any performance regressions as the other backends
    set surface->clear = TRUE when creating the scratch surface, so the
    clear operation is effectively a no-op.
    
    Covered by the existing pdf-surface-source and svg-surface-source tests.

diff --git a/src/cairo-surface.c b/src/cairo-surface.c
index a59c1ec..e676b92 100644
--- a/src/cairo-surface.c
+++ b/src/cairo-surface.c
@@ -1465,10 +1465,11 @@ _cairo_recording_surface_clone_similar (cairo_surface_t  *surface,
     if (recorder->unbounded ||
 	width*height*8 < recorder->extents.width*recorder->extents.height)
     {
-	/* XXX use _solid to perform an initial CLEAR? */
-	similar = _cairo_surface_create_similar_scratch (surface,
-							 src->content,
-							 width, height);
+	similar = _cairo_surface_create_similar_solid (surface,
+						       src->content,
+						       width, height,
+                                                       CAIRO_COLOR_TRANSPARENT,
+                                                       FALSE);
 	if (similar == NULL)
 	    return CAIRO_INT_STATUS_UNSUPPORTED;
 	if (unlikely (similar->status))


More information about the cairo-commit mailing list