static void gimp_display_flush_whenever (GimpDisplay *display, gboolean now) { if (display->update_areas) { GSList *list; for (list = display->update_areas; list; list = g_slist_next (list)) { GimpArea *area = list->data; if ((area->x1 != area->x2) && (area->y1 != area->y2)) { gimp_display_paint_area (display, area->x1, area->y1, (area->x2 - area->x1), (area->y2 - area->y1)); } } gimp_area_list_free (display->update_areas); display->update_areas = NULL; } gimp_display_shell_flush (GIMP_DISPLAY_SHELL (display->shell), now); }
static void gimp_draw_tool_draw (GimpDrawTool *draw_tool) { guint64 now = g_get_monotonic_time (); if (draw_tool->display && draw_tool->paused_count == 0 && (! draw_tool->draw_timeout || (now - draw_tool->last_draw_time) > MINIMUM_DRAW_INTERVAL)) { GimpDisplayShell *shell = gimp_display_get_shell (draw_tool->display); if (draw_tool->draw_timeout) { g_source_remove (draw_tool->draw_timeout); draw_tool->draw_timeout = 0; } gimp_draw_tool_undraw (draw_tool); GIMP_DRAW_TOOL_GET_CLASS (draw_tool)->draw (draw_tool); if (draw_tool->group_stack) { g_warning ("%s: draw_tool->group_stack not empty after calling " "GimpDrawTool::draw() of %s", G_STRFUNC, g_type_name (G_TYPE_FROM_INSTANCE (draw_tool))); while (draw_tool->group_stack) gimp_draw_tool_pop_group (draw_tool); } if (draw_tool->preview) gimp_display_shell_add_preview_item (shell, draw_tool->preview); if (draw_tool->item) gimp_display_shell_add_tool_item (shell, draw_tool->item); #if 0 gimp_display_shell_flush (shell, TRUE); #endif draw_tool->last_draw_time = g_get_monotonic_time (); #if 0 g_printerr ("drawing tool stuff took %f seconds\n", (draw_tool->last_draw_time - now) / 1000000.0); #endif } }