[gtk+/broadway: 12/71] [broadway] Copy regions on last_surface during translations too



commit f02b7c9ed209aa680f5735cc814790ec5437fd45
Author: Alexander Larsson <alexl redhat com>
Date:   Tue Nov 16 13:16:38 2010 +0100

    [broadway] Copy regions on last_surface during translations too
    
    This will help make scrolling more efficient

 gdk/broadway/gdkwindow-broadway.c |   66 ++++++++++++++++++++++---------------
 1 files changed, 39 insertions(+), 27 deletions(-)
---
diff --git a/gdk/broadway/gdkwindow-broadway.c b/gdk/broadway/gdkwindow-broadway.c
index f809570..909ad5b 100644
--- a/gdk/broadway/gdkwindow-broadway.c
+++ b/gdk/broadway/gdkwindow-broadway.c
@@ -1120,43 +1120,55 @@ _gdk_broadway_window_queue_antiexpose (GdkWindow *window,
   return TRUE;
 }
 
-void
-_gdk_broadway_window_translate (GdkWindow      *window,
-                           cairo_region_t *area,
-                           gint            dx,
-                           gint            dy)
+static void
+copy_region (cairo_surface_t *surface,
+	     cairo_region_t *area,
+	     gint            dx,
+	     gint            dy)
 {
-  GdkWindowObject *private;
-  GdkWindowImplBroadway *impl;
-  cairo_surface_t *surface;
+  cairo_t *cr;
 
-  private = (GdkWindowObject *)window;
-  impl = GDK_WINDOW_IMPL_BROADWAY (private->impl);
+  cr = cairo_create (surface);
 
-  surface = GDK_DRAWABLE_IMPL_BROADWAY (impl)->surface;
-  if (surface)
-    {
-      cairo_t *cr;
+  area = cairo_region_copy (area);
 
-      cr = cairo_create (surface);
+  gdk_cairo_region (cr, area);
+  cairo_clip (cr);
 
-      area = cairo_region_copy (area);
+  /* NB: This is a self-copy and Cairo doesn't support that yet.
+   * So we do a litle trick.
+   */
+  cairo_push_group (cr);
 
-      gdk_cairo_region (cr, area);
-      cairo_clip (cr);
+  cairo_set_source_surface (cr, surface, dx, dy);
+  cairo_paint (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_pop_group_to_source (cr);
+  cairo_paint (cr);
 
-      cairo_set_source_surface (cr, surface, dx, dy);
-      cairo_paint (cr);
+  cairo_destroy (cr);
+}
 
-      cairo_pop_group_to_source (cr);
-      cairo_paint (cr);
+void
+_gdk_broadway_window_translate (GdkWindow      *window,
+				cairo_region_t *area,
+				gint            dx,
+				gint            dy)
+{
+  GdkWindowObject *private;
+  GdkDrawableImplBroadway *impl;
 
-      cairo_destroy (cr);
+  private = (GdkWindowObject *)window;
+  impl = GDK_DRAWABLE_IMPL_BROADWAY (private->impl);
+
+  if (impl->surface)
+    {
+      copy_region (impl->surface, area, dx, dy);
+      if (GDK_WINDOW_IMPL_BROADWAY (impl)->last_synced)
+	{
+	  copy_region (impl->last_surface, area, dx, dy);
+	  /* TODO: Send copy-rects */
+	}
     }
 }
 



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