static void gimp_view_renderer_dispose (GObject *object) { GimpViewRenderer *renderer = GIMP_VIEW_RENDERER (object); if (renderer->viewable) gimp_view_renderer_set_viewable (renderer, NULL); if (renderer->context) gimp_view_renderer_set_context (renderer, NULL); gimp_view_renderer_remove_idle (renderer); G_OBJECT_CLASS (parent_class)->dispose (object); }
static void gimp_container_combo_box_set (GimpContainerComboBox *combo_box, GtkTreeIter *iter, GimpViewable *viewable) { GimpContainerView *view = GIMP_CONTAINER_VIEW (combo_box); GtkTreeModel *model; GimpViewRenderer *renderer; gchar *name; gint view_size; gint border_width; model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo_box)); view_size = gimp_container_view_get_view_size (view, &border_width); name = gimp_viewable_get_description (viewable, NULL); renderer = gimp_view_renderer_new (gimp_container_view_get_context (view), G_TYPE_FROM_INSTANCE (viewable), view_size, border_width, FALSE); gimp_view_renderer_set_viewable (renderer, viewable); gimp_view_renderer_remove_idle (renderer); g_signal_connect (renderer, "update", G_CALLBACK (gimp_container_combo_box_renderer_update), view); gtk_list_store_set (GTK_LIST_STORE (model), iter, COLUMN_RENDERER, renderer, COLUMN_NAME, name, -1); g_object_unref (renderer); g_free (name); }
static void gimp_component_editor_create_components (GimpComponentEditor *editor) { GimpImage *image = GIMP_IMAGE_EDITOR (editor)->image; gint n_components = 0; GimpChannelType components[MAX_CHANNELS]; GEnumClass *enum_class; gint i; switch (gimp_image_base_type (image)) { case GIMP_RGB: n_components = 3; components[0] = GIMP_RED_CHANNEL; components[1] = GIMP_GREEN_CHANNEL; components[2] = GIMP_BLUE_CHANNEL; break; case GIMP_GRAY: n_components = 1; components[0] = GIMP_GRAY_CHANNEL; break; case GIMP_INDEXED: n_components = 1; components[0] = GIMP_INDEXED_CHANNEL; break; } if (gimp_image_has_alpha (image)) components[n_components++] = GIMP_ALPHA_CHANNEL; enum_class = g_type_class_ref (GIMP_TYPE_CHANNEL_TYPE); for (i = 0; i < n_components; i++) { GimpViewRenderer *renderer; GtkTreeIter iter; GEnumValue *enum_value; const gchar *desc; gboolean visible; visible = gimp_image_get_component_visible (image, components[i]); renderer = gimp_view_renderer_new (GIMP_IMAGE_EDITOR (editor)->context, G_TYPE_FROM_INSTANCE (image), editor->view_size, 1, FALSE); gimp_view_renderer_set_viewable (renderer, GIMP_VIEWABLE (image)); gimp_view_renderer_remove_idle (renderer); GIMP_VIEW_RENDERER_IMAGE (renderer)->channel = components[i]; g_signal_connect (renderer, "update", G_CALLBACK (gimp_component_editor_renderer_update), editor); enum_value = g_enum_get_value (enum_class, components[i]); desc = gimp_enum_value_get_desc (enum_class, enum_value); gtk_list_store_append (GTK_LIST_STORE (editor->model), &iter); gtk_list_store_set (GTK_LIST_STORE (editor->model), &iter, COLUMN_CHANNEL, components[i], COLUMN_VISIBLE, visible, COLUMN_RENDERER, renderer, COLUMN_NAME, desc, -1); g_object_unref (renderer); if (gimp_image_get_component_active (image, components[i])) gtk_tree_selection_select_iter (editor->selection, &iter); } g_type_class_unref (enum_class); }
static void gimp_view_real_set_viewable (GimpView *view, GimpViewable *old, GimpViewable *viewable) { GType viewable_type = G_TYPE_NONE; if (viewable == view->viewable) return; if (viewable) { viewable_type = G_TYPE_FROM_INSTANCE (viewable); g_return_if_fail (g_type_is_a (viewable_type, view->renderer->viewable_type)); } if (view->viewable) { g_object_remove_weak_pointer (G_OBJECT (view->viewable), (gpointer) &view->viewable); if (! viewable && ! view->renderer->is_popup) { if (gimp_dnd_viewable_source_remove (GTK_WIDGET (view), G_TYPE_FROM_INSTANCE (view->viewable))) { if (gimp_viewable_get_size (view->viewable, NULL, NULL)) gimp_dnd_pixbuf_source_remove (GTK_WIDGET (view)); gtk_drag_source_unset (GTK_WIDGET (view)); } } } else if (viewable && ! view->renderer->is_popup) { if (gimp_dnd_drag_source_set_by_type (GTK_WIDGET (view), GDK_BUTTON1_MASK | GDK_BUTTON2_MASK, viewable_type, GDK_ACTION_COPY)) { gimp_dnd_viewable_source_add (GTK_WIDGET (view), viewable_type, gimp_view_drag_viewable, NULL); if (gimp_viewable_get_size (viewable, NULL, NULL)) gimp_dnd_pixbuf_source_add (GTK_WIDGET (view), gimp_view_drag_pixbuf, NULL); } } gimp_view_renderer_set_viewable (view->renderer, viewable); view->viewable = viewable; if (view->viewable) { g_object_add_weak_pointer (G_OBJECT (view->viewable), (gpointer) &view->viewable); } }