[Commit] cairo/src cairo.h,1.5,1.6 cairo_surface.c,1.3,1.4

Carl Worth commit at keithp.com
Fri Aug 29 18:57:11 PDT 2003


Committed by: cworth

Update of /local/src/CVS/cairo/src
In directory home.keithp.com:/tmp/cvs-serv8938/src

Modified Files:
	cairo.h cairo_surface.c 
Log Message:
Optimized _cairo_surface_composite for compositing local memory surface with an X11 server surface.

Index: cairo.h
===================================================================
RCS file: /local/src/CVS/cairo/src/cairo.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- cairo.h	26 Aug 2003 14:40:17 -0000	1.5
+++ cairo.h	30 Aug 2003 00:57:08 -0000	1.6
@@ -403,11 +403,11 @@
    cairo_surface_create_for_pixmap with a cairo_format_t. Would that work?
 */
 extern cairo_surface_t * __external_linkage
-cairo_surface_create_for_drawable (Display	*dpy,
-				   Drawable	drawable,
-				   Visual	*visual,
+cairo_surface_create_for_drawable (Display		*dpy,
+				   Drawable		drawable,
+				   Visual		*visual,
 				   cairo_format_t	format,
-				   Colormap	colormap);
+				   Colormap		colormap);
 
 extern cairo_surface_t * __external_linkage
 cairo_surface_create_for_image (char		*data,
@@ -418,7 +418,7 @@
 
 extern cairo_surface_t * __external_linkage
 cairo_surface_create_similar (cairo_surface_t	*other,
-			      cairo_format_t		format,
+			      cairo_format_t	format,
 			      int		width,
 			      int		height);
 
@@ -441,10 +441,10 @@
 
 extern cairo_status_t __external_linkage
 cairo_surface_put_image (cairo_surface_t	*surface,
-			 char		*data,
-			 int		width,
-			 int		height,
-			 int		stride);
+			 char			*data,
+			 int			width,
+			 int			height,
+			 int			stride);
 
 /* XXX: NYI
 extern cairo_status_t __external_linkage

Index: cairo_surface.c
===================================================================
RCS file: /local/src/CVS/cairo/src/cairo_surface.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- cairo_surface.c	1 Aug 2003 05:41:44 -0000	1.3
+++ cairo_surface.c	30 Aug 2003 00:57:08 -0000	1.4
@@ -588,17 +588,39 @@
 {
     if (dst->type == CAIRO_SURFACE_TYPE_DRAWABLE
 	&& CAIRO_SURFACE_RENDER_HAS_COMPOSITE (dst)
-	&& src->dpy == dst->dpy
-	&& (mask == NULL || mask->dpy == dst->dpy)) {
+	&& (mask == NULL || mask->dpy == dst->dpy)
+	&& (src->type == CAIRO_SURFACE_TYPE_ICIMAGE || src->dpy == dst->dpy)) {
+
+	cairo_surface_t *src_on_server = NULL;
+
+	if (src->type == CAIRO_SURFACE_TYPE_ICIMAGE) {
+	    cairo_matrix_t matrix;
+	    src_on_server = cairo_surface_create_similar (dst, CAIRO_FORMAT_ARGB32,
+							  IcImageGetWidth (src->icimage),
+							  IcImageGetWidth (src->icimage));
+	    if (src_on_server == NULL)
+		return;
+
+	    cairo_surface_get_matrix (src, &matrix);
+	    cairo_surface_set_matrix (src_on_server, &matrix);
+
+	    cairo_surface_put_image (src_on_server,
+				     (char *) IcImageGetData (src->icimage),
+				     IcImageGetWidth (src->icimage),
+				     IcImageGetHeight (src->icimage),
+				     IcImageGetStride (src->icimage));
+	}
 
 	XRenderComposite (dst->dpy, operator,
-			  src->picture,
+			  src_on_server ? src_on_server->picture : src->picture,
 			  mask ? mask->picture : 0,
 			  dst->picture,
 			  src_x, src_y,
 			  mask_x, mask_y,
 			  dst_x, dst_y,
 			  width, height);
+	
+	
     } else {
 	_cairo_surface_pull_image (src);
 	_cairo_surface_pull_image (mask);




More information about the Commit mailing list