[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