[mutter/wip/cb2eb3: 36/55] frames: Only make one call to meta_frames_paint



commit dd0a6d7e0803743a545d1fc2d98dab55791c492e
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Sun Apr 29 21:45:55 2012 -0400

    frames: Only make one call to meta_frames_paint

 src/ui/frames.c |   35 ++++++++++++++---------------------
 1 files changed, 14 insertions(+), 21 deletions(-)
---
diff --git a/src/ui/frames.c b/src/ui/frames.c
index 4e43b46..b4d52cf 100644
--- a/src/ui/frames.c
+++ b/src/ui/frames.c
@@ -1852,7 +1852,6 @@ meta_frames_draw (GtkWidget *widget,
   CachedPixels *pixels;
   cairo_region_t *region;
   cairo_rectangle_int_t clip;
-  int i, n_areas;
   cairo_surface_t *target;
 
   frames = META_FRAMES (widget);
@@ -1877,34 +1876,28 @@ meta_frames_draw (GtkWidget *widget,
   
   pixels = get_cache (frames, frame);
 
+  /* cached_pixels_draw will subtract the painted
+   * parts from the region. */
   cached_pixels_draw (pixels, cr, region);
-  
-  clip_to_screen (region, frame);
-  subtract_client_area (region, frame);
-
-  n_areas = cairo_region_num_rectangles (region);
-
-  for (i = 0; i < n_areas; i++)
-    {
-      cairo_rectangle_int_t area;
 
-      cairo_region_get_rectangle (region, i, &area);
+  if (cairo_region_num_rectangles (region) == 0)
+    goto out;
 
-      cairo_save (cr);
-
-      cairo_rectangle (cr, area.x, area.y, area.width, area.height);
-      cairo_clip (cr);
+  clip_to_screen (region, frame);
+  subtract_client_area (region, frame);
 
-      cairo_push_group (cr);
+  if (cairo_region_num_rectangles (region) == 0)
+    goto out;
 
-      meta_frames_paint (frames, frame, cr);
+  /* OK. Now that we've painted the cached frame
+   * pixels, paint the actual pixels that are left over. */
 
-      cairo_pop_group_to_source (cr);
-      cairo_paint (cr);
+  gdk_cairo_region (cr, region);
+  cairo_clip (cr);
 
-      cairo_restore (cr);
-    }
+  meta_frames_paint (frames, frame, cr);
 
+ out:
   cairo_region_destroy (region);
   
   return TRUE;


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