static void gimp_projection_projectable_changed (GimpProjectable *projectable, GimpProjection *proj) { gint off_x, off_y; gint width, height; if (proj->idle_render.idle_id) { g_source_remove (proj->idle_render.idle_id); proj->idle_render.idle_id = 0; } gimp_area_list_free (proj->update_areas); proj->update_areas = NULL; if (proj->pyramid) { tile_pyramid_destroy (proj->pyramid); proj->pyramid = NULL; } if (proj->buffer) { g_object_unref (proj->buffer); proj->buffer = NULL; } gimp_projectable_get_offset (proj->projectable, &off_x, &off_y); gimp_projectable_get_size (projectable, &width, &height); gimp_projection_add_update_area (proj, off_x, off_y, width, height); }
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_projection_finalize (GObject *object) { GimpProjection *proj = GIMP_PROJECTION (object); if (proj->idle_render.idle_id) { g_source_remove (proj->idle_render.idle_id); proj->idle_render.idle_id = 0; } gimp_area_list_free (proj->update_areas); proj->update_areas = NULL; gimp_area_list_free (proj->idle_render.update_areas); proj->idle_render.update_areas = NULL; if (proj->pyramid) { tile_pyramid_destroy (proj->pyramid); proj->pyramid = NULL; } if (proj->buffer) { g_object_unref (proj->buffer); proj->buffer = NULL; } if (proj->graph) { g_object_unref (proj->graph); proj->graph = NULL; proj->sink_node = NULL; } if (proj->processor) { g_object_unref (proj->processor); proj->processor = NULL; } G_OBJECT_CLASS (parent_class)->finalize (object); }
static void gimp_projection_finalize (GObject *object) { GimpProjection *proj = GIMP_PROJECTION (object); if (proj->idle_render.idle_id) { g_source_remove (proj->idle_render.idle_id); proj->idle_render.idle_id = 0; } gimp_area_list_free (proj->update_areas); proj->update_areas = NULL; gimp_area_list_free (proj->idle_render.update_areas); proj->idle_render.update_areas = NULL; gimp_projection_free_buffer (proj); G_OBJECT_CLASS (parent_class)->finalize (object); }
static void gimp_projection_flush_whenever (GimpProjection *proj, gboolean now) { /* First the updates... */ if (proj->update_areas) { if (now) /* Synchronous */ { GSList *list; for (list = proj->update_areas; list; list = g_slist_next (list)) { GimpArea *area = list->data; if ((area->x1 != area->x2) && (area->y1 != area->y2)) { gimp_projection_paint_area (proj, FALSE, /* sic! */ area->x1, area->y1, (area->x2 - area->x1), (area->y2 - area->y1)); } } } else /* Asynchronous */ { gimp_projection_idle_render_init (proj); } /* Free the update lists */ gimp_area_list_free (proj->update_areas); proj->update_areas = NULL; } else if (! now && proj->invalidate_preview) { /* invalidate the preview here since it is constructed from * the projection */ proj->invalidate_preview = FALSE; gimp_projectable_invalidate_preview (proj->projectable); } }
void gimp_display_delete (GimpDisplay *display) { GimpTool *active_tool; g_return_if_fail (GIMP_IS_DISPLAY (display)); /* remove the display from the list */ gimp_container_remove (display->image->gimp->displays, GIMP_OBJECT (display)); /* stop any active tool */ tool_manager_control_active (display->image->gimp, GIMP_TOOL_ACTION_HALT, display); active_tool = tool_manager_get_active (display->image->gimp); if (active_tool && active_tool->focus_display == display) tool_manager_focus_display_active (display->image->gimp, NULL); /* free the update area lists */ gimp_area_list_free (display->update_areas); display->update_areas = NULL; if (display->shell) { GtkWidget *shell = display->shell; /* set display->shell to NULL *before* destroying the shell. * all callbacks in gimpdisplayshell-callbacks.c will check * this pointer and do nothing if the shell is in destruction. */ display->shell = NULL; gtk_widget_destroy (shell); } /* unrefs the image */ gimp_display_disconnect (display); g_object_unref (display); }