[mutter/wip/cb2eb3: 36/55] frames: Only make one call to meta_frames_paint
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/wip/cb2eb3: 36/55] frames: Only make one call to meta_frames_paint
- Date: Wed, 1 Oct 2014 15:50:27 +0000 (UTC)
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]