Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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);
}
Ejemplo n.º 3
0
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);
}
Ejemplo n.º 4
0
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);
    }
}