[byzanz] Use the region when copying relevant parts, not just the extents
- From: Benjamin Otte <otte src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [byzanz] Use the region when copying relevant parts, not just the extents
- Date: Wed, 26 Aug 2009 14:27:46 +0000 (UTC)
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]