Refactor the process updates functions to share code between them. Also

2007-04-18  Richard Hult  <richard@imendio.com>

	* gdk/quartz/gdkwindow-quartz.c:
	(gdk_window_quartz_process_updates_internal),
	(gdk_window_quartz_process_all_updates),
	(gdk_window_impl_quartz_process_updates): Refactor the process 
	updates functions to share code between them. Also fixes bug 
	#427660 by not updating larger regions than necessary.

svn path=/trunk/; revision=17610
This commit is contained in:
Richard Hult 2007-04-18 20:09:55 +00:00 committed by Richard Hult
parent d558d49c14
commit c8d89a96a2
2 changed files with 41 additions and 28 deletions

View File

@ -1,3 +1,12 @@
2007-04-18 Richard Hult <richard@imendio.com>
* gdk/quartz/gdkwindow-quartz.c:
(gdk_window_quartz_process_updates_internal),
(gdk_window_quartz_process_all_updates),
(gdk_window_impl_quartz_process_updates): Refactor the process
updates functions to share code between them. Also fixes bug
#427660 by not updating larger regions than necessary.
2007-04-18 Matthias Clasen <mclasen@redhat.com>
* gdk/gdkregion-generic.h (GROWREGION): Handle the case

View File

@ -252,6 +252,34 @@ gdk_window_impl_quartz_end_paint (GdkPaintable *paintable)
}
}
static void
gdk_window_quartz_process_updates_internal (GdkWindow *window)
{
GdkWindowObject *private = (GdkWindowObject *) window;
GdkWindowImplQuartz *impl = (GdkWindowImplQuartz *) private->impl;
if (private->update_area)
{
int i, n_rects;
GdkRectangle *rects;
gdk_region_get_rectangles (private->update_area, &rects, &n_rects);
gdk_region_destroy (private->update_area);
private->update_area = NULL;
for (i = 0; i < n_rects; i++)
{
[impl->view setNeedsDisplayInRect:NSMakeRect (rects[i].x, rects[i].y,
rects[i].width, rects[i].height)];
}
[impl->view displayIfNeeded];
g_free (rects);
}
}
static void
gdk_window_quartz_process_all_updates (void)
{
@ -267,28 +295,7 @@ gdk_window_quartz_process_all_updates (void)
while (tmp_list)
{
GdkWindowObject *private = tmp_list->data;
GdkWindowImplQuartz *impl = (GdkWindowImplQuartz *) private->impl;
int i, n_rects;
GdkRectangle *rects;
if (private->update_area)
{
gdk_region_get_rectangles (private->update_area, &rects, &n_rects);
gdk_region_destroy (private->update_area);
private->update_area = NULL;
for (i = 0; i < n_rects; i++)
{
[impl->view setNeedsDisplayInRect:NSMakeRect (rects[i].x, rects[i].y,
rects[i].width, rects[i].height)];
}
[impl->view displayIfNeeded];
g_free (rects);
}
gdk_window_quartz_process_updates_internal (tmp_list->data);
g_object_unref (tmp_list->data);
tmp_list = tmp_list->next;
@ -350,12 +357,9 @@ gdk_window_impl_quartz_process_updates (GdkPaintable *paintable,
if (private->update_area)
{
gdk_region_destroy (private->update_area);
private->update_area = NULL;
}
[impl->view setNeedsDisplay: YES];
update_windows = g_slist_remove (update_windows, private);
gdk_window_quartz_process_updates_internal ((GdkWindow *) private);
update_windows = g_slist_remove (update_windows, private);
}
}
static void