~ubuntu-branches/ubuntu/vivid/gimp/vivid

« back to all changes in this revision

Viewing changes to app/widgets/gimpdrawabletreeview.c

  • Committer: Package Import Robot
  • Author(s): Jordi Mallach
  • Date: 2012-05-08 18:50:03 UTC
  • mto: (1.1.26) (0.5.1 experimental)
  • mto: This revision was merged to the branch mainline in revision 71.
  • Revision ID: package-import@ubuntu.com-20120508185003-tltkvbaysf8d2426
ImportĀ upstreamĀ versionĀ 2.8.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
 * Copyright (C) 1995 Spencer Kimball and Peter Mattis
3
3
 *
4
4
 * gimpdrawabletreeview.c
5
 
 * Copyright (C) 2001-2003 Michael Natterer <mitch@gimp.org>
 
5
 * Copyright (C) 2001-2009 Michael Natterer <mitch@gimp.org>
6
6
 *
7
 
 * This program is free software; you can redistribute it and/or modify
 
7
 * This program is free software: you can redistribute it and/or modify
8
8
 * it under the terms of the GNU General Public License as published by
9
 
 * the Free Software Foundation; either version 2 of the License, or
 
9
 * the Free Software Foundation; either version 3 of the License, or
10
10
 * (at your option) any later version.
11
11
 *
12
12
 * This program is distributed in the hope that it will be useful,
15
15
 * GNU General Public License for more details.
16
16
 *
17
17
 * You should have received a copy of the GNU General Public License
18
 
 * along with this program; if not, write to the Free Software
19
 
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
18
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
19
 */
21
20
 
22
21
#include "config.h"
23
22
 
 
23
#include <gegl.h>
24
24
#include <gtk/gtk.h>
25
25
 
 
26
#include "libgimpwidgets/gimpwidgets.h"
 
27
 
26
28
#include "widgets-types.h"
27
29
 
28
30
#include "core/gimp.h"
43
45
 
44
46
static void   gimp_drawable_tree_view_view_iface_init (GimpContainerViewInterface *iface);
45
47
 
46
 
static GObject * gimp_drawable_tree_view_constructor (GType             type,
47
 
                                                      guint             n_params,
48
 
                                                      GObjectConstructParam *params);
 
48
static void     gimp_drawable_tree_view_constructed (GObject           *object);
49
49
 
50
50
static gboolean gimp_drawable_tree_view_select_item (GimpContainerView *view,
51
51
                                                     GimpViewable      *item,
55
55
                                                      GimpDndType          src_type,
56
56
                                                      GimpViewable        *src_viewable,
57
57
                                                      GimpViewable        *dest_viewable,
 
58
                                                      GtkTreePath         *drop_path,
58
59
                                                      GtkTreeViewDropPosition  drop_pos,
59
60
                                                      GtkTreeViewDropPosition *return_drop_pos,
60
61
                                                      GdkDragAction       *return_drag_action);
109
110
  tree_view_class = GIMP_CONTAINER_TREE_VIEW_CLASS (klass);
110
111
  item_view_class = GIMP_ITEM_TREE_VIEW_CLASS (klass);
111
112
 
112
 
  object_class->constructor      = gimp_drawable_tree_view_constructor;
 
113
  object_class->constructed      = gimp_drawable_tree_view_constructed;
113
114
 
114
115
  tree_view_class->drop_possible = gimp_drawable_tree_view_drop_possible;
115
116
  tree_view_class->drop_viewable = gimp_drawable_tree_view_drop_viewable;
116
117
  tree_view_class->drop_color    = gimp_drawable_tree_view_drop_color;
117
118
 
118
119
  item_view_class->set_image     = gimp_drawable_tree_view_set_image;
 
120
 
 
121
  item_view_class->lock_content_stock_id = GIMP_STOCK_TOOL_PAINTBRUSH;
 
122
  item_view_class->lock_content_tooltip  = _("Lock pixels");
119
123
}
120
124
 
121
125
static void
131
135
{
132
136
}
133
137
 
