From aea9f1b6cf71b151c50e459ae48d64e5a8226387 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 12 May 2010 12:11:40 +0200 Subject: Remove arbitrary limit on number of redraw rectangles The aim of this limit was to not degrade performance too much, however, it actually did degrade performance to a large extent. --- gdk/quartz/GdkQuartzView.c | 38 +++++++++++--------------------------- 1 file changed, 11 insertions(+), 27 deletions(-) (limited to 'gdk/quartz/GdkQuartzView.c') diff --git a/gdk/quartz/GdkQuartzView.c b/gdk/quartz/GdkQuartzView.c index a3a8d2aadb..02018ff8d0 100644 --- a/gdk/quartz/GdkQuartzView.c +++ b/gdk/quartz/GdkQuartzView.c @@ -18,8 +18,9 @@ * Boston, MA 02111-1307, USA. */ - #import "GdkQuartzView.h" +#include "gdkregion.h" +#include "gdkregion-generic.h" #include "gdkwindow-quartz.h" #include "gdkprivate-quartz.h" @@ -92,33 +93,16 @@ } [self getRectsBeingDrawn:&drawn_rects count:&count]; - - /* Note: arbitrary limit here to not degrade performace too much. It would - * be better to optimize the construction of the region below, by using - * _gdk_region_new_from_yxbanded_rects. - */ - if (count > 25) - { - gdk_rect.x = rect.origin.x; - gdk_rect.y = rect.origin.y; - gdk_rect.width = rect.size.width; - gdk_rect.height = rect.size.height; - - region = gdk_region_rectangle (&gdk_rect); - } - else + region = gdk_region_new (); + + for (i = 0; i < count; i++) { - region = gdk_region_new (); - - for (i = 0; i < count; i++) - { - gdk_rect.x = drawn_rects[i].origin.x; - gdk_rect.y = drawn_rects[i].origin.y; - gdk_rect.width = drawn_rects[i].size.width; - gdk_rect.height = drawn_rects[i].size.height; - - gdk_region_union_with_rect (region, &gdk_rect); - } + gdk_rect.x = drawn_rects[i].origin.x; + gdk_rect.y = drawn_rects[i].origin.y; + gdk_rect.width = drawn_rects[i].size.width; + gdk_rect.height = drawn_rects[i].size.height; + + gdk_region_union_with_rect (region, &gdk_rect); } impl->in_paint_rect_count++; -- cgit v1.2.1