Call _gdk_window_process_updates_recurse() in drawRect instead of creating our own expose events

This commit is contained in:
Richard Hult 2009-01-26 20:29:51 +01:00 committed by Alexander Larsson
parent 1a47356485
commit 65b5644cda

View File

@ -69,6 +69,21 @@
[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++)
@ -80,32 +95,12 @@
gdk_region_union_with_rect (region, &gdk_rect);
}
if (!gdk_region_empty (region))
{
GdkEvent event;
gdk_rect.x = rect.origin.x;
gdk_rect.y = rect.origin.y;
gdk_rect.width = rect.size.width;
gdk_rect.height = rect.size.height;
event.expose.type = GDK_EXPOSE;
event.expose.window = g_object_ref (gdk_window);
event.expose.send_event = FALSE;
event.expose.count = 0;
event.expose.region = region;
event.expose.area = gdk_rect;
}
impl->in_paint_rect_count++;
(*_gdk_event_func) (&event, _gdk_event_data);
_gdk_window_process_updates_recurse (gdk_window, region);
impl->in_paint_rect_count--;
g_object_unref (gdk_window);
}
gdk_region_destroy (region);
if (needsInvalidateShadow)