134
 
static GObject *
135
 
gimp_drawable_tree_view_constructor (GType                  type,
136
 
                                     guint                  n_params,
137
 
                                     GObjectConstructParam *params)
 
138
static void
 
139
gimp_drawable_tree_view_constructed (GObject *object)
138
140
{
139
 
  GimpContainerTreeView *tree_view;
140
 
  GimpItemTreeView      *item_view;
141
 
  GObject               *object;
142
 
 
143
 
  object = G_OBJECT_CLASS (parent_class)->constructor (type, n_params, params);
144
 
 
145
 
  tree_view = GIMP_CONTAINER_TREE_VIEW (object);
146
 
  item_view = GIMP_ITEM_TREE_VIEW (object);
147
 
 
148
 
  gimp_dnd_viewable_dest_add (item_view->new_button, GIMP_TYPE_PATTERN,
 
141
  GimpContainerTreeView *tree_view = GIMP_CONTAINER_TREE_VIEW (object);
 
142
  GimpItemTreeView      *item_view = GIMP_ITEM_TREE_VIEW (object);
 
143
 
 
144
  if (G_OBJECT_CLASS (parent_class)->constructed)
 
145
    G_OBJECT_CLASS (parent_class)->constructed (object);
 
146
 
 
147
  gimp_dnd_viewable_dest_add (gimp_item_tree_view_get_new_button (item_view),
 
148
                              GIMP_TYPE_PATTERN,
149
149
                              gimp_drawable_tree_view_new_pattern_dropped,
150
150
                              item_view);
151
 
  gimp_dnd_color_dest_add (item_view->new_button,
 
151
  gimp_dnd_color_dest_add (gimp_item_tree_view_get_new_button (item_view),
152
152
                           gimp_drawable_tree_view_new_color_dropped,
153
153
                           item_view);
154
154
 
156
156
                              NULL, tree_view);
157
157
  gimp_dnd_viewable_dest_add (GTK_WIDGET (tree_view->view), GIMP_TYPE_PATTERN,
158
158
                              NULL, tree_view);
159
 
 
160
 
  return object;
161
159
}
162
160
 
163
161
 
171
169
  GimpItemTreeView *item_view = GIMP_ITEM_TREE_VIEW (view);
172
170
  gboolean          success   = TRUE;
173
171
 
174
 
  if (item_view->image)
 
172
  if (gimp_item_tree_view_get_image (item_view))
175
173
    {
176
 
      GimpLayer *floating_sel = gimp_image_floating_sel (item_view->image);
 
174
      GimpLayer *floating_sel =
 
175
        gimp_image_get_floating_selection (gimp_item_tree_view_get_image (item_view));
177
176
 
178
177
      success = (item         == NULL ||
179
178
                 floating_sel == NULL ||
194
193
                                       GimpDndType              src_type,
195
194
                                       GimpViewable            *src_viewable,
196
195
                                       GimpViewable            *dest_viewable,
 
196
                                       GtkTreePath             *drop_path,
197
197
                                       GtkTreeViewDropPosition  drop_pos,
198
198
                                       GtkTreeViewDropPosition *return_drop_pos,
199
199
                                       GdkDragAction           *return_drag_action)
202
202
                                                                    src_type,
203
203
                                                                    src_viewable,
204
204
                                                                    dest_viewable,
 
205
                                                                    drop_path,
205
206
                                                                    drop_pos,
206
207
                                                                    return_drop_pos,
207
208
                                                                    return_drag_action))
209
210
      if (src_type == GIMP_DND_TYPE_COLOR ||
210
211
          src_type == GIMP_DND_TYPE_PATTERN)
