[gtk+/broadway: 7/71] [broadway] Implement window translation



commit 2ecaeb149fda261aabeddbf8f62b3c66455a751e
Author: Alexander Larsson <alexl redhat com>
Date:   Mon Nov 15 22:11:39 2010 +0100

    [broadway] Implement window translation

 gdk/broadway/gdkwindow-broadway.c |   33 ++++++++++++++++++++++++++++++++-
 1 files changed, 32 insertions(+), 1 deletions(-)
---
diff --git a/gdk/broadway/gdkwindow-broadway.c b/gdk/broadway/gdkwindow-broadway.c
index 2bbd600..3404167 100644
--- a/gdk/broadway/gdkwindow-broadway.c
+++ b/gdk/broadway/gdkwindow-broadway.c
@@ -1026,7 +1026,38 @@ _gdk_x11_window_translate (GdkWindow      *window,
                            gint            dx,
                            gint            dy)
 {
-  /* TODO: copy region */
+  GdkWindowObject *private;
+  GdkWindowImplX11 *impl;
+  cairo_surface_t *surface;
+
+  private = (GdkWindowObject *)window;
+  impl = GDK_WINDOW_IMPL_X11 (private->impl);
+
+  surface = GDK_DRAWABLE_IMPL_X11 (impl)->surface;
+  if (surface)
+    {
+      cairo_t *cr;
+
+      cr = cairo_create (surface);
+
+      area = cairo_region_copy (area);
+
+      gdk_cairo_region (cr, area);
+      cairo_clip (cr);
+
+      /* NB: This is a self-copy and Cairo doesn't support that yet.
+       * So we do a litle trick.
+       */
+      cairo_push_group (cr);
+
+      cairo_set_source_surface (cr, surface, dx, dy);
+      cairo_paint (cr);
+
+      cairo_pop_group_to_source (cr);
+      cairo_paint (cr);
+
+      cairo_destroy (cr);
+    }
 }
 
 static void



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