[byzanz] Use the region when copying relevant parts, not just the extents



commit 796c13604f9126a7a8e218cf80a40ca661feeae8
Author: Benjamin Otte <otte gnome org>
Date:   Wed Aug 26 16:27:15 2009 +0200

    Use the region when copying relevant parts, not just the extents

 src/byzanzrecorder.c |   13 ++++++++-----
 1 files changed, 8 insertions(+), 5 deletions(-)
---
diff --git a/src/byzanzrecorder.c b/src/byzanzrecorder.c
index 5db96fd..a98d61b 100644
--- a/src/byzanzrecorder.c
+++ b/src/byzanzrecorder.c
@@ -72,21 +72,24 @@ byzanz_recorder_get_invalid_region (ByzanzRecorder *recorder)
 }
 
 static cairo_surface_t *
-ensure_image_surface (cairo_surface_t * surface, GdkRectangle *extents)
+ensure_image_surface (cairo_surface_t *surface, const GdkRegion *region)
 {
+  GdkRectangle extents;
   cairo_surface_t *image;
   cairo_t *cr;
 
   if (cairo_surface_get_type (surface) == CAIRO_SURFACE_TYPE_IMAGE)
     return surface;
 
-  image = cairo_image_surface_create (CAIRO_FORMAT_RGB24, extents->width, extents->height);
-  cairo_surface_set_device_offset (image, -extents->x, -extents->y);
+  gdk_region_get_clipbox (region, &extents);
+  image = cairo_image_surface_create (CAIRO_FORMAT_RGB24, extents.width, extents.height);
+  cairo_surface_set_device_offset (image, -extents.x, -extents.y);
 
   cr = cairo_create (image);
   cairo_set_source_surface (cr, surface, 0, 0);
   cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
-  cairo_paint (cr);
+  gdk_cairo_region (cr, region);
+  cairo_fill (cr);
   cairo_destroy (cr);
 
   cairo_surface_destroy (surface);
@@ -127,7 +130,7 @@ byzanz_recorder_create_snapshot (ByzanzRecorder *recorder, const GdkRegion *inva
     g_print ("error capturing image: %s\n", cairo_status_to_string (cairo_status (cr)));
   cairo_destroy (cr);
 
-  surface = ensure_image_surface (surface, &extents);
+  surface = ensure_image_surface (surface, invalid);
 
   /* adjust device offset here - the layers work in GdkScreen coordinates, the rest
    * of the code works in coordinates realtive to the passed in area. */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]