211
212
        {
212
 
          if (! dest_viewable)
 
213
          if (! dest_viewable ||
 
214
              gimp_item_is_content_locked (GIMP_ITEM (dest_viewable)) ||
 
215
              gimp_viewable_get_children (GIMP_VIEWABLE (dest_viewable)))
213
216
            return FALSE;
214
217
 
215
218
          if (return_drop_pos)
216
219
            {
217
 
              if (drop_pos == GTK_TREE_VIEW_DROP_BEFORE)
218
 
                *return_drop_pos = GTK_TREE_VIEW_DROP_INTO_OR_BEFORE;
219
 
              else
220
 
                *return_drop_pos = GTK_TREE_VIEW_DROP_INTO_OR_AFTER;
 
220
              *return_drop_pos = GTK_TREE_VIEW_DROP_INTO_OR_AFTER;
221
221
            }
222
222
        }
223
223
 
244
244
                                      0.0, FALSE,        /* fill params  */
245
245
                                      0.0, 0.0,          /* ignored      */
246
246
                                      NULL, GIMP_PATTERN (src_viewable));
247
 
      gimp_image_flush (GIMP_ITEM_TREE_VIEW (view)->image);
 
247
      gimp_image_flush (gimp_item_tree_view_get_image (GIMP_ITEM_TREE_VIEW (view)));
248
248
      return;
249
249
    }
250
250
 
271
271
                                      0.0, FALSE,        /* fill params  */
272
272
                                      0.0, 0.0,          /* ignored      */
273
273
                                      color, NULL);
274
 
      gimp_image_flush (GIMP_ITEM_TREE_VIEW (view)->image);
 
274
      gimp_image_flush (gimp_item_tree_view_get_image (GIMP_ITEM_TREE_VIEW (view)));
275
275
    }
276
276
}
277
277
 
282
282
gimp_drawable_tree_view_set_image (GimpItemTreeView *view,
283
283
                                   GimpImage        *image)
284
284
{
285
 
  if (view->image)
286
 
    g_signal_handlers_disconnect_by_func (view->image,
 
285
  if (gimp_item_tree_view_get_image (view))
 
286
    g_signal_handlers_disconnect_by_func (gimp_item_tree_view_get_image (view),
287
287
                                          gimp_drawable_tree_view_floating_selection_changed,
288
288
                                          view);
289
289
 
290
290
  GIMP_ITEM_TREE_VIEW_CLASS (parent_class)->set_image (view, image);
291
291
 
292
 
  if (view->image)
293
 
    g_signal_connect (view->image,
 
292
  if (gimp_item_tree_view_get_image (view))
 
293
    g_signal_connect (gimp_item_tree_view_get_image (view),
294
294
                      "floating-selection-changed",
295
295
                      G_CALLBACK (gimp_drawable_tree_view_floating_selection_changed),
296
296
                      view);
322
322
{
323
323
  GimpItem *item;
324
324
 
325
 
  gimp_image_undo_group_start (view->image, GIMP_UNDO_GROUP_EDIT_PASTE,
 
325
  gimp_image_undo_group_start (gimp_item_tree_view_get_image (view), GIMP_UNDO_GROUP_EDIT_PASTE,
326
326
                               _("New Layer"));
327
327
 
328
 
  item = GIMP_ITEM_TREE_VIEW_GET_CLASS (view)->new_item (view->image);
 
328
  item = GIMP_ITEM_TREE_VIEW_GET_CLASS (view)->new_item (gimp_item_tree_view_get_image (view));
329
329
 
330
330
  if (item)
331
331
    {
332
332
      /*  Get the bucket fill context  */
333
333
      GimpContext  *context;
334
 
      GimpToolInfo *tool_info = gimp_get_tool_info (view->image->gimp,
 
334
      GimpToolInfo *tool_info = gimp_get_tool_info (gimp_item_tree_view_get_image (view)->gimp,
335
335
                                                    "gimp-bucket-fill-tool");
336
336
 
337
337
      if (tool_info && tool_info->tool_options)
350
350
                                      color, pattern);
351
351
    }
352
352
 
353
 
  gimp_image_undo_group_end (view->image);
 
353
  gimp_image_undo_group_end (gimp_item_tree_view_get_image (view));
354
354
 
355
 
  gimp_image_flush (view->image);
 
355
  gimp_image_flush (gimp_item_tree_view_get_image (view));
356
356
}
357
357
 
358
358
static void