~ubuntu-branches/ubuntu/jaunty/gimp/jaunty-security

« back to all changes in this revision

Viewing changes to app/core/gimpimage.c

  • Committer: Bazaar Package Importer
  • Author(s): Daniel Holbach
  • Date: 2007-05-02 16:33:03 UTC
  • mfrom: (1.1.4 upstream)
  • Revision ID: james.westby@ubuntu.com-20070502163303-bvzhjzbpw8qglc4y
Tags: 2.3.16-1ubuntu1
* Resynchronized with Debian, remaining Ubuntu changes:
  - debian/rules: i18n magic.
* debian/control.in:
  - Maintainer: Ubuntu Core Developers <ubuntu-devel@lists.ubuntu.com>
* debian/patches/02_help-message.patch,
  debian/patches/03_gimp.desktop.in.in.patch,
  debian/patches/10_dont_show_wizard.patch: updated.
* debian/patches/04_composite-signedness.patch,
  debian/patches/05_add-letter-spacing.patch: dropped, used upstream.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* The GIMP -- an image manipulation program
 
1
/* GIMP - The GNU Image Manipulation Program
2
2
 * Copyright (C) 1995 Spencer Kimball and Peter Mattis
3
3
 *
4
4
 * This program is free software; you can redistribute it and/or modify
26
26
#include "libgimpcolor/gimpcolor.h"
27
27
#include "libgimpmath/gimpmath.h"
28
28
#include "libgimpbase/gimpbase.h"
 
29
#include "libgimpconfig/gimpconfig.h"
29
30
 
30
31
#include "core-types.h"
31
32
 
32
33
#include "base/temp-buf.h"
33
34
#include "base/tile-manager.h"
34
35
 
35
 
#include "config/gimpconfig.h"
36
 
#include "config/gimpconfig-utils.h"
37
36
#include "config/gimpcoreconfig.h"
38
37
 
39
38
#include "gimp.h"
41
40
#include "gimp-utils.h"
42
41
#include "gimpcontext.h"
43
42
#include "gimpgrid.h"
 
43
#include "gimpguide.h"
44
44
#include "gimpimage.h"
45
45
#include "gimpimage-colorhash.h"
46
46
#include "gimpimage-colormap.h"
47
47
#include "gimpimage-guides.h"
 
48
#include "gimpimage-sample-points.h"
48
49
#include "gimpimage-preview.h"
49
 
#include "gimpimage-qmask.h"
 
50
#include "gimpimage-quick-mask.h"
50
51
#include "gimpimage-undo.h"
51
52
#include "gimpimage-undo-push.h"
52
53
#include "gimplayer.h"
55
56
#include "gimplist.h"
56
57
#include "gimpmarshal.h"
57
58
#include "gimpparasitelist.h"
 
59
#include "gimppickable.h"
58
60
#include "gimpprojection.h"
 
61
#include "gimpsamplepoint.h"
59
62
#include "gimpselection.h"
60
63
#include "gimptemplate.h"
61
64
#include "gimpundostack.h"
87
90
  MASK_CHANGED,
88
91
  RESOLUTION_CHANGED,
89
92
  UNIT_CHANGED,
90
 
  QMASK_CHANGED,
 
93
  QUICK_MASK_CHANGED,
91
94
  SELECTION_CONTROL,
92
95
  CLEAN,
93
96
  DIRTY,
 
97
  SAVED,
94
98
  UPDATE,
95
99
  UPDATE_GUIDE,
 
100
  UPDATE_SAMPLE_POINT,
 
101
  SAMPLE_POINT_ADDED,
 
102
  SAMPLE_POINT_REMOVED,
 
103
  PARASITE_ATTACHED,
 
104
  PARASITE_DETACHED,
96
105
  COLORMAP_CHANGED,
97
106
  UNDO_EVENT,
98
107
  FLUSH,
112
121
 
113
122
/*  local function prototypes  */
114
123
 
115
 
static void     gimp_image_class_init            (GimpImageClass *klass);
116
 
static void     gimp_image_init                  (GimpImage      *gimage);
117
 
 
118
124
static GObject *gimp_image_constructor           (GType           type,
119
125
                                                  guint           n_params,
120
126
                                                  GObjectConstructParam *params);
133
139
static gint64   gimp_image_get_memsize           (GimpObject     *object,
134
140
                                                  gint64         *gui_size);
135
141
 
 
142
static gboolean gimp_image_get_size              (GimpViewable   *viewable,
 
143
                                                  gint           *width,
 
144
                                                  gint           *height);
136
145
static void     gimp_image_invalidate_preview    (GimpViewable   *viewable);
137
146
static void     gimp_image_size_changed          (GimpViewable   *viewable);
138
147
static gchar  * gimp_image_get_description       (GimpViewable   *viewable,
139
148
                                                  gchar         **tooltip);
140
 
static void     gimp_image_real_colormap_changed (GimpImage      *gimage,
 
149
static void     gimp_image_real_colormap_changed (GimpImage      *image,
141
150
                                                  gint            color_index);
142
 
static void     gimp_image_real_flush            (GimpImage      *gimage);
 
151
static void     gimp_image_real_flush            (GimpImage      *image);
143
152
 
144
153
static void     gimp_image_mask_update           (GimpDrawable   *drawable,
145
154
                                                  gint            x,
146
155
                                                  gint            y,
147
156
                                                  gint            width,
148
157
                                                  gint            height,
149
 
                                                  GimpImage      *gimage);
 
158
                                                  GimpImage      *image);
150
159
static void     gimp_image_drawable_update       (GimpDrawable   *drawable,
151
160
                                                  gint            x,
152
161
                                                  gint            y,
153
162
                                                  gint            width,
154
163
                                                  gint            height,
155
 
                                                  GimpImage      *gimage);
 
164
                                                  GimpImage      *image);
156
165
static void     gimp_image_drawable_visibility   (GimpItem       *item,
157
 
                                                  GimpImage      *gimage);
 
166
                                                  GimpImage      *image);
158
167
static void     gimp_image_layer_alpha_changed   (GimpDrawable   *drawable,
159
 
                                                  GimpImage      *gimage);
 
168
                                                  GimpImage      *image);
160
169
static void     gimp_image_layer_add             (GimpContainer  *container,
161
170
                                                  GimpLayer      *layer,
162
 
                                                  GimpImage      *gimage);
 
171
                                                  GimpImage      *image);
163
172
static void     gimp_image_layer_remove          (GimpContainer  *container,
164
173
                                                  GimpLayer      *layer,
165
 
                                                  GimpImage      *gimage);
 
174
                                                  GimpImage      *image);
166
175
static void     gimp_image_channel_add           (GimpContainer  *container,
167
176
                                                  GimpChannel    *channel,
168
 
                                                  GimpImage      *gimage);
 
177
                                                  GimpImage      *image);
169
178
static void     gimp_image_channel_remove        (GimpContainer  *container,
170
179
                                                  GimpChannel    *channel,
171
 
                                                  GimpImage      *gimage);
 
180
                                                  GimpImage      *image);
172
181
static void     gimp_image_channel_name_changed  (GimpChannel    *channel,
173
 
                                                  GimpImage      *gimage);
 
182
                                                  GimpImage      *image);
174
183
static void     gimp_image_channel_color_changed (GimpChannel    *channel,
175
 
                                                  GimpImage      *gimage);
176
 
 
177
 
 
178
 
static gint valid_combinations[][MAX_CHANNELS + 1] =
 
184
                                                  GimpImage      *image);
 
185
 
 
186
 
 
187
static const gint valid_combinations[][MAX_CHANNELS + 1] =
179
188
{
180
189
  /* GIMP_RGB_IMAGE */
181
190
  { -1, -1, -1, COMBINE_INTEN_INTEN, COMBINE_INTEN_INTEN_A },
191
200
  { -1, -1, COMBINE_INDEXED_A_INDEXED_A, -1, -1 },
192
201
};
193
202
 
 
203
 
 
204
G_DEFINE_TYPE (GimpImage, gimp_image, GIMP_TYPE_VIEWABLE)
 
205
 
 
206
#define parent_class gimp_image_parent_class
 
207
 
194
208
static guint gimp_image_signals[LAST_SIGNAL] = { 0 };
195
209
 
196
 
static GimpViewableClass *parent_class = NULL;
197
 
 
198
 
 
199
 
GType
200
 
gimp_image_get_type (void)
201
 
{
202
 
  static GType image_type = 0;
203
 
 
204
 
  if (! image_type)
205
 
    {
206
 
      static const GTypeInfo image_info =
207
 
      {
208
 
        sizeof (GimpImageClass),
209
 
        NULL,           /* base_init */
210
 
        NULL,           /* base_finalize */
211
 
        (GClassInitFunc) gimp_image_class_init,
212
 
        NULL,           /* class_finalize */
213
 
        NULL,           /* class_data */
214
 
        sizeof (GimpImage),
215
 
        0,              /* n_preallocs */
216
 
        (GInstanceInitFunc) gimp_image_init,
217
 
      };
218
 
 
219
 
      image_type = g_type_register_static (GIMP_TYPE_VIEWABLE,
220
 
                                           "GimpImage",
221
 
                                           &image_info, 0);
222
 
    }
223
 
 
224
 
  return image_type;
225
 
}
226
 
 
227
 
 
228
 
/*  private functions  */
229
210
 
230
211
static void
231
212
gimp_image_class_init (GimpImageClass *klass)
234
215
  GimpObjectClass   *gimp_object_class = GIMP_OBJECT_CLASS (klass);
235
216
  GimpViewableClass *viewable_class    = GIMP_VIEWABLE_CLASS (klass);
236
217
 
237
 
  parent_class = g_type_class_peek_parent (klass);
238
 
 
239
218
  gimp_image_signals[MODE_CHANGED] =
240
 
    g_signal_new ("mode_changed",
 
219
    g_signal_new ("mode-changed",
241
220
                  G_TYPE_FROM_CLASS (klass),
242
221
                  G_SIGNAL_RUN_FIRST,
243
222
                  G_STRUCT_OFFSET (GimpImageClass, mode_changed),
246
225
                  G_TYPE_NONE, 0);
247
226
 
248
227
  gimp_image_signals[ALPHA_CHANGED] =
249
 
    g_signal_new ("alpha_changed",
 
228
    g_signal_new ("alpha-changed",
250
229
                  G_TYPE_FROM_CLASS (klass),
251
230
                  G_SIGNAL_RUN_FIRST,
252
231
                  G_STRUCT_OFFSET (GimpImageClass, alpha_changed),
255
234
                  G_TYPE_NONE, 0);
256
235
 
257
236
  gimp_image_signals[FLOATING_SELECTION_CHANGED] =
258
 
    g_signal_new ("floating_selection_changed",
 
237
    g_signal_new ("floating-selection-changed",
259
238
                  G_TYPE_FROM_CLASS (klass),
260
239
                  G_SIGNAL_RUN_FIRST,
261
240
                  G_STRUCT_OFFSET (GimpImageClass, floating_selection_changed),
264
243
                  G_TYPE_NONE, 0);
265
244
 
266
245
  gimp_image_signals[ACTIVE_LAYER_CHANGED] =
267
 
    g_signal_new ("active_layer_changed",
 
246
    g_signal_new ("active-layer-changed",
268
247
                  G_TYPE_FROM_CLASS (klass),
269
248
                  G_SIGNAL_RUN_FIRST,
270
249
                  G_STRUCT_OFFSET (GimpImageClass, active_layer_changed),
273
252
                  G_TYPE_NONE, 0);
274
253
 
275
254
  gimp_image_signals[ACTIVE_CHANNEL_CHANGED] =
276
 
    g_signal_new ("active_channel_changed",
 
255
    g_signal_new ("active-channel-changed",
277
256
                  G_TYPE_FROM_CLASS (klass),
278
257
                  G_SIGNAL_RUN_FIRST,
279
258
                  G_STRUCT_OFFSET (GimpImageClass, active_channel_changed),
282
261
                  G_TYPE_NONE, 0);
283
262
 
284
263
  gimp_image_signals[ACTIVE_VECTORS_CHANGED] =
285
 
    g_signal_new ("active_vectors_changed",
 
264
    g_signal_new ("active-vectors-changed",
286
265
                  G_TYPE_FROM_CLASS (klass),
287
266
                  G_SIGNAL_RUN_FIRST,
288
267
                  G_STRUCT_OFFSET (GimpImageClass, active_vectors_changed),
291
270
                  G_TYPE_NONE, 0);
292
271
 
293
272
  gimp_image_signals[COMPONENT_VISIBILITY_CHANGED] =
294
 
    g_signal_new ("component_visibility_changed",
 
273
    g_signal_new ("component-visibility-changed",
295
274
                  G_TYPE_FROM_CLASS (klass),
296
275
                  G_SIGNAL_RUN_FIRST,
297
276
                  G_STRUCT_OFFSET (GimpImageClass, component_visibility_changed),
301
280
                  GIMP_TYPE_CHANNEL_TYPE);
302
281
 
303
282
  gimp_image_signals[COMPONENT_ACTIVE_CHANGED] =
304
 
    g_signal_new ("component_active_changed",
 
283
    g_signal_new ("component-active-changed",
305
284
                  G_TYPE_FROM_CLASS (klass),
306
285
                  G_SIGNAL_RUN_FIRST,
307
286
                  G_STRUCT_OFFSET (GimpImageClass, component_active_changed),
311
290
                  GIMP_TYPE_CHANNEL_TYPE);
312
291
 
313
292
  gimp_image_signals[MASK_CHANGED] =
314
 
    g_signal_new ("mask_changed",
 
293
    g_signal_new ("mask-changed",
315
294
                  G_TYPE_FROM_CLASS (klass),
316
295
                  G_SIGNAL_RUN_FIRST,
317
296
                  G_STRUCT_OFFSET (GimpImageClass, mask_changed),
320
299
                  G_TYPE_NONE, 0);
321
300
 
322
301
  gimp_image_signals[RESOLUTION_CHANGED] =
323
 
    g_signal_new ("resolution_changed",
 
302
    g_signal_new ("resolution-changed",
324
303
                  G_TYPE_FROM_CLASS (klass),
325
304
                  G_SIGNAL_RUN_FIRST,
326
305
                  G_STRUCT_OFFSET (GimpImageClass, resolution_changed),
329
308
                  G_TYPE_NONE, 0);
330
309
 
331
310
  gimp_image_signals[UNIT_CHANGED] =
332
 
    g_signal_new ("unit_changed",
 
311
    g_signal_new ("unit-changed",
333
312
                  G_TYPE_FROM_CLASS (klass),
334
313
                  G_SIGNAL_RUN_FIRST,
335
314
                  G_STRUCT_OFFSET (GimpImageClass, unit_changed),
337
316
                  gimp_marshal_VOID__VOID,
338
317
                  G_TYPE_NONE, 0);
339
318
 
340
 
  gimp_image_signals[QMASK_CHANGED] =
341
 
    g_signal_new ("qmask_changed",
 
319
  gimp_image_signals[QUICK_MASK_CHANGED] =
 
320
    g_signal_new ("quick-mask-changed",
342
321
                  G_TYPE_FROM_CLASS (klass),
343
322
                  G_SIGNAL_RUN_FIRST,
344
 
                  G_STRUCT_OFFSET (GimpImageClass, qmask_changed),
 
323
                  G_STRUCT_OFFSET (GimpImageClass, quick_mask_changed),
345
324
                  NULL, NULL,
346
325
                  gimp_marshal_VOID__VOID,
347
326
                  G_TYPE_NONE, 0);
348
327
 
349
328
  gimp_image_signals[SELECTION_CONTROL] =
350
 
    g_signal_new ("selection_control",
 
329
    g_signal_new ("selection-control",
351
330
                  G_TYPE_FROM_CLASS (klass),
352
331
                  G_SIGNAL_RUN_FIRST,
353
332
                  G_STRUCT_OFFSET (GimpImageClass, selection_control),
376
355
                  G_TYPE_NONE, 1,
377
356
                  GIMP_TYPE_DIRTY_MASK);
378
357
 
 
358
  gimp_image_signals[SAVED] =
 
359
    g_signal_new ("saved",
 
360
                  G_TYPE_FROM_CLASS (klass),
 
361
                  G_SIGNAL_RUN_FIRST,
 
362
                  G_STRUCT_OFFSET (GimpImageClass, saved),
 
363
                  NULL, NULL,
 
364
                  gimp_marshal_VOID__STRING,
 
365
                  G_TYPE_NONE, 1,
 
366
                  G_TYPE_STRING);
 
367
 
379
368
  gimp_image_signals[UPDATE] =
380
369
    g_signal_new ("update",
381
370
                  G_TYPE_FROM_CLASS (klass),
390
379
                  G_TYPE_INT);
391
380
 
392
381
  gimp_image_signals[UPDATE_GUIDE] =
393
 
    g_signal_new ("update_guide",
 
382
    g_signal_new ("update-guide",
394
383
                  G_TYPE_FROM_CLASS (klass),
395
384
                  G_SIGNAL_RUN_FIRST,
396
385
                  G_STRUCT_OFFSET (GimpImageClass, update_guide),
399
388
                  G_TYPE_NONE, 1,
400
389
                  G_TYPE_POINTER);
401
390
 
 
391
  gimp_image_signals[UPDATE_SAMPLE_POINT] =
 
392
    g_signal_new ("update-sample-point",
 
393
                  G_TYPE_FROM_CLASS (klass),
 
394
                  G_SIGNAL_RUN_FIRST,
 
395
                  G_STRUCT_OFFSET (GimpImageClass, update_sample_point),
 
396
                  NULL, NULL,
 
397
                  gimp_marshal_VOID__POINTER,
 
398
                  G_TYPE_NONE, 1,
 
399
                  G_TYPE_POINTER);
 
400
 
 
401
  gimp_image_signals[SAMPLE_POINT_ADDED] =
 
402
    g_signal_new ("sample-point-added",
 
403
                  G_TYPE_FROM_CLASS (klass),
 
404
                  G_SIGNAL_RUN_FIRST,
 
405
                  G_STRUCT_OFFSET (GimpImageClass, sample_point_added),
 
406
                  NULL, NULL,
 
407
                  gimp_marshal_VOID__POINTER,
 
408
                  G_TYPE_NONE, 1,
 
409
                  G_TYPE_POINTER);
 
410
 
 
411
  gimp_image_signals[SAMPLE_POINT_REMOVED] =
 
412
    g_signal_new ("sample-point-removed",
 
413
                  G_TYPE_FROM_CLASS (klass),
 
414
                  G_SIGNAL_RUN_FIRST,
 
415
                  G_STRUCT_OFFSET (GimpImageClass, sample_point_removed),
 
416
                  NULL, NULL,
 
417
                  gimp_marshal_VOID__POINTER,
 
418
                  G_TYPE_NONE, 1,
 
419
                  G_TYPE_POINTER);
 
420
 
 
421
  gimp_image_signals[PARASITE_ATTACHED] =
 
422
    g_signal_new ("parasite-attached",
 
423
                  G_TYPE_FROM_CLASS (klass),
 
424
                  G_SIGNAL_RUN_FIRST,
 
425
                  G_STRUCT_OFFSET (GimpImageClass, parasite_attached),
 
426
                  NULL, NULL,
 
427
                  g_cclosure_marshal_VOID__STRING,
 
428
                  G_TYPE_NONE, 1,
 
429
                  G_TYPE_STRING);
 
430
 
 
431
  gimp_image_signals[PARASITE_DETACHED] =
 
432
    g_signal_new ("parasite-detached",
 
433
                  G_TYPE_FROM_CLASS (klass),
 
434
                  G_SIGNAL_RUN_FIRST,
 
435
                  G_STRUCT_OFFSET (GimpImageClass, parasite_detached),
 
436
                  NULL, NULL,
 
437
                  g_cclosure_marshal_VOID__STRING,
 
438
                  G_TYPE_NONE, 1,
 
439
                  G_TYPE_STRING);
 
440
 
402
441
  gimp_image_signals[COLORMAP_CHANGED] =
403
 
    g_signal_new ("colormap_changed",
 
442
    g_signal_new ("colormap-changed",
404
443
                  G_TYPE_FROM_CLASS (klass),
405
444
                  G_SIGNAL_RUN_FIRST,
406
445
                  G_STRUCT_OFFSET (GimpImageClass, colormap_changed),
410
449
                  G_TYPE_INT);
411
450
 
412
451
  gimp_image_signals[UNDO_EVENT] =
413
 
    g_signal_new ("undo_event",
 
452
    g_signal_new ("undo-event",
414
453
                  G_TYPE_FROM_CLASS (klass),
415
454
                  G_SIGNAL_RUN_FIRST,
416
455
                  G_STRUCT_OFFSET (GimpImageClass, undo_event),
439
478
  gimp_object_class->get_memsize      = gimp_image_get_memsize;
440
479
 
441
480
  viewable_class->default_stock_id    = "gimp-image";
 
481
  viewable_class->get_size            = gimp_image_get_size;
442
482
  viewable_class->invalidate_preview  = gimp_image_invalidate_preview;
443
483
  viewable_class->size_changed        = gimp_image_size_changed;
444
484
  viewable_class->get_preview_size    = gimp_image_get_preview_size;
459
499
 
460
500
  klass->clean                        = NULL;
461
501
  klass->dirty                        = NULL;
 
502
  klass->saved                        = NULL;
462
503
  klass->update                       = NULL;
463
504
  klass->update_guide                 = NULL;
 
505
  klass->update_sample_point          = NULL;
 
506
  klass->sample_point_added           = NULL;
 
507
  klass->sample_point_removed         = NULL;
 
508
  klass->parasite_attached            = NULL;
 
509
  klass->parasite_detached            = NULL;
464
510
  klass->colormap_changed             = gimp_image_real_colormap_changed;
465
511
  klass->undo_event                   = NULL;
466
512
  klass->flush                        = gimp_image_real_flush;
468
514
  g_object_class_install_property (object_class, PROP_GIMP,
469
515
                                   g_param_spec_object ("gimp", NULL, NULL,
470
516
                                                        GIMP_TYPE_GIMP,
471
 
                                                        G_PARAM_READWRITE |
 
517
                                                        GIMP_PARAM_READWRITE |
472
518
                                                        G_PARAM_CONSTRUCT_ONLY));
473
519
 
474
520
  g_object_class_install_property (object_class, PROP_ID,
475
521
                                   g_param_spec_int ("id", NULL, NULL,
476
522
                                                     0, G_MAXINT, 0,
477
 
                                                     G_PARAM_READABLE));
 
523
                                                     GIMP_PARAM_READABLE));
478
524
 
479
525
  g_object_class_install_property (object_class, PROP_WIDTH,
480
526
                                   g_param_spec_int ("width", NULL, NULL,
481
527
                                                     1, GIMP_MAX_IMAGE_SIZE, 1,
482
 
                                                     G_PARAM_READWRITE |
 
528
                                                     GIMP_PARAM_READWRITE |
483
529
                                                     G_PARAM_CONSTRUCT));
484
530
 
485
531
  g_object_class_install_property (object_class, PROP_HEIGHT,
486
532
                                   g_param_spec_int ("height", NULL, NULL,
487
533
                                                     1, GIMP_MAX_IMAGE_SIZE, 1,
488
 
                                                     G_PARAM_READWRITE |
 
534
                                                     GIMP_PARAM_READWRITE |
489
535
                                                     G_PARAM_CONSTRUCT));
490
536
 
491
537
  g_object_class_install_property (object_class, PROP_BASE_TYPE,
492
538
                                   g_param_spec_enum ("base-type", NULL, NULL,
493
539
                                                      GIMP_TYPE_IMAGE_BASE_TYPE,
494
540
                                                      GIMP_RGB,
495
 
                                                      G_PARAM_READWRITE |
 
541
                                                      GIMP_PARAM_READWRITE |
496
542
                                                      G_PARAM_CONSTRUCT));
497
543
 
498
544
  gimp_image_color_hash_init ();
499
545
}
500
546
 
501
547
static void
502
 
gimp_image_init (GimpImage *gimage)
 
548
gimp_image_init (GimpImage *image)
503
549
{
504
550
  gint i;
505
551
 
506
 
  gimage->ID                    = 0;
507
 
 
508
 
  gimage->save_proc             = NULL;
509
 
 
510
 
  gimage->width                 = 0;
511
 
  gimage->height                = 0;
512
 
  gimage->xresolution           = 1.0;
513
 
  gimage->yresolution           = 1.0;
514
 
  gimage->resolution_unit       = GIMP_UNIT_INCH;
515
 
  gimage->base_type             = GIMP_RGB;
516
 
 
517
 
  gimage->cmap                  = NULL;
518
 
  gimage->num_cols              = 0;
519
 
 
520
 
  gimage->dirty                 = 1;
521
 
  gimage->dirty_time            = 0;
522
 
  gimage->undo_freeze_count     = 0;
523
 
 
524
 
  gimage->instance_count        = 0;
525
 
  gimage->disp_count            = 0;
526
 
 
527
 
  gimage->tattoo_state          = 0;
528
 
 
529
 
  gimage->shadow                = NULL;
530
 
 
531
 
  gimage->projection            = gimp_projection_new (gimage);
532
 
 
533
 
  gimage->guides                = NULL;
534
 
 
535
 
  gimage->grid                  = NULL;
536
 
 
537
 
  gimage->layers                = gimp_list_new (GIMP_TYPE_LAYER,   TRUE);
538
 
  gimage->channels              = gimp_list_new (GIMP_TYPE_CHANNEL, TRUE);
539
 
  gimage->vectors               = gimp_list_new (GIMP_TYPE_VECTORS, TRUE);
540
 
  gimage->layer_stack           = NULL;
541
 
 
542
 
  gimage->layer_update_handler =
543
 
    gimp_container_add_handler (gimage->layers, "update",
 
552
  image->ID                    = 0;
 
553
 
 
554
  image->save_proc             = NULL;
 
555
 
 
556
  image->width                 = 0;
 
557
  image->height                = 0;
 
558
  image->xresolution           = 1.0;
 
559
  image->yresolution           = 1.0;
 
560
  image->resolution_unit       = GIMP_UNIT_INCH;
 
561
  image->base_type             = GIMP_RGB;
 
562
 
 
563
  image->cmap                  = NULL;
 
564
  image->num_cols              = 0;
 
565
 
 
566
  image->dirty                 = 1;
 
567
  image->dirty_time            = 0;
 
568
  image->undo_freeze_count     = 0;
 
569
 
 
570
  image->instance_count        = 0;
 
571
  image->disp_count            = 0;
 
572
 
 
573
  image->tattoo_state          = 0;
 
574
 
 
575
  image->shadow                = NULL;
 
576
 
 
577
  image->projection            = gimp_projection_new (image);
 
578
 
 
579
  image->guides                = NULL;
 
580
  image->grid                  = NULL;
 
581
  image->sample_points         = NULL;
 
582
 
 
583
  image->layers                = gimp_list_new (GIMP_TYPE_LAYER,   TRUE);
 
584
  image->channels              = gimp_list_new (GIMP_TYPE_CHANNEL, TRUE);
 
585
  image->vectors               = gimp_list_new (GIMP_TYPE_VECTORS, TRUE);
 
586
  image->layer_stack           = NULL;
 
587
 
 
588
  image->layer_update_handler =
 
589
    gimp_container_add_handler (image->layers, "update",
544
590
                                G_CALLBACK (gimp_image_drawable_update),
545
 
                                gimage);
546
 
  gimage->layer_visible_handler =
547
 
    gimp_container_add_handler (gimage->layers, "visibility_changed",
 
591
                                image);
 
592
  image->layer_visible_handler =
 
593
    gimp_container_add_handler (image->layers, "visibility-changed",
548
594
                                G_CALLBACK (gimp_image_drawable_visibility),
549
 
                                gimage);
550
 
  gimage->layer_alpha_handler =
551
 
    gimp_container_add_handler (gimage->layers, "alpha_changed",
 
595
                                image);
 
596
  image->layer_alpha_handler =
 
597
    gimp_container_add_handler (image->layers, "alpha-changed",
552
598
                                G_CALLBACK (gimp_image_layer_alpha_changed),
553
 
                                gimage);
 
599
                                image);
554
600
 
555
 
  gimage->channel_update_handler =
556
 
    gimp_container_add_handler (gimage->channels, "update",
 
601
  image->channel_update_handler =
 
602
    gimp_container_add_handler (image->channels, "update",
557
603
                                G_CALLBACK (gimp_image_drawable_update),
558
 
                                gimage);
559
 
  gimage->channel_visible_handler =
560
 
    gimp_container_add_handler (gimage->channels, "visibility_changed",
 
604
                                image);
 
605
  image->channel_visible_handler =
 
606
    gimp_container_add_handler (image->channels, "visibility-changed",
561
607
                                G_CALLBACK (gimp_image_drawable_visibility),
562
 
                                gimage);
563
 
  gimage->channel_name_changed_handler =
564
 
    gimp_container_add_handler (gimage->channels, "name_changed",
 
608
                                image);
 
609
  image->channel_name_changed_handler =
 
610
    gimp_container_add_handler (image->channels, "name-changed",
565
611
                                G_CALLBACK (gimp_image_channel_name_changed),
566
 
                                gimage);
567
 
  gimage->channel_color_changed_handler =
568
 
    gimp_container_add_handler (gimage->channels, "color_changed",
 
612
                                image);
 
613
  image->channel_color_changed_handler =
 
614
    gimp_container_add_handler (image->channels, "color-changed",
569
615
                                G_CALLBACK (gimp_image_channel_color_changed),
570
 
                                gimage);
 
616
                                image);
571
617
 
572
 
  g_signal_connect (gimage->layers, "add",
 
618
  g_signal_connect (image->layers, "add",
573
619
                    G_CALLBACK (gimp_image_layer_add),
574
 
                    gimage);
575
 
  g_signal_connect (gimage->layers, "remove",
 
620
                    image);
 
621
  g_signal_connect (image->layers, "remove",
576
622
                    G_CALLBACK (gimp_image_layer_remove),
577
 
                    gimage);
 
623
                    image);
578
624
 
579
 
  g_signal_connect (gimage->channels, "add",
 
625
  g_signal_connect (image->channels, "add",
580
626
                    G_CALLBACK (gimp_image_channel_add),
581
 
                    gimage);
582
 
  g_signal_connect (gimage->channels, "remove",
 
627
                    image);
 
628
  g_signal_connect (image->channels, "remove",
583
629
                    G_CALLBACK (gimp_image_channel_remove),
584
 
                    gimage);
585
 
 
586
 
  gimage->active_layer          = NULL;
587
 
  gimage->active_channel        = NULL;
588
 
  gimage->active_vectors        = NULL;
589
 
 
590
 
  gimage->floating_sel          = NULL;
591
 
  gimage->selection_mask        = NULL;
592
 
 
593
 
  gimage->parasites             = gimp_parasite_list_new ();
 
630
                    image);
 
631
 
 
632
  image->active_layer          = NULL;
 
633
  image->active_channel        = NULL;
 
634
  image->active_vectors        = NULL;
 
635
 
 
636
  image->floating_sel          = NULL;
 
637
  image->selection_mask        = NULL;
 
638
 
 
639
  image->parasites             = gimp_parasite_list_new ();
594
640
 
595
641
  for (i = 0; i < MAX_CHANNELS; i++)
596
642
    {
597
 
      gimage->visible[i] = TRUE;
598
 
      gimage->active[i]  = TRUE;
 
643
      image->visible[i] = TRUE;
 
644
      image->active[i]  = TRUE;
599
645
    }
600
646
 
601
 
  gimage->qmask_state           = FALSE;
602
 
  gimage->qmask_inverted        = FALSE;
603
 
  gimp_rgba_set (&gimage->qmask_color, 1.0, 0.0, 0.0, 0.5);
604
 
 
605
 
  gimage->undo_stack            = gimp_undo_stack_new (gimage);
606
 
  gimage->redo_stack            = gimp_undo_stack_new (gimage);
607
 
  gimage->group_count           = 0;
608
 
  gimage->pushing_undo_group    = GIMP_UNDO_GROUP_NONE;
609
 
 
610
 
  gimage->comp_preview          = NULL;
611
 
  gimage->comp_preview_valid    = FALSE;
612
 
 
613
 
  gimage->flush_accum.alpha_changed = FALSE;
614
 
  gimage->flush_accum.mask_changed  = FALSE;
 
647
  image->quick_mask_state      = FALSE;
 
648
  image->quick_mask_inverted   = FALSE;
 
649
  gimp_rgba_set (&image->quick_mask_color, 1.0, 0.0, 0.0, 0.5);
 
650
 
 
651
  image->undo_stack            = gimp_undo_stack_new (image);
 
652
  image->redo_stack            = gimp_undo_stack_new (image);
 
653
  image->group_count           = 0;
 
654
  image->pushing_undo_group    = GIMP_UNDO_GROUP_NONE;
 
655
 
 
656
  image->comp_preview          = NULL;
 
657
  image->comp_preview_valid    = FALSE;
 
658
 
 
659
  image->flush_accum.alpha_changed = FALSE;
 
660
  image->flush_accum.mask_changed  = FALSE;
615
661
}
616
662
 
617
663
static GObject *
620
666
                        GObjectConstructParam *params)
621
667
{
622
668
  GObject        *object;
623
 
  GimpImage      *gimage;
 
669
  GimpImage      *image;
624
670
  GimpCoreConfig *config;
625
671
 
626
672
  object = G_OBJECT_CLASS (parent_class)->constructor (type, n_params, params);
627
673
 
628
 
  gimage = GIMP_IMAGE (object);
629
 
 
630
 
  g_assert (GIMP_IS_GIMP (gimage->gimp));
631
 
 
632
 
  config = gimage->gimp->config;
633
 
 
634
 
  gimage->ID = gimage->gimp->next_image_ID++;
635
 
 
636
 
  g_hash_table_insert (gimage->gimp->image_table,
637
 
                       GINT_TO_POINTER (gimage->ID),
638
 
                       gimage);
639
 
 
640
 
  gimage->xresolution     = config->default_image->xresolution;
641
 
  gimage->yresolution     = config->default_image->yresolution;
642
 
  gimage->resolution_unit = config->default_image->resolution_unit;
643
 
 
644
 
  gimage->grid = gimp_config_duplicate (GIMP_CONFIG (config->default_grid));
645
 
 
646
 
  switch (gimage->base_type)
 
674
  image = GIMP_IMAGE (object);
 
675
 
 
676
  g_assert (GIMP_IS_GIMP (image->gimp));
 
677
 
 
678
  config = image->gimp->config;
 
679
 
 
680
  do
 
681
    {
 
682
      image->ID = image->gimp->next_image_ID++;
 
683
 
 
684
      if (image->gimp->next_image_ID == G_MAXINT)
 
685
        image->gimp->next_image_ID = 1;
 
686
    }
 
687
  while (g_hash_table_lookup (image->gimp->image_table,
 
688
                              GINT_TO_POINTER (image->ID)));
 
689
 
 
690
  g_hash_table_insert (image->gimp->image_table,
 
691
                       GINT_TO_POINTER (image->ID),
 
692
                       image);
 
693
 
 
694
  image->xresolution     = config->default_image->xresolution;
 
695
  image->yresolution     = config->default_image->yresolution;
 
696
  image->resolution_unit = config->default_image->resolution_unit;
 
697
 
 
698
  image->grid = gimp_config_duplicate (GIMP_CONFIG (config->default_grid));
 
699
 
 
700
  switch (image->base_type)
647
701
    {
648
702
    case GIMP_RGB:
649
703
    case GIMP_GRAY:
650
704
      break;
651
705
    case GIMP_INDEXED:
652
706
      /* always allocate 256 colors for the colormap */
653
 
      gimage->num_cols = 0;
654
 
      gimage->cmap     = g_new0 (guchar, GIMP_IMAGE_COLORMAP_SIZE);
 
707
      image->num_cols = 0;
 
708
      image->cmap     = g_new0 (guchar, GIMP_IMAGE_COLORMAP_SIZE);
655
709
      break;
656
710
    default:
657
711
      break;
658
712
    }
659
713
 
660
714
  /* create the selection mask */
661
 
  gimage->selection_mask = gimp_selection_new (gimage,
662
 
                                               gimage->width,
663
 
                                               gimage->height);
664
 
  g_object_ref (gimage->selection_mask);
665
 
  gimp_item_sink (GIMP_ITEM (gimage->selection_mask));
 
715
  image->selection_mask = gimp_selection_new (image,
 
716
                                              image->width,
 
717
                                              image->height);
 
718
  g_object_ref_sink (image->selection_mask);
666
719
 
667
 
  g_signal_connect (gimage->selection_mask, "update",
 
720
  g_signal_connect (image->selection_mask, "update",
668
721
                    G_CALLBACK (gimp_image_mask_update),
669
 
                    gimage);
 
722
                    image);
670
723
 
671
724
  g_signal_connect_object (config, "notify::transparency-type",
672
725
                           G_CALLBACK (gimp_image_invalidate_layer_previews),
673
 
                           gimage, G_CONNECT_SWAPPED);
 
726
                           image, G_CONNECT_SWAPPED);
674
727
  g_signal_connect_object (config, "notify::transparency-size",
675
728
                           G_CALLBACK (gimp_image_invalidate_layer_previews),
676
 
                           gimage, G_CONNECT_SWAPPED);
 
729
                           image, G_CONNECT_SWAPPED);
677
730
  g_signal_connect_object (config, "notify::layer-previews",
678
731
                           G_CALLBACK (gimp_viewable_size_changed),
679
 
                           gimage, G_CONNECT_SWAPPED);
 
732
                           image, G_CONNECT_SWAPPED);
 
733
 
 
734
  gimp_container_add (image->gimp->images, GIMP_OBJECT (image));
680
735
 
681
736
  return object;
682
737
}
687
742
                         const GValue *value,
688
743
                         GParamSpec   *pspec)
689
744
{
690
 
  GimpImage *gimage = GIMP_IMAGE (object);
 
745
  GimpImage *image = GIMP_IMAGE (object);
691
746
 
692
747
  switch (property_id)
693
748
    {
694
749
    case PROP_GIMP:
695
 
      gimage->gimp = g_value_get_object (value);
 
750
      image->gimp = g_value_get_object (value);
696
751
      break;
697
752
    case PROP_ID:
698
753
      g_assert_not_reached ();
699
754
      break;
700
755
    case PROP_WIDTH:
701
 
      gimage->width = g_value_get_int (value);
 
756
      image->width = g_value_get_int (value);
702
757
      break;
703
758
    case PROP_HEIGHT:
704
 
      gimage->height = g_value_get_int (value);
 
759
      image->height = g_value_get_int (value);
705
760
      break;
706
761
    case PROP_BASE_TYPE:
707
 
      gimage->base_type = g_value_get_enum (value);
 
762
      image->base_type = g_value_get_enum (value);
708
763
      break;
709
764
    default:
710
765
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
718
773
                         GValue     *value,
719
774
                         GParamSpec *pspec)
720
775
{
721
 
  GimpImage *gimage = GIMP_IMAGE (object);
 
776
  GimpImage *image = GIMP_IMAGE (object);
722
777
 
723
778
  switch (property_id)
724
779
    {
725
780
    case PROP_GIMP:
726
 
      g_value_set_object (value, gimage->gimp);
 
781
      g_value_set_object (value, image->gimp);
727
782
      break;
728
783
    case PROP_ID:
729
 
      g_value_set_int (value, gimage->ID);
 
784
      g_value_set_int (value, image->ID);
730
785
      break;
731
786
    case PROP_WIDTH:
732
 
      g_value_set_int (value, gimage->width);
 
787
      g_value_set_int (value, image->width);
733
788
      break;
734
789
    case PROP_HEIGHT:
735
 
      g_value_set_int (value, gimage->height);
 
790
      g_value_set_int (value, image->height);
736
791
      break;
737
792
    case PROP_BASE_TYPE:
738
 
      g_value_set_enum (value, gimage->base_type);
 
793
      g_value_set_enum (value, image->base_type);
739
794
      break;
740
795
    default:
741
796
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
746
801
static void
747
802
gimp_image_dispose (GObject *object)
748
803
{
749
 
  GimpImage *gimage = GIMP_IMAGE (object);
750
 
 
751
 
  gimp_image_undo_free (gimage);
752
 
 
753
 
  gimp_container_remove_handler (gimage->layers,
754
 
                                 gimage->layer_update_handler);
755
 
  gimp_container_remove_handler (gimage->layers,
756
 
                                 gimage->layer_visible_handler);
757
 
  gimp_container_remove_handler (gimage->layers,
758
 
                                 gimage->layer_alpha_handler);
759
 
 
760
 
  gimp_container_remove_handler (gimage->channels,
761
 
                                 gimage->channel_update_handler);
762
 
  gimp_container_remove_handler (gimage->channels,
763
 
                                 gimage->channel_visible_handler);
764
 
  gimp_container_remove_handler (gimage->channels,
765
 
                                 gimage->channel_name_changed_handler);
766
 
  gimp_container_remove_handler (gimage->channels,
767
 
                                 gimage->channel_color_changed_handler);
768
 
 
769
 
  g_signal_handlers_disconnect_by_func (gimage->layers,
 
804
  GimpImage *image = GIMP_IMAGE (object);
 
805
 
 
806
  gimp_image_undo_free (image);
 
807
 
 
808
  gimp_container_remove_handler (image->layers,
 
809
                                 image->layer_update_handler);
 
810
  gimp_container_remove_handler (image->layers,
 
811
                                 image->layer_visible_handler);
 
812
  gimp_container_remove_handler (image->layers,
 
813
                                 image->layer_alpha_handler);
 
814
 
 
815
  gimp_container_remove_handler (image->channels,
 
816
                                 image->channel_update_handler);
 
817
  gimp_container_remove_handler (image->channels,
 
818
                                 image->channel_visible_handler);
 
819
  gimp_container_remove_handler (image->channels,
 
820
                                 image->channel_name_changed_handler);
 
821
  gimp_container_remove_handler (image->channels,
 
822
                                 image->channel_color_changed_handler);
 
823
 
 
824
  g_signal_handlers_disconnect_by_func (image->layers,
770
825
                                        gimp_image_layer_add,
771
 
                                        gimage);
772
 
  g_signal_handlers_disconnect_by_func (gimage->layers,
 
826
                                        image);
 
827
  g_signal_handlers_disconnect_by_func (image->layers,
773
828
                                        gimp_image_layer_remove,
774
 
                                        gimage);
 
829
                                        image);
775
830
 
776
 
  g_signal_handlers_disconnect_by_func (gimage->channels,
 
831
  g_signal_handlers_disconnect_by_func (image->channels,
777
832
                                        gimp_image_channel_add,
778
 
                                        gimage);
779
 
  g_signal_handlers_disconnect_by_func (gimage->channels,
 
833
                                        image);
 
834
  g_signal_handlers_disconnect_by_func (image->channels,
780
835
                                        gimp_image_channel_remove,
781
 
                                        gimage);
 
836
                                        image);
782
837
 
783
 
  gimp_container_foreach (gimage->layers,   (GFunc) gimp_item_removed, NULL);
784
 
  gimp_container_foreach (gimage->channels, (GFunc) gimp_item_removed, NULL);
785
 
  gimp_container_foreach (gimage->vectors,  (GFunc) gimp_item_removed, NULL);
 
838
  gimp_container_foreach (image->layers,   (GFunc) gimp_item_removed, NULL);
 
839
  gimp_container_foreach (image->channels, (GFunc) gimp_item_removed, NULL);
 
840
  gimp_container_foreach (image->vectors,  (GFunc) gimp_item_removed, NULL);
786
841
 
787
842
  G_OBJECT_CLASS (parent_class)->dispose (object);
788
843
}
790
845
static void
791
846
gimp_image_finalize (GObject *object)
792
847
{
793
 
  GimpImage *gimage = GIMP_IMAGE (object);
794
 
 
795
 
  if (gimage->projection)
796
 
    {
797
 
      g_object_unref (gimage->projection);
798
 
      gimage->projection = NULL;
799
 
    }
800
 
 
801
 
  if (gimage->shadow)
802
 
    gimp_image_free_shadow (gimage);
803
 
 
804
 
  if (gimage->cmap)
805
 
    {
806
 
      g_free (gimage->cmap);
807
 
      gimage->cmap = NULL;
808
 
    }
809
 
 
810
 
  if (gimage->layers)
811
 
    {
812
 
      g_object_unref (gimage->layers);
813
 
      gimage->layers = NULL;
814
 
    }
815
 
  if (gimage->channels)
816
 
    {
817
 
      g_object_unref (gimage->channels);
818
 
      gimage->channels = NULL;
819
 
    }
820
 
  if (gimage->vectors)
821
 
    {
822
 
      g_object_unref (gimage->vectors);
823
 
      gimage->vectors = NULL;
824
 
    }
825
 
  if (gimage->layer_stack)
826
 
    {
827
 
      g_slist_free (gimage->layer_stack);
828
 
      gimage->layer_stack = NULL;
829
 
    }
830
 
 
831
 
  if (gimage->selection_mask)
832
 
    {
833
 
      g_object_unref (gimage->selection_mask);
834
 
      gimage->selection_mask = NULL;
835
 
    }
836
 
 
837
 
  if (gimage->comp_preview)
838
 
    {
839
 
      temp_buf_free (gimage->comp_preview);
840
 
      gimage->comp_preview = NULL;
841
 
    }
842
 
 
843
 
  if (gimage->parasites)
844
 
    {
845
 
      g_object_unref (gimage->parasites);
846
 
      gimage->parasites = NULL;
847
 
    }
848
 
 
849
 
  if (gimage->guides)
850
 
    {
851
 
      g_list_foreach (gimage->guides, (GFunc) gimp_image_guide_unref, NULL);
852
 
      g_list_free (gimage->guides);
853
 
      gimage->guides = NULL;
854
 
    }
855
 
 
856
 
  if (gimage->grid)
857
 
    {
858
 
      g_object_unref (gimage->grid);
859
 
      gimage->grid = NULL;
860
 
    }
861
 
 
862
 
  if (gimage->undo_stack)
863
 
    {
864
 
      g_object_unref (gimage->undo_stack);
865
 
      gimage->undo_stack = NULL;
866
 
    }
867
 
  if (gimage->redo_stack)
868
 
    {
869
 
      g_object_unref (gimage->redo_stack);
870
 
      gimage->redo_stack = NULL;
871
 
    }
872
 
 
873
 
  if (gimage->gimp && gimage->gimp->image_table)
874
 
    {
875
 
      g_hash_table_remove (gimage->gimp->image_table,
876
 
                           GINT_TO_POINTER (gimage->ID));
877
 
      gimage->gimp = NULL;
 
848
  GimpImage *image = GIMP_IMAGE (object);
 
849
 
 
850
  if (image->projection)
 
851
    {
 
852
      g_object_unref (image->projection);
 
853
      image->projection = NULL;
 
854
    }
 
855
 
 
856
  if (image->shadow)
 
857
    gimp_image_free_shadow_tiles (image);
 
858
 
 
859
  if (image->cmap)
 
860
    {
 
861
      g_free (image->cmap);
 
862
      image->cmap = NULL;
 
863
    }
 
864
 
 
865
  if (image->layers)
 
866
    {
 
867
      g_object_unref (image->layers);
 
868
      image->layers = NULL;
 
869
    }
 
870
  if (image->channels)
 
871
    {
 
872
      g_object_unref (image->channels);
 
873
      image->channels = NULL;
 
874
    }
 
875
  if (image->vectors)
 
876
    {
 
877
      g_object_unref (image->vectors);
 
878
      image->vectors = NULL;
 
879
    }
 
880
  if (image->layer_stack)
 
881
    {
 
882
      g_slist_free (image->layer_stack);
 
883
      image->layer_stack = NULL;
 
884
    }
 
885
 
 
886
  if (image->selection_mask)
 
887
    {
 
888
      g_object_unref (image->selection_mask);
 
889
      image->selection_mask = NULL;
 
890
    }
 
891
 
 
892
  if (image->comp_preview)
 
893
    {
 
894
      temp_buf_free (image->comp_preview);
 
895
      image->comp_preview = NULL;
 
896
    }
 
897
 
 
898
  if (image->parasites)
 
899
    {
 
900
      g_object_unref (image->parasites);
 
901
      image->parasites = NULL;
 
902
    }
 
903
 
 
904
  if (image->guides)
 
905
    {
 
906
      g_list_foreach (image->guides, (GFunc) g_object_unref, NULL);
 
907
      g_list_free (image->guides);
 
908
      image->guides = NULL;
 
909
    }
 
910
 
 
911
  if (image->grid)
 
912
    {
 
913
      g_object_unref (image->grid);
 
914
      image->grid = NULL;
 
915
    }
 
916
 
 
917
  if (image->sample_points)
 
918
    {
 
919
      g_list_foreach (image->sample_points,
 
920
                      (GFunc) gimp_sample_point_unref, NULL);
 
921
      g_list_free (image->sample_points);
 
922
      image->sample_points = NULL;
 
923
    }
 
924
 
 
925
  if (image->undo_stack)
 
926
    {
 
927
      g_object_unref (image->undo_stack);
 
928
      image->undo_stack = NULL;
 
929
    }
 
930
  if (image->redo_stack)
 
931
    {
 
932
      g_object_unref (image->redo_stack);
 
933
      image->redo_stack = NULL;
 
934
    }
 
935
 
 
936
  if (image->gimp && image->gimp->image_table)
 
937
    {
 
938
      g_hash_table_remove (image->gimp->image_table,
 
939
                           GINT_TO_POINTER (image->ID));
 
940
      image->gimp = NULL;
878
941
    }
879
942
 
880
943
  G_OBJECT_CLASS (parent_class)->finalize (object);
901
964
gimp_image_get_memsize (GimpObject *object,
902
965
                        gint64     *gui_size)
903
966
{
904
 
  GimpImage *gimage  = GIMP_IMAGE (object);
 
967
  GimpImage *image   = GIMP_IMAGE (object);
905
968
  gint64     memsize = 0;
906
969
 
907
 
  if (gimage->cmap)
 
970
  if (image->cmap)
908
971
    memsize += GIMP_IMAGE_COLORMAP_SIZE;
909
972
 
910
 
  if (gimage->shadow)
911
 
    memsize += tile_manager_get_memsize (gimage->shadow, FALSE);
912
 
 
913
 
  if (gimage->projection)
914
 
    memsize += gimp_object_get_memsize (GIMP_OBJECT (gimage->projection),
915
 
                                        gui_size);
916
 
 
917
 
  memsize += gimp_g_list_get_memsize (gimage->guides, sizeof (GimpGuide));
918
 
 
919
 
  if (gimage->grid)
920
 
    memsize += gimp_object_get_memsize (GIMP_OBJECT (gimage->grid), gui_size);
921
 
 
922
 
  memsize += gimp_object_get_memsize (GIMP_OBJECT (gimage->layers),
923
 
                                      gui_size);
924
 
  memsize += gimp_object_get_memsize (GIMP_OBJECT (gimage->channels),
925
 
                                      gui_size);
926
 
  memsize += gimp_object_get_memsize (GIMP_OBJECT (gimage->vectors),
927
 
                                      gui_size);
928
 
 
929
 
  memsize += gimp_g_slist_get_memsize (gimage->layer_stack, 0);
930
 
 
931
 
  if (gimage->selection_mask)
932
 
    memsize += gimp_object_get_memsize (GIMP_OBJECT (gimage->selection_mask),
933
 
                                        gui_size);
934
 
 
935
 
  memsize += gimp_object_get_memsize (GIMP_OBJECT (gimage->parasites),
936
 
                                      gui_size);
937
 
 
938
 
  memsize += gimp_object_get_memsize (GIMP_OBJECT (gimage->undo_stack),
939
 
                                      gui_size);
940
 
  memsize += gimp_object_get_memsize (GIMP_OBJECT (gimage->redo_stack),
941
 
                                      gui_size);
942
 
 
943
 
  if (gimage->comp_preview)
944
 
    *gui_size += temp_buf_get_memsize (gimage->comp_preview);
 
973
  if (image->shadow)
 
974
    memsize += tile_manager_get_memsize (image->shadow, FALSE);
 
975
 
 
976
  if (image->projection)
 
977
    memsize += gimp_object_get_memsize (GIMP_OBJECT (image->projection),
 
978
                                        gui_size);
 
979
 
 
980
  memsize += gimp_g_list_get_memsize (image->guides, sizeof (GimpGuide));
 
981
 
 
982
  if (image->grid)
 
983
    memsize += gimp_object_get_memsize (GIMP_OBJECT (image->grid), gui_size);
 
984
 
 
985
  memsize += gimp_g_list_get_memsize (image->sample_points,
 
986
                                      sizeof (GimpSamplePoint));
 
987
 
 
988
  memsize += gimp_object_get_memsize (GIMP_OBJECT (image->layers),
 
989
                                      gui_size);
 
990
  memsize += gimp_object_get_memsize (GIMP_OBJECT (image->channels),
 
991
                                      gui_size);
 
992
  memsize += gimp_object_get_memsize (GIMP_OBJECT (image->vectors),
 
993
                                      gui_size);
 
994
 
 
995
  memsize += gimp_g_slist_get_memsize (image->layer_stack, 0);
 
996
 
 
997
  if (image->selection_mask)
 
998
    memsize += gimp_object_get_memsize (GIMP_OBJECT (image->selection_mask),
 
999
                                        gui_size);
 
1000
 
 
1001
  memsize += gimp_object_get_memsize (GIMP_OBJECT (image->parasites),
 
1002
                                      gui_size);
 
1003
 
 
1004
  memsize += gimp_object_get_memsize (GIMP_OBJECT (image->undo_stack),
 
1005
                                      gui_size);
 
1006
  memsize += gimp_object_get_memsize (GIMP_OBJECT (image->redo_stack),
 
1007
                                      gui_size);
 
1008
 
 
1009
  if (image->comp_preview)
 
1010
    *gui_size += temp_buf_get_memsize (image->comp_preview);
945
1011
 
946
1012
  return memsize + GIMP_OBJECT_CLASS (parent_class)->get_memsize (object,
947
1013
                                                                  gui_size);
948
1014
}
949
1015
 
 
1016
static gboolean
 
1017
gimp_image_get_size (GimpViewable *viewable,
 
1018
                     gint         *width,
 
1019
                     gint         *height)
 
1020
{
 
1021
  GimpImage *image = GIMP_IMAGE (viewable);
 
1022
 
 
1023
  *width  = image->width;
 
1024
  *height = image->height;
 
1025
 
 
1026
  return TRUE;
 
1027
}
 
1028
 
950
1029
static void
951
1030
gimp_image_invalidate_preview (GimpViewable *viewable)
952
1031
{
953
 
  GimpImage *gimage = GIMP_IMAGE (viewable);
 
1032
  GimpImage *image = GIMP_IMAGE (viewable);
954
1033
 
955
1034
  if (GIMP_VIEWABLE_CLASS (parent_class)->invalidate_preview)
956
1035
    GIMP_VIEWABLE_CLASS (parent_class)->invalidate_preview (viewable);
957
1036
 
958
 
  gimage->comp_preview_valid = FALSE;
 
1037
  image->comp_preview_valid = FALSE;
959
1038
 
960
 
  if (gimage->comp_preview)
 
1039
  if (image->comp_preview)
961
1040
    {
962
 
      temp_buf_free (gimage->comp_preview);
963
 
      gimage->comp_preview = NULL;
 
1041
      temp_buf_free (image->comp_preview);
 
1042
      image->comp_preview = NULL;
964
1043
    }
965
1044
}
966
1045
 
967
1046
static void
968
1047
gimp_image_size_changed (GimpViewable *viewable)
969
1048
{
970
 
  GimpImage *gimage = GIMP_IMAGE (viewable);
 
1049
  GimpImage *image = GIMP_IMAGE (viewable);
971
1050
  GList     *list;
972
1051
 
973
1052
  if (GIMP_VIEWABLE_CLASS (parent_class)->size_changed)
974
1053
    GIMP_VIEWABLE_CLASS (parent_class)->size_changed (viewable);
975
1054
 
976
 
  gimp_container_foreach (gimage->layers,
977
 
                          (GFunc) gimp_viewable_size_changed,
978
 
                          NULL);
979
 
  gimp_container_foreach (gimage->channels,
980
 
                          (GFunc) gimp_viewable_size_changed,
981
 
                          NULL);
982
 
  gimp_container_foreach (gimage->vectors,
 
1055
  gimp_container_foreach (image->layers,
 
1056
                          (GFunc) gimp_viewable_size_changed,
 
1057
                          NULL);
 
1058
  gimp_container_foreach (image->channels,
 
1059
                          (GFunc) gimp_viewable_size_changed,
 
1060
                          NULL);
 
1061
  gimp_container_foreach (image->vectors,
983
1062
                          (GFunc) gimp_viewable_size_changed,
984
1063
                          NULL);
985
1064
 
986
 
  for (list = GIMP_LIST (gimage->layers)->list; list; list = g_list_next (list))
 
1065
  for (list = GIMP_LIST (image->layers)->list; list; list = g_list_next (list))
987
1066
    {
988
1067
      GimpLayerMask *mask = gimp_layer_get_mask (GIMP_LAYER (list->data));
989
1068
 
991
1070
        gimp_viewable_size_changed (GIMP_VIEWABLE (mask));
992
1071
    }
993
1072
 
994
 
  gimp_viewable_size_changed (GIMP_VIEWABLE (gimp_image_get_mask (gimage)));
 
1073
  gimp_viewable_size_changed (GIMP_VIEWABLE (gimp_image_get_mask (image)));
995
1074
}
996
1075
 
997
1076
static gchar *
998
1077
gimp_image_get_description (GimpViewable  *viewable,
999
1078
                            gchar        **tooltip)
1000
1079
{
1001
 
  GimpImage   *gimage = GIMP_IMAGE (viewable);
 
1080
  GimpImage   *image = GIMP_IMAGE (viewable);
1002
1081
  const gchar *uri;
1003
1082
  gchar       *basename;
1004
1083
  gchar       *retval;
1005
1084
 
1006
 
  uri = gimp_image_get_uri (GIMP_IMAGE (gimage));
 
1085
  uri = gimp_image_get_uri (GIMP_IMAGE (image));
1007
1086
 
1008
 
  basename = file_utils_uri_to_utf8_basename (uri);
 
1087
  basename = file_utils_uri_display_basename (uri);
1009
1088
 
1010
1089
  if (tooltip)
1011
 
    *tooltip = file_utils_uri_to_utf8_filename (uri);
 
1090
    *tooltip = file_utils_uri_display_name (uri);
1012
1091
 
1013
 
  retval = g_strdup_printf ("%s-%d", basename, gimp_image_get_ID (gimage));
 
1092
  retval = g_strdup_printf ("%s-%d", basename, gimp_image_get_ID (image));
1014
1093
 
1015
1094
  g_free (basename);
1016
1095
 
1018
1097
}
1019
1098
 
1020
1099
static void
1021
 
gimp_image_real_colormap_changed (GimpImage *gimage,
 
1100
gimp_image_real_colormap_changed (GimpImage *image,
1022
1101
                                  gint       color_index)
1023
1102
{
1024
 
  if (gimp_image_base_type (gimage) == GIMP_INDEXED)
 
1103
  if (gimp_image_base_type (image) == GIMP_INDEXED)
1025
1104
    {
1026
 
      gimp_image_color_hash_invalidate (gimage, color_index);
 
1105
      gimp_image_color_hash_invalidate (image, color_index);
1027
1106
 
1028
1107
      /* A colormap alteration affects the whole image */
1029
 
      gimp_image_update (gimage, 0, 0, gimage->width, gimage->height);
 
1108
      gimp_image_update (image, 0, 0, image->width, image->height);
1030
1109
 
1031
 
      gimp_image_invalidate_layer_previews (gimage);
1032
 
      gimp_viewable_invalidate_preview (GIMP_VIEWABLE (gimage));
 
1110
      gimp_image_invalidate_layer_previews (image);
 
1111
      gimp_viewable_invalidate_preview (GIMP_VIEWABLE (image));
1033
1112
    }
1034
1113
}
1035
1114
 
1036
 
void
1037
 
gimp_image_real_flush (GimpImage *gimage)
 
1115
static void
 
1116
gimp_image_real_flush (GimpImage *image)
1038
1117
{
1039
 
  if (gimage->flush_accum.alpha_changed)
 
1118
  if (image->flush_accum.alpha_changed)
1040
1119
    {
1041
 
      gimp_image_alpha_changed (gimage);
1042
 
      gimage->flush_accum.alpha_changed = FALSE;
 
1120
      gimp_image_alpha_changed (image);
 
1121
      image->flush_accum.alpha_changed = FALSE;
1043
1122
    }
1044
1123
 
1045
 
  if (gimage->flush_accum.mask_changed)
 
1124
  if (image->flush_accum.mask_changed)
1046
1125
    {
1047
 
      gimp_image_mask_changed (gimage);
1048
 
      gimage->flush_accum.mask_changed = FALSE;
 
1126
      gimp_image_mask_changed (image);
 
1127
      image->flush_accum.mask_changed = FALSE;
1049
1128
    }
1050
1129
}
1051
1130
 
1055
1134
                        gint          y,
1056
1135
                        gint          width,
1057
1136
                        gint          height,
1058
 
                        GimpImage    *gimage)
 
1137
                        GimpImage    *image)
1059
1138
{
1060
 
  gimage->flush_accum.mask_changed = TRUE;
 
1139
  image->flush_accum.mask_changed = TRUE;
1061
1140
}
1062
1141
 
1063
1142
static void
1066
1145
                            gint          y,
1067
1146
                            gint          width,
1068
1147
                            gint          height,
1069
 
                            GimpImage    *gimage)
 
1148
                            GimpImage    *image)
1070
1149
{
1071
1150
  GimpItem *item = GIMP_ITEM (drawable);
1072
1151
 
1079
1158
      x += offset_x;
1080
1159
      y += offset_y;
1081
1160
 
1082
 
      gimp_image_update (gimage, x, y, width, height);
1083
 
      gimp_viewable_invalidate_preview (GIMP_VIEWABLE (gimage));
 
1161
      gimp_image_update (image, x, y, width, height);
 
1162
      gimp_viewable_invalidate_preview (GIMP_VIEWABLE (image));
1084
1163
    }
1085
1164
}
1086
1165
 
1087
1166
static void
1088
1167
gimp_image_drawable_visibility (GimpItem  *item,
1089
 
                                GimpImage *gimage)
 
1168
                                GimpImage *image)
1090
1169
{
1091
1170
  gint offset_x;
1092
1171
  gint offset_y;
1093
1172
 
1094
1173
  gimp_item_offsets (item, &offset_x, &offset_y);
1095
1174
 
1096
 
  gimp_image_update (gimage,
 
1175
  gimp_image_update (image,
1097
1176
                     offset_x, offset_y,
1098
1177
                     gimp_item_width (item),
1099
1178
                     gimp_item_height (item));
1100
 
  gimp_viewable_invalidate_preview (GIMP_VIEWABLE (gimage));
 
1179
  gimp_viewable_invalidate_preview (GIMP_VIEWABLE (image));
1101
1180
}
1102
1181
 
1103
1182
static void
1104
1183
gimp_image_layer_alpha_changed (GimpDrawable *drawable,
1105
 
                                GimpImage    *gimage)
 
1184
                                GimpImage    *image)
1106
1185
{
1107
 
  if (gimp_container_num_children (gimage->layers) == 1)
1108
 
    gimage->flush_accum.alpha_changed = TRUE;
 
1186
  if (gimp_container_num_children (image->layers) == 1)
 
1187
    image->flush_accum.alpha_changed = TRUE;
1109
1188
}
1110
1189
 
1111
1190
static void
1112
1191
gimp_image_layer_add (GimpContainer *container,
1113
1192
                      GimpLayer     *layer,
1114
 
                      GimpImage     *gimage)
 
1193
                      GimpImage     *image)
1115
1194
{
1116
1195
  GimpItem *item = GIMP_ITEM (layer);
1117
1196
 
1118
1197
  if (gimp_item_get_visible (item))
1119
 
    gimp_image_drawable_visibility (item, gimage);
 
1198
    gimp_image_drawable_visibility (item, image);
1120
1199
}
1121
1200
 
1122
1201
static void
1123
1202
gimp_image_layer_remove (GimpContainer *container,
1124
1203
                         GimpLayer     *layer,
1125
 
                         GimpImage     *gimage)
 
1204
                         GimpImage     *image)
1126
1205
{
1127
1206
  GimpItem *item = GIMP_ITEM (layer);
1128
1207
 
1129
1208
  if (gimp_item_get_visible (item))
1130
 
    gimp_image_drawable_visibility (item, gimage);
 
1209
    gimp_image_drawable_visibility (item, image);
1131
1210
}
1132
1211
 
1133
1212
static void
1134
1213
gimp_image_channel_add (GimpContainer *container,
1135
1214
                        GimpChannel   *channel,
1136
 
                        GimpImage     *gimage)
 
1215
                        GimpImage     *image)
1137
1216
{
1138
1217
  GimpItem *item = GIMP_ITEM (channel);
1139
1218
 
1140
1219
  if (gimp_item_get_visible (item))
1141
 
    gimp_image_drawable_visibility (item, gimage);
 
1220
    gimp_image_drawable_visibility (item, image);
1142
1221
 
1143
 
  if (! strcmp (GIMP_IMAGE_QMASK_NAME,
 
1222
  if (! strcmp (GIMP_IMAGE_QUICK_MASK_NAME,
1144
1223
                gimp_object_get_name (GIMP_OBJECT (channel))))
1145
1224
    {
1146
 
      gimp_image_set_qmask_state (gimage, TRUE);
 
1225
      gimp_image_set_quick_mask_state (image, TRUE);
1147
1226
    }
1148
1227
}
1149
1228
 
1150
1229
static void
1151
1230
gimp_image_channel_remove (GimpContainer *container,
1152
1231
                           GimpChannel   *channel,
1153
 
                           GimpImage     *gimage)
 
1232
                           GimpImage     *image)
1154
1233
{
1155
1234
  GimpItem *item = GIMP_ITEM (channel);
1156
1235
 
1157
1236
  if (gimp_item_get_visible (item))
1158
 
    gimp_image_drawable_visibility (item, gimage);
 
1237
    gimp_image_drawable_visibility (item, image);
1159
1238
 
1160
 
  if (! strcmp (GIMP_IMAGE_QMASK_NAME,
 
1239
  if (! strcmp (GIMP_IMAGE_QUICK_MASK_NAME,
1161
1240
                gimp_object_get_name (GIMP_OBJECT (channel))))
1162
1241
    {
1163
 
      gimp_image_set_qmask_state (gimage, FALSE);
 
1242
      gimp_image_set_quick_mask_state (image, FALSE);
1164
1243
    }
1165
1244
}
1166
1245
 
1167
1246
static void
1168
1247
gimp_image_channel_name_changed (GimpChannel *channel,
1169
 
                                 GimpImage   *gimage)
 
1248
                                 GimpImage   *image)
1170
1249
{
1171
 
  if (! strcmp (GIMP_IMAGE_QMASK_NAME,
 
1250
  if (! strcmp (GIMP_IMAGE_QUICK_MASK_NAME,
1172
1251
                gimp_object_get_name (GIMP_OBJECT (channel))))
1173
1252
    {
1174
 
      gimp_image_set_qmask_state (gimage, TRUE);
 
1253
      gimp_image_set_quick_mask_state (image, TRUE);
1175
1254
    }
1176
 
  else if (gimp_image_get_qmask_state (gimage) &&
1177
 
           ! gimp_image_get_qmask (gimage))
 
1255
  else if (gimp_image_get_quick_mask_state (image) &&
 
1256
           ! gimp_image_get_quick_mask (image))
1178
1257
    {
1179
 
      gimp_image_set_qmask_state (gimage, FALSE);
 
1258
      gimp_image_set_quick_mask_state (image, FALSE);
1180
1259
    }
1181
1260
}
1182
1261
 
1183
1262
static void
1184
1263
gimp_image_channel_color_changed (GimpChannel *channel,
1185
 
                                  GimpImage   *gimage)
 
1264
                                  GimpImage   *image)
1186
1265
{
1187
 
  if (! strcmp (GIMP_IMAGE_QMASK_NAME,
 
1266
  if (! strcmp (GIMP_IMAGE_QUICK_MASK_NAME,
1188
1267
                gimp_object_get_name (GIMP_OBJECT (channel))))
1189
1268
    {
1190
 
      gimage->qmask_color = channel->color;
 
1269
      image->quick_mask_color = channel->color;
1191
1270
    }
1192
1271
}
1193
1272
 
1211
1290
}
1212
1291
 
1213
1292
GimpImageBaseType
1214
 
gimp_image_base_type (const GimpImage *gimage)
 
1293
gimp_image_base_type (const GimpImage *image)
1215
1294
{
1216
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), -1);
 
1295
  g_return_val_if_fail (GIMP_IS_IMAGE (image), -1);
1217
1296
 
1218
 
  return gimage->base_type;
 
1297
  return image->base_type;
1219
1298
}
1220
1299
 
1221
1300
GimpImageType
1222
 
gimp_image_base_type_with_alpha (const GimpImage *gimage)
 
1301
gimp_image_base_type_with_alpha (const GimpImage *image)
1223
1302
{
1224
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), -1);
 
1303
  g_return_val_if_fail (GIMP_IS_IMAGE (image), -1);
1225
1304
 
1226
 
  switch (gimage->base_type)
 
1305
  switch (image->base_type)
1227
1306
    {
1228
1307
    case GIMP_RGB:
1229
1308
      return GIMP_RGBA_IMAGE;
1244
1323
}
1245
1324
 
1246
1325
gint
1247
 
gimp_image_get_ID (const GimpImage *gimage)
 
1326
gimp_image_get_ID (const GimpImage *image)
1248
1327
{
1249
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), -1);
 
1328
  g_return_val_if_fail (GIMP_IS_IMAGE (image), -1);
1250
1329
 
1251
 
  return gimage->ID;
 
1330
  return image->ID;
1252
1331
}
1253
1332
 
1254
1333
GimpImage *
1265
1344
}
1266
1345
 
1267
1346
void
1268
 
gimp_image_set_uri (GimpImage   *gimage,
 
1347
gimp_image_set_uri (GimpImage   *image,
1269
1348
                    const gchar *uri)
1270
1349
{
1271
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
1272
 
 
1273
 
  gimp_object_set_name (GIMP_OBJECT (gimage), uri);
 
1350
  g_return_if_fail (GIMP_IS_IMAGE (image));
 
1351
 
 
1352
  gimp_object_set_name (GIMP_OBJECT (image), uri);
 
1353
}
 
1354
 
 
1355
static void
 
1356
gimp_image_take_uri (GimpImage *image,
 
1357
                     gchar     *uri)
 
1358
{
 
1359
  gimp_object_take_name (GIMP_OBJECT (image), uri);
1274
1360
}
1275
1361
 
1276
1362
const gchar *
1277
 
gimp_image_get_uri (const GimpImage *gimage)
 
1363
gimp_image_get_uri (const GimpImage *image)
1278
1364
{
1279
1365
  const gchar *uri;
1280
1366
 
1281
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), NULL);
 
1367
  g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
1282
1368
 
1283
 
  uri = gimp_object_get_name (GIMP_OBJECT (gimage));
 
1369
  uri = gimp_object_get_name (GIMP_OBJECT (image));
1284
1370
 
1285
1371
  return uri ? uri : _("Untitled");
1286
1372
}
1287
1373
 
1288
1374
void
1289
 
gimp_image_set_filename (GimpImage   *gimage,
 
1375
gimp_image_set_filename (GimpImage   *image,
1290
1376
                         const gchar *filename)
1291
1377
{
1292
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
 
1378
  g_return_if_fail (GIMP_IS_IMAGE (image));
1293
1379
 
1294
1380
  if (filename && strlen (filename))
1295
1381
    {
1296
 
      gchar *uri;
1297
 
 
1298
 
      uri = file_utils_filename_to_uri (gimage->gimp->load_procs, filename,
1299
 
                                        NULL);
1300
 
 
1301
 
      gimp_image_set_uri (gimage, uri);
1302
 
 
1303
 
      g_free (uri);
 
1382
      gimp_image_take_uri (image,
 
1383
                           file_utils_filename_to_uri (image->gimp,
 
1384
                                                       filename,
 
1385
                                                       NULL));
1304
1386
    }
1305
1387
  else
1306
1388
    {
1307
 
      gimp_image_set_uri (gimage, NULL);
 
1389
      gimp_image_set_uri (image, NULL);
1308
1390
    }
1309
1391
}
1310
1392
 
1311
1393
gchar *
1312
 
gimp_image_get_filename (const GimpImage *gimage)
 
1394
gimp_image_get_filename (const GimpImage *image)
1313
1395
{
1314
1396
  const gchar *uri;
1315
1397
 
1316
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), NULL);
 
1398
  g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
1317
1399
 
1318
 
  uri = gimp_object_get_name (GIMP_OBJECT (gimage));
 
1400
  uri = gimp_object_get_name (GIMP_OBJECT (image));
1319
1401
 
1320
1402
  if (! uri)
1321
1403
    return NULL;
1324
1406
}
1325
1407
 
1326
1408
void
1327
 
gimp_image_set_save_proc (GimpImage     *gimage,
1328
 
                          PlugInProcDef *proc)
 
1409
gimp_image_set_save_proc (GimpImage           *image,
 
1410
                          GimpPlugInProcedure *proc)
1329
1411
{
1330
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
 
1412
  g_return_if_fail (GIMP_IS_IMAGE (image));
1331
1413
 
1332
 
  gimage->save_proc = proc;
 
1414
  image->save_proc = proc;
1333
1415
}
1334
1416
 
1335
 
PlugInProcDef *
1336
 
gimp_image_get_save_proc (const GimpImage *gimage)
 
1417
GimpPlugInProcedure *
 
1418
gimp_image_get_save_proc (const GimpImage *image)
1337
1419
{
1338
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), NULL);
 
1420
  g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
1339
1421
 
1340
 
  return gimage->save_proc;
 
1422
  return image->save_proc;
1341
1423
}
1342
1424
 
1343
1425
void
1344
 
gimp_image_set_resolution (GimpImage *gimage,
 
1426
gimp_image_set_resolution (GimpImage *image,
1345
1427
                           gdouble    xresolution,
1346
1428
                           gdouble    yresolution)
1347
1429
{
1348
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
 
1430
  g_return_if_fail (GIMP_IS_IMAGE (image));
1349
1431
 
1350
1432
  /* don't allow to set the resolution out of bounds */
1351
1433
  if (xresolution < GIMP_MIN_RESOLUTION || xresolution > GIMP_MAX_RESOLUTION ||
1352
1434
      yresolution < GIMP_MIN_RESOLUTION || yresolution > GIMP_MAX_RESOLUTION)
1353
1435
    return;
1354
1436
 
1355
 
  if ((ABS (gimage->xresolution - xresolution) >= 1e-5) ||
1356
 
      (ABS (gimage->yresolution - yresolution) >= 1e-5))
 
1437
  if ((ABS (image->xresolution - xresolution) >= 1e-5) ||
 
1438
      (ABS (image->yresolution - yresolution) >= 1e-5))
1357
1439
    {
1358
 
      gimp_image_undo_push_image_resolution (gimage,
 
1440
      gimp_image_undo_push_image_resolution (image,
1359
1441
                                             _("Change Image Resolution"));
1360
1442
 
1361
 
      gimage->xresolution = xresolution;
1362
 
      gimage->yresolution = yresolution;
 
1443
      image->xresolution = xresolution;
 
1444
      image->yresolution = yresolution;
1363
1445
 
1364
 
      gimp_image_resolution_changed (gimage);
1365
 
      gimp_viewable_size_changed (GIMP_VIEWABLE (gimage));
 
1446
      gimp_image_resolution_changed (image);
 
1447
      gimp_viewable_size_changed (GIMP_VIEWABLE (image));
1366
1448
    }
1367
1449
}
1368
1450
 
1369
1451
void
1370
 
gimp_image_get_resolution (const GimpImage *gimage,
 
1452
gimp_image_get_resolution (const GimpImage *image,
1371
1453
                           gdouble         *xresolution,
1372
1454
                           gdouble         *yresolution)
1373
1455
{
1374
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
 
1456
  g_return_if_fail (GIMP_IS_IMAGE (image));
1375
1457
  g_return_if_fail (xresolution && yresolution);
1376
1458
 
1377
 
  *xresolution = gimage->xresolution;
1378
 
  *yresolution = gimage->yresolution;
 
1459
  *xresolution = image->xresolution;
 
1460
  *yresolution = image->yresolution;
1379
1461
}
1380
1462
 
1381
1463
void
1382
 
gimp_image_resolution_changed (GimpImage *gimage)
 
1464
gimp_image_resolution_changed (GimpImage *image)
1383
1465
{
1384
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
 
1466
  g_return_if_fail (GIMP_IS_IMAGE (image));
1385
1467
 
1386
 
  g_signal_emit (gimage, gimp_image_signals[RESOLUTION_CHANGED], 0);
 
1468
  g_signal_emit (image, gimp_image_signals[RESOLUTION_CHANGED], 0);
1387
1469
}
1388
1470
 
1389
1471
void
1390
 
gimp_image_set_unit (GimpImage *gimage,
 
1472
gimp_image_set_unit (GimpImage *image,
1391
1473
                     GimpUnit   unit)
1392
1474
{
1393
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
 
1475
  g_return_if_fail (GIMP_IS_IMAGE (image));
1394
1476
  g_return_if_fail (unit > GIMP_UNIT_PIXEL);
1395
1477
 
1396
 
  if (gimage->resolution_unit != unit)
 
1478
  if (image->resolution_unit != unit)
1397
1479
    {
1398
 
      gimp_image_undo_push_image_resolution (gimage,
 
1480
      gimp_image_undo_push_image_resolution (image,
1399
1481
                                             _("Change Image Unit"));
1400
1482
 
1401
 
      gimage->resolution_unit = unit;
1402
 
      gimp_image_unit_changed (gimage);
 
1483
      image->resolution_unit = unit;
 
1484
      gimp_image_unit_changed (image);
1403
1485
    }
1404
1486
}
1405
1487
 
1406
1488
GimpUnit
1407
 
gimp_image_get_unit (const GimpImage *gimage)
 
1489
gimp_image_get_unit (const GimpImage *image)
1408
1490
{
1409
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), GIMP_UNIT_INCH);
 
1491
  g_return_val_if_fail (GIMP_IS_IMAGE (image), GIMP_UNIT_INCH);
1410
1492
 
1411
 
  return gimage->resolution_unit;
 
1493
  return image->resolution_unit;
1412
1494
}
1413
1495
 
1414
1496
void
1415
 
gimp_image_unit_changed (GimpImage *gimage)
1416
 
{
1417
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
1418
 
 
1419
 
  g_signal_emit (gimage, gimp_image_signals[UNIT_CHANGED], 0);
1420
 
}
1421
 
 
1422
 
gint
1423
 
gimp_image_get_width (const GimpImage *gimage)
1424
 
{
1425
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), 0);
1426
 
 
1427
 
  return gimage->width;
1428
 
}
1429
 
 
1430
 
gint
1431
 
gimp_image_get_height (const GimpImage *gimage)
1432
 
{
1433
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), 0);
1434
 
 
1435
 
  return gimage->height;
 
1497
gimp_image_unit_changed (GimpImage *image)
 
1498
{
 
1499
  g_return_if_fail (GIMP_IS_IMAGE (image));
 
1500
 
 
1501
  g_signal_emit (image, gimp_image_signals[UNIT_CHANGED], 0);
 
1502
}
 
1503
 
 
1504
gint
 
1505
gimp_image_get_width (const GimpImage *image)
 
1506
{
 
1507
  g_return_val_if_fail (GIMP_IS_IMAGE (image), 0);
 
1508
 
 
1509
  return image->width;
 
1510
}
 
1511
 
 
1512
gint
 
1513
gimp_image_get_height (const GimpImage *image)
 
1514
{
 
1515
  g_return_val_if_fail (GIMP_IS_IMAGE (image), 0);
 
1516
 
 
1517
  return image->height;
1436
1518
}
1437
1519
 
1438
1520
gboolean
1439
 
gimp_image_has_alpha (const GimpImage *gimage)
 
1521
gimp_image_has_alpha (const GimpImage *image)
1440
1522
{
1441
1523
  GimpLayer *layer;
1442
1524
 
1443
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), TRUE);
1444
 
 
1445
 
  layer = (GimpLayer *) gimp_container_get_child_by_index (gimage->layers, 0);
1446
 
 
1447
 
  return ((gimp_container_num_children (gimage->layers) > 1) ||
 
1525
  g_return_val_if_fail (GIMP_IS_IMAGE (image), TRUE);
 
1526
 
 
1527
  layer = (GimpLayer *) gimp_container_get_child_by_index (image->layers, 0);
 
1528
 
 
1529
  return ((gimp_container_num_children (image->layers) > 1) ||
1448
1530
          (layer && gimp_drawable_has_alpha (GIMP_DRAWABLE (layer))));
1449
1531
}
1450
1532
 
1451
1533
gboolean
1452
 
gimp_image_is_empty (const GimpImage *gimage)
 
1534
gimp_image_is_empty (const GimpImage *image)
1453
1535
{
1454
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), TRUE);
 
1536
  g_return_val_if_fail (GIMP_IS_IMAGE (image), TRUE);
1455
1537
 
1456
 
  return (gimp_container_num_children (gimage->layers) == 0);
 
1538
  return gimp_container_is_empty (image->layers);
1457
1539
}
1458
1540
 
1459
1541
GimpLayer *
1460
 
gimp_image_floating_sel (const GimpImage *gimage)
 
1542
gimp_image_floating_sel (const GimpImage *image)
1461
1543
{
1462
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), NULL);
 
1544
  g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
1463
1545
 
1464
 
  return gimage->floating_sel;
 
1546
  return image->floating_sel;
1465
1547
}
1466
1548
 
1467
1549
void
1468
 
gimp_image_floating_selection_changed (GimpImage *gimage)
 
1550
gimp_image_floating_selection_changed (GimpImage *image)
1469
1551
{
1470
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
 
1552
  g_return_if_fail (GIMP_IS_IMAGE (image));
1471
1553
 
1472
 
  g_signal_emit (gimage, gimp_image_signals[FLOATING_SELECTION_CHANGED], 0);
 
1554
  g_signal_emit (image, gimp_image_signals[FLOATING_SELECTION_CHANGED], 0);
1473
1555
}
1474
1556
 
1475
1557
GimpChannel *
1476
 
gimp_image_get_mask (const GimpImage *gimage)
 
1558
gimp_image_get_mask (const GimpImage *image)
1477
1559
{
1478
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), NULL);
 
1560
  g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
1479
1561
 
1480
 
  return gimage->selection_mask;
 
1562
  return image->selection_mask;
1481
1563
}
1482
1564
 
1483
1565
void
1484
 
gimp_image_mask_changed (GimpImage *gimage)
 
1566
gimp_image_mask_changed (GimpImage *image)
1485
1567
{
1486
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
 
1568
  g_return_if_fail (GIMP_IS_IMAGE (image));
1487
1569
 
1488
 
  g_signal_emit (gimage, gimp_image_signals[MASK_CHANGED], 0);
 
1570
  g_signal_emit (image, gimp_image_signals[MASK_CHANGED], 0);
1489
1571
}
1490
1572
 
1491
1573
gint
1492
 
gimp_image_get_component_index (const GimpImage *gimage,
 
1574
gimp_image_get_component_index (const GimpImage *image,
1493
1575
                                GimpChannelType  channel)
1494
1576
{
1495
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), -1);
 
1577
  g_return_val_if_fail (GIMP_IS_IMAGE (image), -1);
1496
1578
 
1497
1579
  switch (channel)
1498
1580
    {
1502
1584
    case GIMP_GRAY_CHANNEL:    return GRAY_PIX;
1503
1585
    case GIMP_INDEXED_CHANNEL: return INDEXED_PIX;
1504
1586
    case GIMP_ALPHA_CHANNEL:
1505
 
      switch (gimp_image_base_type (gimage))
 
1587
      switch (gimp_image_base_type (image))
1506
1588
        {
1507
1589
        case GIMP_RGB:     return ALPHA_PIX;
1508
1590
        case GIMP_GRAY:    return ALPHA_G_PIX;
1514
1596
}
1515
1597
 
1516
1598
void
1517
 
gimp_image_set_component_active (GimpImage       *gimage,
 
1599
gimp_image_set_component_active (GimpImage       *image,
1518
1600
                                 GimpChannelType  channel,
1519
1601
                                 gboolean         active)
1520
1602
{
1521
1603
  gint index = -1;
1522
1604
 
1523
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
1524
 
 
1525
 
  index = gimp_image_get_component_index (gimage, channel);
1526
 
 
1527
 
  if (index != -1 && active != gimage->active[index])
 
1605
  g_return_if_fail (GIMP_IS_IMAGE (image));
 
1606
 
 
1607
  index = gimp_image_get_component_index (image, channel);
 
1608
 
 
1609
  if (index != -1 && active != image->active[index])
1528
1610
    {
1529
 
      gimage->active[index] = active ? TRUE : FALSE;
 
1611
      GimpLayer *floating_sel = gimp_image_floating_sel (image);
 
1612
 
 
1613
      if (floating_sel)
 
1614
        floating_sel_relax (floating_sel, FALSE);
 
1615
 
 
1616
      image->active[index] = active ? TRUE : FALSE;
 
1617
 
 
1618
      if (floating_sel)
 
1619
        {
 
1620
          floating_sel_rigor (floating_sel, FALSE);
 
1621
          gimp_drawable_update (GIMP_DRAWABLE (floating_sel),
 
1622
                                0, 0,
 
1623
                                GIMP_ITEM (floating_sel)->width,
 
1624
                                GIMP_ITEM (floating_sel)->height);
 
1625
        }
1530
1626
 
1531
1627
      /*  If there is an active channel and we mess with the components,
1532
1628
       *  the active channel gets unset...
1533
1629
       */
1534
 
      gimp_image_unset_active_channel (gimage);
 
1630
      gimp_image_unset_active_channel (image);
1535
1631
 
1536
 
      g_signal_emit (gimage,
 
1632
      g_signal_emit (image,
1537
1633
                     gimp_image_signals[COMPONENT_ACTIVE_CHANGED], 0,
1538
1634
                     channel);
1539
1635
    }
1540
1636
}
1541
1637
 
1542
1638
gboolean
1543
 
gimp_image_get_component_active (const GimpImage *gimage,
 
1639
gimp_image_get_component_active (const GimpImage *image,
1544
1640
                                 GimpChannelType  channel)
1545
1641
{
1546
1642
  gint index = -1;
1547
1643
 
1548
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
 
1644
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
1549
1645
 
1550
 
  index = gimp_image_get_component_index (gimage, channel);
 
1646
  index = gimp_image_get_component_index (image, channel);
1551
1647
 
1552
1648
  if (index != -1)
1553
 
    return gimage->active[index];
 
1649
    return image->active[index];
1554
1650
 
1555
1651
  return FALSE;
1556
1652
}
1557
1653
 
1558
1654
void
1559
 
gimp_image_set_component_visible (GimpImage       *gimage,
 
1655
gimp_image_set_component_visible (GimpImage       *image,
1560
1656
                                  GimpChannelType  channel,
1561
1657
                                  gboolean         visible)
1562
1658
{
1563
1659
  gint index = -1;
1564
1660
 
1565
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
1566
 
 
1567
 
  index = gimp_image_get_component_index (gimage, channel);
1568
 
 
1569
 
  if (index != -1 && visible != gimage->visible[index])
 
1661
  g_return_if_fail (GIMP_IS_IMAGE (image));
 
1662
 
 
1663
  index = gimp_image_get_component_index (image, channel);
 
1664
 
 
1665
  if (index != -1 && visible != image->visible[index])
1570
1666
    {
1571
 
      gimage->visible[index] = visible ? TRUE : FALSE;
 
1667
      image->visible[index] = visible ? TRUE : FALSE;
1572
1668
 
1573
 
      g_signal_emit (gimage,
 
1669
      g_signal_emit (image,
1574
1670
                     gimp_image_signals[COMPONENT_VISIBILITY_CHANGED], 0,
1575
1671
                     channel);
1576
1672
 
1577
 
      gimp_image_update (gimage, 0, 0, gimage->width, gimage->height);
1578
 
      gimp_viewable_invalidate_preview (GIMP_VIEWABLE (gimage));
 
1673
      gimp_image_update (image, 0, 0, image->width, image->height);
 
1674
      gimp_viewable_invalidate_preview (GIMP_VIEWABLE (image));
1579
1675
    }
1580
1676
}
1581
1677
 
1582
1678
gboolean
1583
 
gimp_image_get_component_visible (const GimpImage *gimage,
 
1679
gimp_image_get_component_visible (const GimpImage *image,
1584
1680
                                  GimpChannelType  channel)
1585
1681
{
1586
1682
  gint index = -1;
1587
1683
 
1588
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
 
1684
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
1589
1685
 
1590
 
  index = gimp_image_get_component_index (gimage, channel);
 
1686
  index = gimp_image_get_component_index (image, channel);
1591
1687
 
1592
1688
  if (index != -1)
1593
 
    return gimage->visible[index];
 
1689
    return image->visible[index];
1594
1690
 
1595
1691
  return FALSE;
1596
1692
}
1597
1693
 
1598
1694
void
1599
 
gimp_image_mode_changed (GimpImage *gimage)
1600
 
{
1601
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
1602
 
 
1603
 
  g_signal_emit (gimage, gimp_image_signals[MODE_CHANGED], 0);
1604
 
}
1605
 
 
1606
 
void
1607
 
gimp_image_alpha_changed (GimpImage *gimage)
1608
 
{
1609
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
1610
 
 
1611
 
  g_signal_emit (gimage, gimp_image_signals[ALPHA_CHANGED], 0);
1612
 
}
1613
 
 
1614
 
void
1615
 
gimp_image_update (GimpImage *gimage,
 
1695
gimp_image_mode_changed (GimpImage *image)
 
1696
{
 
1697
  g_return_if_fail (GIMP_IS_IMAGE (image));
 
1698
 
 
1699
  g_signal_emit (image, gimp_image_signals[MODE_CHANGED], 0);
 
1700
}
 
1701
 
 
1702
void
 
1703
gimp_image_alpha_changed (GimpImage *image)
 
1704
{
 
1705
  g_return_if_fail (GIMP_IS_IMAGE (image));
 
1706
 
 
1707
  g_signal_emit (image, gimp_image_signals[ALPHA_CHANGED], 0);
 
1708
}
 
1709
 
 
1710
void
 
1711
gimp_image_update (GimpImage *image,
1616
1712
                   gint       x,
1617
1713
                   gint       y,
1618
1714
                   gint       width,
1619
1715
                   gint       height)
1620
1716
{
1621
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
 
1717
  g_return_if_fail (GIMP_IS_IMAGE (image));
1622
1718
 
1623
 
  g_signal_emit (gimage, gimp_image_signals[UPDATE], 0,
 
1719
  g_signal_emit (image, gimp_image_signals[UPDATE], 0,
1624
1720
                 x, y, width, height);
1625
1721
}
1626
1722
 
1627
1723
void
1628
 
gimp_image_update_guide (GimpImage *gimage,
 
1724
gimp_image_update_guide (GimpImage *image,
1629
1725
                         GimpGuide *guide)
1630
1726
{
1631
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
 
1727
  g_return_if_fail (GIMP_IS_IMAGE (image));
1632
1728
  g_return_if_fail (guide != NULL);
1633
1729
 
1634
 
  g_signal_emit (gimage, gimp_image_signals[UPDATE_GUIDE], 0, guide);
1635
 
}
1636
 
 
1637
 
void
1638
 
gimp_image_colormap_changed (GimpImage *gimage,
 
1730
  g_signal_emit (image, gimp_image_signals[UPDATE_GUIDE], 0, guide);
 
1731
}
 
1732
 
 
1733
void
 
1734
gimp_image_update_sample_point (GimpImage       *image,
 
1735
                                GimpSamplePoint *sample_point)
 
1736
{
 
1737
  g_return_if_fail (GIMP_IS_IMAGE (image));
 
1738
  g_return_if_fail (sample_point != NULL);
 
1739
 
 
1740
  g_signal_emit (image, gimp_image_signals[UPDATE_SAMPLE_POINT], 0,
 
1741
                 sample_point);
 
1742
}
 
1743
 
 
1744
void
 
1745
gimp_image_sample_point_added (GimpImage       *image,
 
1746
                               GimpSamplePoint *sample_point)
 
1747
{
 
1748
  g_return_if_fail (GIMP_IS_IMAGE (image));
 
1749
  g_return_if_fail (sample_point != NULL);
 
1750
 
 
1751
  g_signal_emit (image, gimp_image_signals[SAMPLE_POINT_ADDED], 0,
 
1752
                 sample_point);
 
1753
}
 
1754
 
 
1755
void
 
1756
gimp_image_sample_point_removed (GimpImage       *image,
 
1757
                                 GimpSamplePoint *sample_point)
 
1758
{
 
1759
  g_return_if_fail (GIMP_IS_IMAGE (image));
 
1760
  g_return_if_fail (sample_point != NULL);
 
1761
 
 
1762
  g_signal_emit (image, gimp_image_signals[SAMPLE_POINT_REMOVED], 0,
 
1763
                 sample_point);
 
1764
}
 
1765
 
 
1766
void
 
1767
gimp_image_colormap_changed (GimpImage *image,
1639
1768
                             gint       color_index)
1640
1769
{
1641
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
1642
 
  g_return_if_fail (color_index >= -1 && color_index < gimage->num_cols);
 
1770
  g_return_if_fail (GIMP_IS_IMAGE (image));
 
1771
  g_return_if_fail (color_index >= -1 && color_index < image->num_cols);
1643
1772
 
1644
 
  g_signal_emit (gimage, gimp_image_signals[COLORMAP_CHANGED], 0,
 
1773
  g_signal_emit (image, gimp_image_signals[COLORMAP_CHANGED], 0,
1645
1774
                 color_index);
1646
1775
}
1647
1776
 
1648
1777
void
1649
 
gimp_image_selection_control (GimpImage            *gimage,
 
1778
gimp_image_selection_control (GimpImage            *image,
1650
1779
                              GimpSelectionControl  control)
1651
1780
{
1652
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
 
1781
  g_return_if_fail (GIMP_IS_IMAGE (image));
1653
1782
 
1654
 
  g_signal_emit (gimage, gimp_image_signals[SELECTION_CONTROL], 0, control);
 
1783
  g_signal_emit (image, gimp_image_signals[SELECTION_CONTROL], 0, control);
1655
1784
}
1656
1785
 
1657
1786
void
1658
 
gimp_image_qmask_changed (GimpImage *gimage)
 
1787
gimp_image_quick_mask_changed (GimpImage *image)
1659
1788
{
1660
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
 
1789
  g_return_if_fail (GIMP_IS_IMAGE (image));
1661
1790
 
1662
 
  g_signal_emit (gimage, gimp_image_signals[QMASK_CHANGED], 0);
 
1791
  g_signal_emit (image, gimp_image_signals[QUICK_MASK_CHANGED], 0);
1663
1792
}
1664
1793
 
1665
1794
 
1666
1795
/*  undo  */
1667
1796
 
1668
1797
gboolean
1669
 
gimp_image_undo_is_enabled (const GimpImage *gimage)
 
1798
gimp_image_undo_is_enabled (const GimpImage *image)
1670
1799
{
1671
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
 
1800
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
1672
1801
 
1673
 
  return (gimage->undo_freeze_count == 0);
 
1802
  return (image->undo_freeze_count == 0);
1674
1803
}
1675
1804
 
1676
1805
gboolean
1677
 
gimp_image_undo_enable (GimpImage *gimage)
 
1806
gimp_image_undo_enable (GimpImage *image)
1678
1807
{
1679
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
 
1808
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
1680
1809
 
1681
1810
  /*  Free all undo steps as they are now invalidated  */
1682
 
  gimp_image_undo_free (gimage);
1683
 
 
1684
 
  return gimp_image_undo_thaw (gimage);
1685
 
}
1686
 
 
1687
 
gboolean
1688
 
gimp_image_undo_disable (GimpImage *gimage)
1689
 
{
1690
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
1691
 
 
1692
 
  return gimp_image_undo_freeze (gimage);
1693
 
}
1694
 
 
1695
 
gboolean
1696
 
gimp_image_undo_freeze (GimpImage *gimage)
1697
 
{
1698
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
1699
 
 
1700
 
  gimage->undo_freeze_count++;
1701
 
 
1702
 
  if (gimage->undo_freeze_count == 1)
1703
 
    gimp_image_undo_event (gimage, GIMP_UNDO_EVENT_UNDO_FREEZE, NULL);
 
1811
  gimp_image_undo_free (image);
 
1812
 
 
1813
  return gimp_image_undo_thaw (image);
 
1814
}
 
1815
 
 
1816
gboolean
 
1817
gimp_image_undo_disable (GimpImage *image)
 
1818
{
 
1819
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
 
1820
 
 
1821
  return gimp_image_undo_freeze (image);
 
1822
}
 
1823
 
 
1824
gboolean
 
1825
gimp_image_undo_freeze (GimpImage *image)
 
1826
{
 
1827
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
 
1828
 
 
1829
  image->undo_freeze_count++;
 
1830
 
 
1831
  if (image->undo_freeze_count == 1)
 
1832
    gimp_image_undo_event (image, GIMP_UNDO_EVENT_UNDO_FREEZE, NULL);
1704
1833
 
1705
1834
  return TRUE;
1706
1835
}
1707
1836
 
1708
1837
gboolean
1709
 
gimp_image_undo_thaw (GimpImage *gimage)
 
1838
gimp_image_undo_thaw (GimpImage *image)
1710
1839
{
1711
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
1712
 
  g_return_val_if_fail (gimage->undo_freeze_count > 0, FALSE);
1713
 
 
1714
 
  gimage->undo_freeze_count--;
1715
 
 
1716
 
  if (gimage->undo_freeze_count == 0)
1717
 
    gimp_image_undo_event (gimage, GIMP_UNDO_EVENT_UNDO_THAW, NULL);
 
1840
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
 
1841
  g_return_val_if_fail (image->undo_freeze_count > 0, FALSE);
 
1842
 
 
1843
  image->undo_freeze_count--;
 
1844
 
 
1845
  if (image->undo_freeze_count == 0)
 
1846
    gimp_image_undo_event (image, GIMP_UNDO_EVENT_UNDO_THAW, NULL);
1718
1847
 
1719
1848
  return TRUE;
1720
1849
}
1721
1850
 
1722
1851
void
1723
 
gimp_image_undo_event (GimpImage     *gimage,
 
1852
gimp_image_undo_event (GimpImage     *image,
1724
1853
                       GimpUndoEvent  event,
1725
1854
                       GimpUndo      *undo)
1726
1855
{
1727
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
 
1856
  g_return_if_fail (GIMP_IS_IMAGE (image));
1728
1857
  g_return_if_fail (((event == GIMP_UNDO_EVENT_UNDO_FREE   ||
1729
1858
                      event == GIMP_UNDO_EVENT_UNDO_FREEZE ||
1730
1859
                      event == GIMP_UNDO_EVENT_UNDO_THAW) && undo == NULL) ||
1731
1860
                    GIMP_IS_UNDO (undo));
1732
1861
 
1733
 
  g_signal_emit (gimage, gimp_image_signals[UNDO_EVENT], 0, event, undo);
 
1862
  g_signal_emit (image, gimp_image_signals[UNDO_EVENT], 0, event, undo);
1734
1863
}
1735
1864
 
1736
1865
 
1737
 
/* NOTE about the gimage->dirty counter:
 
1866
/* NOTE about the image->dirty counter:
1738
1867
 *   If 0, then the image is clean (ie, copy on disk is the same as the one
1739
1868
 *      in memory).
1740
1869
 *   If positive, then that's the number of dirtying operations done
1765
1894
 */
1766
1895
 
1767
1896
gint
1768
 
gimp_image_dirty (GimpImage     *gimage,
 
1897
gimp_image_dirty (GimpImage     *image,
1769
1898
                  GimpDirtyMask  dirty_mask)
1770
1899
{
1771
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
1772
 
 
1773
 
  gimage->dirty++;
1774
 
 
1775
 
  if (! gimage->dirty_time)
1776
 
    gimage->dirty_time = time (NULL);
1777
 
 
1778
 
  g_signal_emit (gimage, gimp_image_signals[DIRTY], 0, dirty_mask);
1779
 
 
1780
 
  TRC (("dirty %d -> %d\n", gimage->dirty - 1, gimage->dirty));
1781
 
 
1782
 
  return gimage->dirty;
 
1900
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
 
1901
 
 
1902
  image->dirty++;
 
1903
 
 
1904
  if (! image->dirty_time)
 
1905
    image->dirty_time = time (NULL);
 
1906
 
 
1907
  g_signal_emit (image, gimp_image_signals[DIRTY], 0, dirty_mask);
 
1908
 
 
1909
  TRC (("dirty %d -> %d\n", image->dirty - 1, image->dirty));
 
1910
 
 
1911
  return image->dirty;
1783
1912
}
1784
1913
 
1785
1914
gint
1786
 
gimp_image_clean (GimpImage     *gimage,
 
1915
gimp_image_clean (GimpImage     *image,
1787
1916
                  GimpDirtyMask  dirty_mask)
1788
1917
{
1789
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
1790
 
 
1791
 
  gimage->dirty--;
1792
 
 
1793
 
  g_signal_emit (gimage, gimp_image_signals[CLEAN], 0, dirty_mask);
1794
 
 
1795
 
  TRC (("clean %d -> %d\n", gimage->dirty + 1, gimage->dirty));
1796
 
 
1797
 
  return gimage->dirty;
1798
 
}
1799
 
 
1800
 
void
1801
 
gimp_image_clean_all (GimpImage *gimage)
1802
 
{
1803
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
1804
 
 
1805
 
  gimage->dirty      = 0;
1806
 
  gimage->dirty_time = 0;
1807
 
 
1808
 
  g_signal_emit (gimage, gimp_image_signals[CLEAN], 0);
1809
 
}
1810
 
 
 
1918
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
 
1919
 
 
1920
  image->dirty--;
 
1921
 
 
1922
  g_signal_emit (image, gimp_image_signals[CLEAN], 0, dirty_mask);
 
1923
 
 
1924
  TRC (("clean %d -> %d\n", image->dirty + 1, image->dirty));
 
1925
 
 
1926
  return image->dirty;
 
1927
}
 
1928
 
 
1929
void
 
1930
gimp_image_clean_all (GimpImage *image)
 
1931
{
 
1932
  g_return_if_fail (GIMP_IS_IMAGE (image));
 
1933
 
 
1934
  image->dirty      = 0;
 
1935
  image->dirty_time = 0;
 
1936
 
 
1937
  g_signal_emit (image, gimp_image_signals[CLEAN], 0);
 
1938
}
 
1939
 
 
1940
/**
 
1941
 * gimp_image_saved:
 
1942
 * @image:
 
1943
 * @uri:
 
1944
 *
 
1945
 * Emits the "saved" signal, indicating that @image was saved to the
 
1946
 * location specified by @uri.
 
1947
 */
 
1948
void
 
1949
gimp_image_saved (GimpImage   *image,
 
1950
                  const gchar *uri)
 
1951
{
 
1952
  g_return_if_fail (GIMP_IS_IMAGE (image));
 
1953
  g_return_if_fail (uri != NULL);
 
1954
 
 
1955
  g_signal_emit (image, gimp_image_signals[SAVED], 0, uri);
 
1956
}
1811
1957
 
1812
1958
/*  flush this image's displays  */
1813
1959
 
1814
1960
void
1815
 
gimp_image_flush (GimpImage *gimage)
 
1961
gimp_image_flush (GimpImage *image)
1816
1962
{
1817
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
 
1963
  g_return_if_fail (GIMP_IS_IMAGE (image));
1818
1964
 
1819
 
  g_signal_emit (gimage, gimp_image_signals[FLUSH], 0);
 
1965
  g_signal_emit (image, gimp_image_signals[FLUSH], 0);
1820
1966
}
1821
1967
 
1822
1968
 
1823
1969
/*  color transforms / utilities  */
1824
1970
 
1825
1971
void
1826
 
gimp_image_get_foreground (const GimpImage    *gimage,
1827
 
                           const GimpDrawable *drawable,
1828
 
                           GimpContext        *context,
1829
 
                           guchar             *fg)
 
1972
gimp_image_get_foreground (const GimpImage *image,
 
1973
                           GimpContext     *context,
 
1974
                           GimpImageType    dest_type,
 
1975
                           guchar          *fg)
1830
1976
{
1831
1977
  GimpRGB  color;
1832
1978
  guchar   pfg[3];
1833
1979
 
1834
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
1835
 
  g_return_if_fail (! drawable || GIMP_IS_DRAWABLE (drawable));
 
1980
  g_return_if_fail (GIMP_IS_IMAGE (image));
1836
1981
  g_return_if_fail (GIMP_IS_CONTEXT (context));
1837
1982
  g_return_if_fail (fg != NULL);
1838
1983
 
1840
1985
 
1841
1986
  gimp_rgb_get_uchar (&color, &pfg[0], &pfg[1], &pfg[2]);
1842
1987
 
1843
 
  gimp_image_transform_color (gimage, drawable, fg, GIMP_RGB, pfg);
 
1988
  gimp_image_transform_color (image, dest_type, fg, GIMP_RGB, pfg);
1844
1989
}
1845
1990
 
1846
1991
void
1847
 
gimp_image_get_background (const GimpImage    *gimage,
1848
 
                           const GimpDrawable *drawable,
1849
 
                           GimpContext        *context,
1850
 
                           guchar             *bg)
 
1992
gimp_image_get_background (const GimpImage *image,
 
1993
                           GimpContext     *context,
 
1994
                           GimpImageType    dest_type,
 
1995
                           guchar          *bg)
1851
1996
{
1852
1997
  GimpRGB  color;
1853
1998
  guchar   pbg[3];
1854
1999
 
1855
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
1856
 
  g_return_if_fail (! drawable || GIMP_IS_DRAWABLE (drawable));
 
2000
  g_return_if_fail (GIMP_IS_IMAGE (image));
1857
2001
  g_return_if_fail (GIMP_IS_CONTEXT (context));
1858
2002
  g_return_if_fail (bg != NULL);
1859
2003
 
1861
2005
 
1862
2006
  gimp_rgb_get_uchar (&color, &pbg[0], &pbg[1], &pbg[2]);
1863
2007
 
1864
 
  gimp_image_transform_color (gimage, drawable, bg, GIMP_RGB, pbg);
 
2008
  gimp_image_transform_color (image, dest_type, bg, GIMP_RGB, pbg);
1865
2009
}
1866
2010
 
1867
2011
void
1868
 
gimp_image_get_color (const GimpImage *src_gimage,
 
2012
gimp_image_get_color (const GimpImage *src_image,
1869
2013
                      GimpImageType    src_type,
1870
2014
                      const guchar    *src,
1871
2015
                      guchar          *rgba)
1872
2016
{
1873
2017
  gboolean has_alpha = FALSE;
1874
2018
 
1875
 
  g_return_if_fail (GIMP_IS_IMAGE (src_gimage));
 
2019
  g_return_if_fail (GIMP_IS_IMAGE (src_image));
1876
2020
 
1877
2021
  switch (src_type)
1878
2022
    {
1904
2048
      {
1905
2049
        gint index = *src++ * 3;
1906
2050
 
1907
 
        *rgba++ = src_gimage->cmap[index++];
1908
 
        *rgba++ = src_gimage->cmap[index++];
1909
 
        *rgba++ = src_gimage->cmap[index++];
 
2051
        *rgba++ = src_image->cmap[index++];
 
2052
        *rgba++ = src_image->cmap[index++];
 
2053
        *rgba++ = src_image->cmap[index++];
1910
2054
      }
1911
2055
      break;
1912
2056
    }
1918
2062
}
1919
2063
 
1920
2064
void
1921
 
gimp_image_transform_rgb (const GimpImage    *dest_gimage,
1922
 
                          const GimpDrawable *dest_drawable,
 
2065
gimp_image_transform_rgb (const GimpImage    *dest_image,
 
2066
                          GimpImageType       dest_type,
1923
2067
                          const GimpRGB      *rgb,
1924
2068
                          guchar             *color)
1925
2069
{
1926
2070
  guchar col[3];
1927
2071
 
1928
 
  g_return_if_fail (GIMP_IS_IMAGE (dest_gimage));
1929
 
  g_return_if_fail (! dest_drawable || GIMP_IS_DRAWABLE (dest_drawable));
 
2072
  g_return_if_fail (GIMP_IS_IMAGE (dest_image));
1930
2073
  g_return_if_fail (rgb != NULL);
1931
2074
  g_return_if_fail (color != NULL);
1932
2075
 
1933
2076
  gimp_rgb_get_uchar (rgb, &col[0], &col[1], &col[2]);
1934
2077
 
1935
 
  gimp_image_transform_color (dest_gimage, dest_drawable, color, GIMP_RGB, col);
 
2078
  gimp_image_transform_color (dest_image, dest_type, color, GIMP_RGB, col);
1936
2079
}
1937
2080
 
1938
2081
void
1939
 
gimp_image_transform_color (const GimpImage    *dest_gimage,
1940
 
                            const GimpDrawable *dest_drawable,
 
2082
gimp_image_transform_color (const GimpImage    *dest_image,
 
2083
                            GimpImageType       dest_type,
1941
2084
                            guchar             *dest,
1942
2085
                            GimpImageBaseType   src_type,
1943
2086
                            const guchar       *src)
1944
2087
{
1945
 
  GimpImageType dest_type;
1946
 
 
1947
 
  g_return_if_fail (GIMP_IS_IMAGE (dest_gimage));
 
2088
  g_return_if_fail (GIMP_IS_IMAGE (dest_image));
1948
2089
  g_return_if_fail (src_type != GIMP_INDEXED);
1949
2090
 
1950
 
  dest_type = (dest_drawable ?
1951
 
               gimp_drawable_type (dest_drawable) :
1952
 
               gimp_image_base_type_with_alpha (dest_gimage));
1953
 
 
1954
2091
  switch (src_type)
1955
2092
    {
1956
2093
    case GIMP_RGB:
1967
2104
        case GIMP_GRAY_IMAGE:
1968
2105
        case GIMP_GRAYA_IMAGE:
1969
2106
          /*  NTSC conversion  */
1970
 
          *dest = GIMP_RGB_INTENSITY (src[RED_PIX],
 
2107
          *dest = GIMP_RGB_LUMINANCE (src[RED_PIX],
1971
2108
                                      src[GREEN_PIX],
1972
2109
                                      src[BLUE_PIX]) + 0.5;
1973
2110
          break;
1975
2112
        case GIMP_INDEXED_IMAGE:
1976
2113
        case GIMP_INDEXEDA_IMAGE:
1977
2114
          /*  Least squares method  */
1978
 
          *dest = gimp_image_color_hash_rgb_to_indexed (dest_gimage,
 
2115
          *dest = gimp_image_color_hash_rgb_to_indexed (dest_image,
1979
2116
                                                        src[RED_PIX],
1980
2117
                                                        src[GREEN_PIX],
1981
2118
                                                        src[BLUE_PIX]);
2003
2140
        case GIMP_INDEXED_IMAGE:
2004
2141
        case GIMP_INDEXEDA_IMAGE:
2005
2142
          /*  Least squares method  */
2006
 
          *dest = gimp_image_color_hash_rgb_to_indexed (dest_gimage,
 
2143
          *dest = gimp_image_color_hash_rgb_to_indexed (dest_image,
2007
2144
                                                        src[GRAY_PIX],
2008
2145
                                                        src[GRAY_PIX],
2009
2146
                                                        src[GRAY_PIX]);
2017
2154
}
2018
2155
 
2019
2156
TempBuf *
2020
 
gimp_image_transform_temp_buf (const GimpImage    *dest_image,
2021
 
                               const GimpDrawable *dest_drawable,
2022
 
                               TempBuf            *temp_buf,
2023
 
                               gboolean           *new_buf)
 
2157
gimp_image_transform_temp_buf (const GimpImage *dest_image,
 
2158
                               GimpImageType    dest_type,
 
2159
                               TempBuf         *temp_buf,
 
2160
                               gboolean        *new_buf)
2024
2161
{
2025
2162
  TempBuf       *ret_buf;
2026
2163
  GimpImageType  ret_buf_type;
2030
2167
  gint           out_bytes;
2031
2168
 
2032
2169
  g_return_val_if_fail (GIMP_IMAGE (dest_image), NULL);
2033
 
  g_return_val_if_fail (GIMP_DRAWABLE (dest_drawable), NULL);
2034
2170
  g_return_val_if_fail (temp_buf != NULL, NULL);
2035
2171
  g_return_val_if_fail (new_buf != NULL, NULL);
2036
2172
 
2040
2176
  is_rgb    = (in_bytes == 3 || in_bytes == 4);
2041
2177
 
2042
2178
  if (has_alpha)
2043
 
    ret_buf_type = gimp_drawable_type_with_alpha (dest_drawable);
 
2179
    ret_buf_type = GIMP_IMAGE_TYPE_WITH_ALPHA (dest_type);
2044
2180
  else
2045
 
    ret_buf_type = gimp_drawable_type_without_alpha (dest_drawable);
 
2181
    ret_buf_type = GIMP_IMAGE_TYPE_WITHOUT_ALPHA (dest_type);
2046
2182
 
2047
2183
  out_bytes = GIMP_IMAGE_TYPE_BYTES (ret_buf_type);
2048
2184
 
2049
2185
  /*  If the pattern doesn't match the image in terms of color type,
2050
2186
   *  transform it.  (ie  pattern is RGB, image is indexed)
2051
2187
   */
2052
 
  if (in_bytes != out_bytes || gimp_drawable_is_indexed (dest_drawable))
 
2188
  if (in_bytes != out_bytes || GIMP_IMAGE_TYPE_IS_INDEXED (dest_type))
2053
2189
    {
2054
2190
      guchar *src;
2055
2191
      guchar *dest;
2065
2201
 
2066
2202
      while (size--)
2067
2203
        {
2068
 
          gimp_image_transform_color (dest_image, dest_drawable, dest,
 
2204
          gimp_image_transform_color (dest_image, dest_type, dest,
2069
2205
                                      is_rgb ? GIMP_RGB : GIMP_GRAY, src);
2070
2206
 
2071
2207
          /* Handle alpha */
2091
2227
/*  shadow tiles  */
2092
2228
 
2093
2229
TileManager *
2094
 
gimp_image_shadow (GimpImage *gimage,
2095
 
                   gint       width,
2096
 
                   gint       height,
2097
 
                   gint       bpp)
 
2230
gimp_image_get_shadow_tiles (GimpImage *image,
 
2231
                             gint       width,
 
2232
                             gint       height,
 
2233
                             gint       bpp)
2098
2234
{
2099
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), NULL);
 
2235
  g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
2100
2236
 
2101
 
  if (gimage->shadow)
 
2237
  if (image->shadow)
2102
2238
    {
2103
 
      if ((width  != tile_manager_width  (gimage->shadow)) ||
2104
 
          (height != tile_manager_height (gimage->shadow)) ||
2105
 
          (bpp    != tile_manager_bpp    (gimage->shadow)))
 
2239
      if ((width  != tile_manager_width  (image->shadow)) ||
 
2240
          (height != tile_manager_height (image->shadow)) ||
 
2241
          (bpp    != tile_manager_bpp    (image->shadow)))
2106
2242
        {
2107
 
          gimp_image_free_shadow (gimage);
 
2243
          gimp_image_free_shadow_tiles (image);
2108
2244
        }
2109
2245
      else
2110
2246
        {
2111
 
          return gimage->shadow;
 
2247
          return image->shadow;
2112
2248
        }
2113
2249
    }
2114
2250
 
2115
 
  gimage->shadow = tile_manager_new (width, height, bpp);
 
2251
  image->shadow = tile_manager_new (width, height, bpp);
2116
2252
 
2117
 
  return gimage->shadow;
 
2253
  return image->shadow;
2118
2254
}
2119
2255
 
2120
2256
void
2121
 
gimp_image_free_shadow (GimpImage *gimage)
 
2257
gimp_image_free_shadow_tiles (GimpImage *image)
2122
2258
{
2123
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
 
2259
  g_return_if_fail (GIMP_IS_IMAGE (image));
2124
2260
 
2125
 
  if (gimage->shadow)
 
2261
  if (image->shadow)
2126
2262
    {
2127
 
      tile_manager_unref (gimage->shadow);
2128
 
      gimage->shadow = NULL;
 
2263
      tile_manager_unref (image->shadow);
 
2264
      image->shadow = NULL;
2129
2265
    }
2130
2266
}
2131
2267
 
2132
2268
 
2133
2269
/*  parasites  */
2134
2270
 
2135
 
GimpParasite *
2136
 
gimp_image_parasite_find (const GimpImage *gimage,
 
2271
const GimpParasite *
 
2272
gimp_image_parasite_find (const GimpImage *image,
2137
2273
                          const gchar     *name)
2138
2274
{
2139
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), NULL);
 
2275
  g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
2140
2276
 
2141
 
  return gimp_parasite_list_find (gimage->parasites, name);
 
2277
  return gimp_parasite_list_find (image->parasites, name);
2142
2278
}
2143
2279
 
2144
2280
static void
2150
2286
}
2151
2287
 
2152
2288
gchar **
2153
 
gimp_image_parasite_list (const GimpImage *gimage,
 
2289
gimp_image_parasite_list (const GimpImage *image,
2154
2290
                          gint            *count)
2155
2291
{
2156
2292
  gchar **list;
2157
2293
  gchar **cur;
2158
2294
 
2159
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), NULL);
 
2295
  g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
2160
2296
 
2161
 
  *count = gimp_parasite_list_length (gimage->parasites);
 
2297
  *count = gimp_parasite_list_length (image->parasites);
2162
2298
  cur = list = g_new (gchar*, *count);
2163
2299
 
2164
 
  gimp_parasite_list_foreach (gimage->parasites, (GHFunc) list_func, &cur);
 
2300
  gimp_parasite_list_foreach (image->parasites, (GHFunc) list_func, &cur);
2165
2301
 
2166
2302
  return list;
2167
2303
}
2168
2304
 
2169
2305
void
2170
 
gimp_image_parasite_attach (GimpImage    *gimage,
2171
 
                            GimpParasite *parasite)
 
2306
gimp_image_parasite_attach (GimpImage          *image,
 
2307
                            const GimpParasite *parasite)
2172
2308
{
2173
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage) && parasite != NULL);
 
2309
  GimpParasite *copy;
 
2310
 
 
2311
  g_return_if_fail (GIMP_IS_IMAGE (image));
 
2312
  g_return_if_fail (parasite != NULL);
 
2313
 
 
2314
  /*  make a temp copy of the struct because
 
2315
   *  gimp_parasite_shift_parent() changes it
 
2316
   */
 
2317
  copy = g_memdup (parasite, sizeof (GimpParasite));
2174
2318
 
2175
2319
  /* only set the dirty bit manually if we can be saved and the new
2176
2320
     parasite differs from the current one and we aren't undoable */
2177
 
  if (gimp_parasite_is_undoable (parasite))
2178
 
    gimp_image_undo_push_image_parasite (gimage,
 
2321
  if (gimp_parasite_is_undoable (copy))
 
2322
    gimp_image_undo_push_image_parasite (image,
2179
2323
                                         _("Attach Parasite to Image"),
2180
 
                                         parasite);
 
2324
                                         copy);
2181
2325
 
2182
2326
  /*  We used to push an cantundo on te stack here. This made the undo stack
2183
2327
      unusable (NULL on the stack) and prevented people from undoing after a
2186
2330
      undoable but does not block the undo system.   --Sven
2187
2331
   */
2188
2332
 
2189
 
  gimp_parasite_list_add (gimage->parasites, parasite);
 
2333
  gimp_parasite_list_add (image->parasites, copy);
2190
2334
 
2191
 
  if (gimp_parasite_has_flag (parasite, GIMP_PARASITE_ATTACH_PARENT))
 
2335
  if (gimp_parasite_has_flag (copy, GIMP_PARASITE_ATTACH_PARENT))
2192
2336
    {
2193
 
      gimp_parasite_shift_parent (parasite);
2194
 
      gimp_parasite_attach (gimage->gimp, parasite);
 
2337
      gimp_parasite_shift_parent (copy);
 
2338
      gimp_parasite_attach (image->gimp, copy);
2195
2339
    }
 
2340
 
 
2341
  g_free (copy);
 
2342
 
 
2343
  g_signal_emit (image, gimp_image_signals[PARASITE_ATTACHED], 0,
 
2344
                 parasite->name);
2196
2345
}
2197
2346
 
2198
2347
void
2199
 
gimp_image_parasite_detach (GimpImage   *gimage,
2200
 
                            const gchar *parasite)
 
2348
gimp_image_parasite_detach (GimpImage   *image,
 
2349
                            const gchar *name)
2201
2350
{
2202
 
  GimpParasite *p;
2203
 
 
2204
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
2205
 
  g_return_if_fail (parasite != NULL);
2206
 
 
2207
 
  if (!(p = gimp_parasite_list_find (gimage->parasites, parasite)))
 
2351
  const GimpParasite *parasite;
 
2352
 
 
2353
  g_return_if_fail (GIMP_IS_IMAGE (image));
 
2354
  g_return_if_fail (name != NULL);
 
2355
 
 
2356
  if (! (parasite = gimp_parasite_list_find (image->parasites, name)))
2208
2357
    return;
2209
2358
 
2210
 
  if (gimp_parasite_is_undoable (p))
2211
 
    gimp_image_undo_push_image_parasite_remove (gimage,
 
2359
  if (gimp_parasite_is_undoable (parasite))
 
2360
    gimp_image_undo_push_image_parasite_remove (image,
2212
2361
                                                _("Remove Parasite from Image"),
2213
 
                                                gimp_parasite_name (p));
2214
 
 
2215
 
  gimp_parasite_list_remove (gimage->parasites, parasite);
 
2362
                                                name);
 
2363
 
 
2364
  gimp_parasite_list_remove (image->parasites, name);
 
2365
 
 
2366
  g_signal_emit (image, gimp_image_signals[PARASITE_DETACHED], 0,
 
2367
                 name);
2216
2368
}
2217
2369
 
2218
2370
 
2219
2371
/*  tattoos  */
2220
2372
 
2221
2373
GimpTattoo
2222
 
gimp_image_get_new_tattoo (GimpImage *gimage)
 
2374
gimp_image_get_new_tattoo (GimpImage *image)
2223
2375
{
2224
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), 0);
2225
 
 
2226
 
  gimage->tattoo_state++;
2227
 
 
2228
 
  if (gimage->tattoo_state <= 0)
 
2376
  g_return_val_if_fail (GIMP_IS_IMAGE (image), 0);
 
2377
 
 
2378
  image->tattoo_state++;
 
2379
 
 
2380
  if (G_UNLIKELY (image->tattoo_state == 0))
2229
2381
    g_warning ("%s: Tattoo state corrupted (integer overflow).", G_STRFUNC);
2230
2382
 
2231
 
  return gimage->tattoo_state;
 
2383
  return image->tattoo_state;
2232
2384
}
2233
2385
 
2234
2386
GimpTattoo
2235
 
gimp_image_get_tattoo_state (GimpImage *gimage)
 
2387
gimp_image_get_tattoo_state (GimpImage *image)
2236
2388
{
2237
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), 0);
 
2389
  g_return_val_if_fail (GIMP_IS_IMAGE (image), 0);
2238
2390
 
2239
 
  return gimage->tattoo_state;
 
2391
  return image->tattoo_state;
2240
2392
}
2241
2393
 
2242
2394
gboolean
2243
 
gimp_image_set_tattoo_state (GimpImage  *gimage,
 
2395
gimp_image_set_tattoo_state (GimpImage  *image,
2244
2396
                             GimpTattoo  val)
2245
2397
{
2246
2398
  GList      *list;
2247
2399
  gboolean    retval = TRUE;
2248
2400
  GimpTattoo  maxval = 0;
2249
2401
 
2250
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
 
2402
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
2251
2403
 
2252
 
  /* Check that the layer tatoos don't overlap with channel or vector ones */
2253
 
  for (list = GIMP_LIST (gimage->layers)->list;
 
2404
  /* Check that the layer tattoos don't overlap with channel or vector ones */
 
2405
  for (list = GIMP_LIST (image->layers)->list;
2254
2406
       list;
2255
2407
       list = g_list_next (list))
2256
2408
    {
2260
2412
      if (ltattoo > maxval)
2261
2413
        maxval = ltattoo;
2262
2414
 
2263
 
      if (gimp_image_get_channel_by_tattoo (gimage, ltattoo))
 
2415
      if (gimp_image_get_channel_by_tattoo (image, ltattoo))
2264
2416
        retval = FALSE; /* Oopps duplicated tattoo in channel */
2265
2417
 
2266
 
      if (gimp_image_get_vectors_by_tattoo (gimage, ltattoo))
 
2418
      if (gimp_image_get_vectors_by_tattoo (image, ltattoo))
2267
2419
        retval = FALSE; /* Oopps duplicated tattoo in vectors */
2268
2420
    }
2269
2421
 
2270
2422
  /* Now check that the channel and vectors tattoos don't overlap */
2271
 
  for (list = GIMP_LIST (gimage->channels)->list;
 
2423
  for (list = GIMP_LIST (image->channels)->list;
2272
2424
       list;
2273
2425
       list = g_list_next (list))
2274
2426
    {
2278
2430
      if (ctattoo > maxval)
2279
2431
        maxval = ctattoo;
2280
2432
 
2281
 
      if (gimp_image_get_vectors_by_tattoo (gimage, ctattoo))
 
2433
      if (gimp_image_get_vectors_by_tattoo (image, ctattoo))
2282
2434
        retval = FALSE; /* Oopps duplicated tattoo in vectors */
2283
2435
    }
2284
2436
 
2285
2437
  /* Find the max tattoo value in the vectors */
2286
 
  for (list = GIMP_LIST (gimage->vectors)->list;
 
2438
  for (list = GIMP_LIST (image->vectors)->list;
2287
2439
       list;
2288
2440
       list = g_list_next (list))
2289
2441
    {
2299
2451
 
2300
2452
  /* Must check if the state is valid */
2301
2453
  if (retval == TRUE)
2302
 
    gimage->tattoo_state = val;
 
2454
    image->tattoo_state = val;
2303
2455
 
2304
2456
  return retval;
2305
2457
}
2308
2460
/*  layers / channels / vectors  */
2309
2461
 
2310
2462
GimpContainer *
2311
 
gimp_image_get_layers (const GimpImage *gimage)
2312
 
{
2313
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), NULL);
2314
 
 
2315
 
  return gimage->layers;
2316
 
}
2317
 
 
2318
 
GimpContainer *
2319
 
gimp_image_get_channels (const GimpImage *gimage)
2320
 
{
2321
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), NULL);
2322
 
 
2323
 
  return gimage->channels;
2324
 
}
2325
 
 
2326
 
GimpContainer *
2327
 
gimp_image_get_vectors (const GimpImage *gimage)
2328
 
{
2329
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), NULL);
2330
 
 
2331
 
  return gimage->vectors;
 
2463
gimp_image_get_layers (const GimpImage *image)
 
2464
{
 
2465
  g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
 
2466
 
 
2467
  return image->layers;
 
2468
}
 
2469
 
 
2470
GimpContainer *
 
2471
gimp_image_get_channels (const GimpImage *image)
 
2472
{
 
2473
  g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
 
2474
 
 
2475
  return image->channels;
 
2476
}
 
2477
 
 
2478
GimpContainer *
 
2479
gimp_image_get_vectors (const GimpImage *image)
 
2480
{
 
2481
  g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
 
2482
 
 
2483
  return image->vectors;
2332
2484
}
2333
2485
 
2334
2486
GimpDrawable *
2335
 
gimp_image_active_drawable (const GimpImage *gimage)
 
2487
gimp_image_active_drawable (const GimpImage *image)
2336
2488
{
2337
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), NULL);
 
2489
  g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
2338
2490
 
2339
2491
  /*  If there is an active channel (a saved selection, etc.),
2340
2492
   *  we ignore the active layer
2341
2493
   */
2342
 
  if (gimage->active_channel)
 
2494
  if (image->active_channel)
2343
2495
    {
2344
 
      return GIMP_DRAWABLE (gimage->active_channel);
 
2496
      return GIMP_DRAWABLE (image->active_channel);
2345
2497
    }
2346
 
  else if (gimage->active_layer)
 
2498
  else if (image->active_layer)
2347
2499
    {
2348
 
      GimpLayer *layer = gimage->active_layer;
 
2500
      GimpLayer *layer = image->active_layer;
2349
2501
 
2350
2502
      if (layer->mask && layer->mask->edit_mask)
2351
2503
        return GIMP_DRAWABLE (layer->mask);
2357
2509
}
2358
2510
 
2359
2511
GimpLayer *
2360
 
gimp_image_get_active_layer (const GimpImage *gimage)
 
2512
gimp_image_get_active_layer (const GimpImage *image)
2361
2513
{
2362
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), NULL);
 
2514
  g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
2363
2515
 
2364
 
  return gimage->active_layer;
 
2516
  return image->active_layer;
2365
2517
}
2366
2518
 
2367
2519
GimpChannel *
2368
 
gimp_image_get_active_channel (const GimpImage *gimage)
 
2520
gimp_image_get_active_channel (const GimpImage *image)
2369
2521
{
2370
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), NULL);
 
2522
  g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
2371
2523
 
2372
 
  return gimage->active_channel;
 
2524
  return image->active_channel;
2373
2525
}
2374
2526
 
2375
2527
GimpVectors *
2376
 
gimp_image_get_active_vectors (const GimpImage *gimage)
 
2528
gimp_image_get_active_vectors (const GimpImage *image)
2377
2529
{
2378
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), NULL);
 
2530
  g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
2379
2531
 
2380
 
  return gimage->active_vectors;
 
2532
  return image->active_vectors;
2381
2533
}
2382
2534
 
2383
2535
GimpLayer *
2384
 
gimp_image_set_active_layer (GimpImage *gimage,
 
2536
gimp_image_set_active_layer (GimpImage *image,
2385
2537
                             GimpLayer *layer)
2386
2538
{
2387
2539
  GimpLayer *floating_sel;
2388
2540
 
2389
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), NULL);
 
2541
  g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
2390
2542
  g_return_val_if_fail (layer == NULL || GIMP_IS_LAYER (layer), NULL);
2391
2543
  g_return_val_if_fail (layer == NULL ||
2392
 
                        gimp_container_have (gimage->layers,
 
2544
                        gimp_container_have (image->layers,
2393
2545
                                             GIMP_OBJECT (layer)), NULL);
2394
2546
 
2395
 
  floating_sel = gimp_image_floating_sel (gimage);
 
2547
  floating_sel = gimp_image_floating_sel (image);
2396
2548
 
2397
2549
  /*  Make sure the floating_sel always is the active layer  */
2398
2550
  if (floating_sel && layer != floating_sel)
2399
2551
    return floating_sel;
2400
2552
 
2401
 
  if (layer != gimage->active_layer)
 
2553
  if (layer != image->active_layer)
2402
2554
    {
2403
2555
      if (layer)
2404
2556
        {
2405
2557
          /*  Configure the layer stack to reflect this change  */
2406
 
          gimage->layer_stack = g_slist_remove (gimage->layer_stack, layer);
2407
 
          gimage->layer_stack = g_slist_prepend (gimage->layer_stack, layer);
 
2558
          image->layer_stack = g_slist_remove (image->layer_stack, layer);
 
2559
          image->layer_stack = g_slist_prepend (image->layer_stack, layer);
2408
2560
        }
2409
2561
 
2410
2562
      /*  Don't cache selection info for the previous active layer  */
2411
 
      if (gimage->active_layer)
2412
 
        gimp_drawable_invalidate_boundary (GIMP_DRAWABLE (gimage->active_layer));
2413
 
 
2414
 
      gimage->active_layer = layer;
2415
 
 
2416
 
      g_signal_emit (gimage, gimp_image_signals[ACTIVE_LAYER_CHANGED], 0);
2417
 
 
2418
 
      if (layer && gimage->active_channel)
2419
 
        gimp_image_set_active_channel (gimage, NULL);
 
2563
      if (image->active_layer)
 
2564
        gimp_drawable_invalidate_boundary (GIMP_DRAWABLE (image->active_layer));
 
2565
 
 
2566
      image->active_layer = layer;
 
2567
 
 
2568
      g_signal_emit (image, gimp_image_signals[ACTIVE_LAYER_CHANGED], 0);
 
2569
 
 
2570
      if (layer && image->active_channel)
 
2571
        gimp_image_set_active_channel (image, NULL);
2420
2572
    }
2421
2573
 
2422
 
  return gimage->active_layer;
 
2574
  return image->active_layer;
2423
2575
}
2424
2576
 
2425
2577
GimpChannel *
2426
 
gimp_image_set_active_channel (GimpImage   *gimage,
 
2578
gimp_image_set_active_channel (GimpImage   *image,
2427
2579
                               GimpChannel *channel)
2428
2580
{
2429
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), NULL);
 
2581
  g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
2430
2582
  g_return_val_if_fail (channel == NULL || GIMP_IS_CHANNEL (channel), NULL);
2431
2583
  g_return_val_if_fail (channel == NULL ||
2432
 
                        gimp_container_have (gimage->channels,
 
2584
                        gimp_container_have (image->channels,
2433
2585
                                             GIMP_OBJECT (channel)), NULL);
2434
2586
 
2435
2587
  /*  Not if there is a floating selection  */
2436
 
  if (channel && gimp_image_floating_sel (gimage))
 
2588
  if (channel && gimp_image_floating_sel (image))
2437
2589
    return NULL;
2438
2590
 
2439
 
  if (channel != gimage->active_channel)
 
2591
  if (channel != image->active_channel)
2440
2592
    {
2441
 
      gimage->active_channel = channel;
2442
 
 
2443
 
      g_signal_emit (gimage, gimp_image_signals[ACTIVE_CHANNEL_CHANGED], 0);
2444
 
 
2445
 
      if (channel && gimage->active_layer)
2446
 
        gimp_image_set_active_layer (gimage, NULL);
 
2593
      image->active_channel = channel;
 
2594
 
 
2595
      g_signal_emit (image, gimp_image_signals[ACTIVE_CHANNEL_CHANGED], 0);
 
2596
 
 
2597
      if (channel && image->active_layer)
 
2598
        gimp_image_set_active_layer (image, NULL);
2447
2599
    }
2448
2600
 
2449
 
  return gimage->active_channel;
 
2601
  return image->active_channel;
2450
2602
}
2451
2603
 
2452
2604
GimpChannel *
2453
 
gimp_image_unset_active_channel (GimpImage *gimage)
 
2605
gimp_image_unset_active_channel (GimpImage *image)
2454
2606
{
2455
2607
  GimpChannel *channel;
2456
2608
 
2457
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), NULL);
 
2609
  g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
2458
2610
 
2459
 
  channel = gimp_image_get_active_channel (gimage);
 
2611
  channel = gimp_image_get_active_channel (image);
2460
2612
 
2461
2613
  if (channel)
2462
2614
    {
2463
 
      gimp_image_set_active_channel (gimage, NULL);
 
2615
      gimp_image_set_active_channel (image, NULL);
2464
2616
 
2465
 
      if (gimage->layer_stack)
2466
 
        gimp_image_set_active_layer (gimage, gimage->layer_stack->data);
 
2617
      if (image->layer_stack)
 
2618
        gimp_image_set_active_layer (image, image->layer_stack->data);
2467
2619
    }
2468
2620
 
2469
2621
  return channel;
2470
2622
}
2471
2623
 
2472
2624
GimpVectors *
2473
 
gimp_image_set_active_vectors (GimpImage   *gimage,
 
2625
gimp_image_set_active_vectors (GimpImage   *image,
2474
2626
                               GimpVectors *vectors)
2475
2627
{
2476
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), NULL);
 
2628
  g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
2477
2629
  g_return_val_if_fail (vectors == NULL || GIMP_IS_VECTORS (vectors), NULL);
2478
2630
  g_return_val_if_fail (vectors == NULL ||
2479
 
                        gimp_container_have (gimage->vectors,
 
2631
                        gimp_container_have (image->vectors,
2480
2632
                                             GIMP_OBJECT (vectors)), NULL);
2481
2633
 
2482
 
  if (vectors != gimage->active_vectors)
 
2634
  if (vectors != image->active_vectors)
2483
2635
    {
2484
 
      gimage->active_vectors = vectors;
 
2636
      image->active_vectors = vectors;
2485
2637
 
2486
 
      g_signal_emit (gimage, gimp_image_signals[ACTIVE_VECTORS_CHANGED], 0);
 
2638
      g_signal_emit (image, gimp_image_signals[ACTIVE_VECTORS_CHANGED], 0);
2487
2639
    }
2488
2640
 
2489
 
  return gimage->active_vectors;
2490
 
}
2491
 
 
2492
 
void
2493
 
gimp_image_active_layer_changed (GimpImage *gimage)
2494
 
{
2495
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
2496
 
 
2497
 
  g_signal_emit (gimage, gimp_image_signals[ACTIVE_LAYER_CHANGED], 0);
2498
 
}
2499
 
 
2500
 
void
2501
 
gimp_image_active_channel_changed (GimpImage *gimage)
2502
 
{
2503
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
2504
 
 
2505
 
  g_signal_emit (gimage, gimp_image_signals[ACTIVE_CHANNEL_CHANGED], 0);
2506
 
}
2507
 
 
2508
 
void
2509
 
gimp_image_active_vectors_changed (GimpImage *gimage)
2510
 
{
2511
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
2512
 
 
2513
 
  g_signal_emit (gimage, gimp_image_signals[ACTIVE_VECTORS_CHANGED], 0);
 
2641
  return image->active_vectors;
 
2642
}
 
2643
 
 
2644
void
 
2645
gimp_image_active_layer_changed (GimpImage *image)
 
2646
{
 
2647
  g_return_if_fail (GIMP_IS_IMAGE (image));
 
2648
 
 
2649
  g_signal_emit (image, gimp_image_signals[ACTIVE_LAYER_CHANGED], 0);
 
2650
}
 
2651
 
 
2652
void
 
2653
gimp_image_active_channel_changed (GimpImage *image)
 
2654
{
 
2655
  g_return_if_fail (GIMP_IS_IMAGE (image));
 
2656
 
 
2657
  g_signal_emit (image, gimp_image_signals[ACTIVE_CHANNEL_CHANGED], 0);
 
2658
}
 
2659
 
 
2660
void
 
2661
gimp_image_active_vectors_changed (GimpImage *image)
 
2662
{
 
2663
  g_return_if_fail (GIMP_IS_IMAGE (image));
 
2664
 
 
2665
  g_signal_emit (image, gimp_image_signals[ACTIVE_VECTORS_CHANGED], 0);
2514
2666
}
2515
2667
 
2516
2668
gint
2517
 
gimp_image_get_layer_index (const GimpImage   *gimage,
 
2669
gimp_image_get_layer_index (const GimpImage   *image,
2518
2670
                            const GimpLayer   *layer)
2519
2671
{
2520
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), -1);
 
2672
  g_return_val_if_fail (GIMP_IS_IMAGE (image), -1);
2521
2673
  g_return_val_if_fail (GIMP_IS_LAYER (layer), -1);
2522
2674
 
2523
 
  return gimp_container_get_child_index (gimage->layers,
 
2675
  return gimp_container_get_child_index (image->layers,
2524
2676
                                         GIMP_OBJECT (layer));
2525
2677
}
2526
2678
 
2527
2679
gint
2528
 
gimp_image_get_channel_index (const GimpImage   *gimage,
 
2680
gimp_image_get_channel_index (const GimpImage   *image,
2529
2681
                              const GimpChannel *channel)
2530
2682
{
2531
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), -1);
 
2683
  g_return_val_if_fail (GIMP_IS_IMAGE (image), -1);
2532
2684
  g_return_val_if_fail (GIMP_IS_CHANNEL (channel), -1);
2533
2685
 
2534
 
  return gimp_container_get_child_index (gimage->channels,
 
2686
  return gimp_container_get_child_index (image->channels,
2535
2687
                                         GIMP_OBJECT (channel));
2536
2688
}
2537
2689
 
2538
2690
gint
2539
 
gimp_image_get_vectors_index (const GimpImage   *gimage,
 
2691
gimp_image_get_vectors_index (const GimpImage   *image,
2540
2692
                              const GimpVectors *vectors)
2541
2693
{
2542
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), -1);
 
2694
  g_return_val_if_fail (GIMP_IS_IMAGE (image), -1);
2543
2695
  g_return_val_if_fail (GIMP_IS_VECTORS (vectors), -1);
2544
2696
 
2545
 
  return gimp_container_get_child_index (gimage->vectors,
 
2697
  return gimp_container_get_child_index (image->vectors,
2546
2698
                                         GIMP_OBJECT (vectors));
2547
2699
}
2548
2700
 
 
2701
static GimpItem *
 
2702
gimp_image_get_item_by_tattoo (GimpContainer *items,
 
2703
                               GimpTattoo     tattoo)
 
2704
{
 
2705
  GList *list;
 
2706
 
 
2707
  for (list = GIMP_LIST (items)->list; list; list = g_list_next (list))
 
2708
    {
 
2709
      GimpItem *item = list->data;
 
2710
 
 
2711
      if (gimp_item_get_tattoo (item) == tattoo)
 
2712
        return item;
 
2713
    }
 
2714
 
 
2715
  return NULL;
 
2716
}
 
2717
 
2549
2718
GimpLayer *
2550
 
gimp_image_get_layer_by_tattoo (const GimpImage *gimage,
 
2719
gimp_image_get_layer_by_tattoo (const GimpImage *image,
2551
2720
                                GimpTattoo       tattoo)
2552
2721
{
2553
 
  GList *list;
2554
 
 
2555
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), NULL);
2556
 
 
2557
 
  for (list = GIMP_LIST (gimage->layers)->list;
2558
 
       list;
2559
 
       list = g_list_next (list))
2560
 
    {
2561
 
      GimpLayer *layer = list->data;
2562
 
 
2563
 
      if (gimp_item_get_tattoo (GIMP_ITEM (layer)) == tattoo)
2564
 
        return layer;
2565
 
    }
2566
 
 
2567
 
  return NULL;
 
2722
  g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
 
2723
 
 
2724
  return GIMP_LAYER (gimp_image_get_item_by_tattoo (image->layers,
 
2725
                                                    tattoo));
2568
2726
}
2569
2727
 
2570
2728
GimpChannel *
2571
 
gimp_image_get_channel_by_tattoo (const GimpImage *gimage,
 
2729
gimp_image_get_channel_by_tattoo (const GimpImage *image,
2572
2730
                                  GimpTattoo       tattoo)
2573
2731
{
2574
 
  GList *list;
2575
 
 
2576
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), NULL);
2577
 
 
2578
 
  for (list = GIMP_LIST (gimage->channels)->list;
2579
 
       list;
2580
 
       list = g_list_next (list))
2581
 
    {
2582
 
      GimpChannel *channel = list->data;
2583
 
 
2584
 
      if (gimp_item_get_tattoo (GIMP_ITEM (channel)) == tattoo)
2585
 
        return channel;
2586
 
    }
2587
 
 
2588
 
  return NULL;
 
2732
  g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
 
2733
 
 
2734
  return GIMP_CHANNEL (gimp_image_get_item_by_tattoo (image->channels,
 
2735
                                                      tattoo));
2589
2736
}
2590
2737
 
2591
2738
GimpVectors *
2592
 
gimp_image_get_vectors_by_tattoo (const GimpImage *gimage,
 
2739
gimp_image_get_vectors_by_tattoo (const GimpImage *image,
2593
2740
                                  GimpTattoo       tattoo)
2594
2741
{
2595
 
  GList *list;
2596
 
 
2597
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), NULL);
2598
 
 
2599
 
  for (list = GIMP_LIST (gimage->vectors)->list;
2600
 
       list;
2601
 
       list = g_list_next (list))
2602
 
    {
2603
 
      GimpVectors *vectors = list->data;
2604
 
 
2605
 
      if (gimp_item_get_tattoo (GIMP_ITEM (vectors)) == tattoo)
2606
 
        return vectors;
2607
 
    }
2608
 
 
2609
 
  return NULL;
 
2742
  g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
 
2743
 
 
2744
  return GIMP_VECTORS (gimp_image_get_item_by_tattoo (image->vectors,
 
2745
                                                      tattoo));
2610
2746
}
2611
2747
 
2612
2748
GimpLayer *
2613
 
gimp_image_get_layer_by_name (const GimpImage *gimage,
 
2749
gimp_image_get_layer_by_name (const GimpImage *image,
2614
2750
                              const gchar     *name)
2615
2751
{
2616
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), NULL);
 
2752
  g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
2617
2753
 
2618
 
  return (GimpLayer *) gimp_container_get_child_by_name (gimage->layers,
2619
 
                                                         name);
 
2754
  return GIMP_LAYER (gimp_container_get_child_by_name (image->layers,
 
2755
                                                       name));
2620
2756
}
2621
2757
 
2622
2758
GimpChannel *
2623
 
gimp_image_get_channel_by_name (const GimpImage *gimage,
 
2759
gimp_image_get_channel_by_name (const GimpImage *image,
2624
2760
                                const gchar     *name)
2625
2761
{
2626
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), NULL);
 
2762
  g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
2627
2763
 
2628
 
  return (GimpChannel *) gimp_container_get_child_by_name (gimage->channels,
2629
 
                                                           name);
 
2764
  return GIMP_CHANNEL (gimp_container_get_child_by_name (image->channels,
 
2765
                                                         name));
2630
2766
}
2631
2767
 
2632
2768
GimpVectors *
2633
 
gimp_image_get_vectors_by_name (const GimpImage *gimage,
 
2769
gimp_image_get_vectors_by_name (const GimpImage *image,
2634
2770
                                const gchar     *name)
2635
2771
{
2636
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), NULL);
 
2772
  g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
2637
2773
 
2638
 
  return (GimpVectors *) gimp_container_get_child_by_name (gimage->vectors,
2639
 
                                                           name);
 
2774
  return GIMP_VECTORS (gimp_container_get_child_by_name (image->vectors,
 
2775
                                                         name));
2640
2776
}
2641
2777
 
2642
2778
gboolean
2643
 
gimp_image_add_layer (GimpImage *gimage,
 
2779
gimp_image_add_layer (GimpImage *image,
2644
2780
                      GimpLayer *layer,
2645
2781
                      gint       position)
2646
2782
{
2648
2784
  GimpLayer *floating_sel;
2649
2785
  gboolean   old_has_alpha;
2650
2786
 
2651
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
 
2787
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
2652
2788
  g_return_val_if_fail (GIMP_IS_LAYER (layer), FALSE);
2653
2789
 
2654
 
  if (GIMP_ITEM (layer)->gimage != NULL &&
2655
 
      GIMP_ITEM (layer)->gimage != gimage)
 
2790
  if (GIMP_ITEM (layer)->image != NULL &&
 
2791
      GIMP_ITEM (layer)->image != image)
2656
2792
    {
2657
2793
      g_warning ("%s: attempting to add layer to wrong image.", G_STRFUNC);
2658
2794
      return FALSE;
2659
2795
    }
2660
2796
 
2661
 
  if (gimp_container_have (gimage->layers, GIMP_OBJECT (layer)))
 
2797
  if (gimp_container_have (image->layers, GIMP_OBJECT (layer)))
2662
2798
    {
2663
2799
      g_warning ("%s: trying to add layer to image twice.", G_STRFUNC);
2664
2800
      return FALSE;
2665
2801
    }
2666
2802
 
2667
 
  floating_sel = gimp_image_floating_sel (gimage);
 
2803
  floating_sel = gimp_image_floating_sel (image);
2668
2804
 
2669
2805
  if (floating_sel && gimp_layer_is_floating_sel (layer))
2670
2806
    {
2673
2809
      return FALSE;
2674
2810
    }
2675
2811
 
2676
 
  active_layer = gimp_image_get_active_layer (gimage);
2677
 
 
2678
 
  old_has_alpha = gimp_image_has_alpha (gimage);
2679
 
 
2680
 
  gimp_image_undo_push_layer_add (gimage, _("Add Layer"),
2681
 
                                  layer, 0, active_layer);
2682
 
 
2683
 
  gimp_item_set_image (GIMP_ITEM (layer), gimage);
 
2812
  active_layer = gimp_image_get_active_layer (image);
 
2813
 
 
2814
  old_has_alpha = gimp_image_has_alpha (image);
 
2815
 
 
2816
  gimp_image_undo_push_layer_add (image, _("Add Layer"),
 
2817
                                  layer, active_layer);
 
2818
 
 
2819
  gimp_item_set_image (GIMP_ITEM (layer), image);
2684
2820
 
2685
2821
  if (layer->mask)
2686
 
    gimp_item_set_image (GIMP_ITEM (layer->mask), gimage);
 
2822
    gimp_item_set_image (GIMP_ITEM (layer->mask), image);
2687
2823
 
2688
2824
  /*  If the layer is a floating selection, set the ID  */
2689
2825
  if (gimp_layer_is_floating_sel (layer))
2690
 
    gimage->floating_sel = layer;
 
2826
    image->floating_sel = layer;
2691
2827
 
2692
2828
  /*  add the layer to the list at the specified position  */
2693
2829
  if (position == -1)
2694
2830
    {
2695
2831
      if (active_layer)
2696
 
        position = gimp_container_get_child_index (gimage->layers,
 
2832
        position = gimp_container_get_child_index (image->layers,
2697
2833
                                                   GIMP_OBJECT (active_layer));
2698
2834
      else
2699
2835
        position = 0;
2706
2842
    position = 1;
2707
2843
 
2708
2844
  /*  Don't add at a non-existing index  */
2709
 
  if (position > gimp_container_num_children (gimage->layers))
2710
 
    position = gimp_container_num_children (gimage->layers);
 
2845
  if (position > gimp_container_num_children (image->layers))
 
2846
    position = gimp_container_num_children (image->layers);
2711
2847
 
2712
 
  gimp_container_insert (gimage->layers, GIMP_OBJECT (layer), position);
2713
 
  gimp_item_sink (GIMP_ITEM (layer));
 
2848
  g_object_ref_sink (layer);
 
2849
  gimp_container_insert (image->layers, GIMP_OBJECT (layer), position);
 
2850
  g_object_unref (layer);
2714
2851
 
2715
2852
  /*  notify the layers dialog of the currently active layer  */
2716
 
  gimp_image_set_active_layer (gimage, layer);
 
2853
  gimp_image_set_active_layer (image, layer);
2717
2854
 
2718
 
  if (old_has_alpha != gimp_image_has_alpha (gimage))
2719
 
    gimp_image_alpha_changed (gimage);
 
2855
  if (old_has_alpha != gimp_image_has_alpha (image))
 
2856
    gimp_image_alpha_changed (image);
2720
2857
 
2721
2858
  if (gimp_layer_is_floating_sel (layer))
2722
 
    gimp_image_floating_selection_changed (gimage);
 
2859
    gimp_image_floating_selection_changed (image);
2723
2860
 
2724
2861
  return TRUE;
2725
2862
}
2726
2863
 
2727
2864
void
2728
 
gimp_image_remove_layer (GimpImage *gimage,
 
2865
gimp_image_remove_layer (GimpImage *image,
2729
2866
                         GimpLayer *layer)
2730
2867
{
2731
2868
  GimpLayer *active_layer;
2733
2870
  gboolean   old_has_alpha;
2734
2871
  gboolean   undo_group = FALSE;
2735
2872
 
2736
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
 
2873
  g_return_if_fail (GIMP_IS_IMAGE (image));
2737
2874
  g_return_if_fail (GIMP_IS_LAYER (layer));
2738
 
  g_return_if_fail (gimp_container_have (gimage->layers,
 
2875
  g_return_if_fail (gimp_container_have (image->layers,
2739
2876
                                         GIMP_OBJECT (layer)));
2740
2877
 
2741
2878
  if (gimp_drawable_has_floating_sel (GIMP_DRAWABLE (layer)))
2742
2879
    {
2743
 
      gimp_image_undo_group_start (gimage, GIMP_UNDO_GROUP_IMAGE_ITEM_REMOVE,
 
2880
      gimp_image_undo_group_start (image, GIMP_UNDO_GROUP_IMAGE_ITEM_REMOVE,
2744
2881
                                   _("Remove Layer"));
2745
2882
      undo_group = TRUE;
2746
2883
 
2747
 
      floating_sel_remove (gimp_image_floating_sel (gimage));
 
2884
      floating_sel_remove (gimp_image_floating_sel (image));
2748
2885
    }
2749
2886
 
2750
 
  active_layer = gimp_image_get_active_layer (gimage);
 
2887
  active_layer = gimp_image_get_active_layer (image);
2751
2888
 
2752
 
  index = gimp_container_get_child_index (gimage->layers,
 
2889
  index = gimp_container_get_child_index (image->layers,
2753
2890
                                          GIMP_OBJECT (layer));
2754
2891
 
2755
 
  old_has_alpha = gimp_image_has_alpha (gimage);
 
2892
  old_has_alpha = gimp_image_has_alpha (image);
2756
2893
 
2757
 
  gimp_image_undo_push_layer_remove (gimage, _("Remove Layer"),
 
2894
  gimp_image_undo_push_layer_remove (image, _("Remove Layer"),
2758
2895
                                     layer, index, active_layer);
2759
2896
 
2760
2897
  g_object_ref (layer);
2763
2900
  if (layer == active_layer)
2764
2901
    gimp_drawable_invalidate_boundary (GIMP_DRAWABLE (layer));
2765
2902
 
2766
 
  gimp_container_remove (gimage->layers, GIMP_OBJECT (layer));
2767
 
  gimage->layer_stack = g_slist_remove (gimage->layer_stack, layer);
 
2903
  gimp_container_remove (image->layers, GIMP_OBJECT (layer));
 
2904
  image->layer_stack = g_slist_remove (image->layer_stack, layer);
2768
2905
 
2769
 
  if (gimage->floating_sel == layer)
 
2906
  if (image->floating_sel == layer)
2770
2907
    {
2771
2908
      /*  If this was the floating selection, reset the fs pointer
2772
2909
       *  and activate the underlying drawable
2773
2910
       */
2774
 
      gimage->floating_sel = NULL;
 
2911
      image->floating_sel = NULL;
2775
2912
 
2776
2913
      floating_sel_activate_drawable (layer);
2777
2914
 
2778
 
      gimp_image_floating_selection_changed (gimage);
 
2915
      gimp_image_floating_selection_changed (image);
2779
2916
    }
2780
2917
  else if (layer == active_layer)
2781
2918
    {
2782
 
      if (gimage->layer_stack)
 
2919
      if (image->layer_stack)
2783
2920
        {
2784
 
          active_layer = gimage->layer_stack->data;
 
2921
          active_layer = image->layer_stack->data;
2785
2922
        }
2786
2923
      else
2787
2924
        {
2788
 
          gint n_children = gimp_container_num_children (gimage->layers);
 
2925
          gint n_children = gimp_container_num_children (image->layers);
2789
2926
 
2790
2927
          if (n_children > 0)
2791
2928
            {
2792
2929
              index = CLAMP (index, 0, n_children - 1);
2793
2930
 
2794
2931
              active_layer = (GimpLayer *)
2795
 
                gimp_container_get_child_by_index (gimage->layers, index);
 
2932
                gimp_container_get_child_by_index (image->layers, index);
2796
2933
            }
2797
2934
          else
2798
2935
            {
2800
2937
            }
2801
2938
        }
2802
2939
 
2803
 
      gimp_image_set_active_layer (gimage, active_layer);
 
2940
      gimp_image_set_active_layer (image, active_layer);
2804
2941
    }
2805
2942
 
2806
2943
  gimp_item_removed (GIMP_ITEM (layer));
2807
2944
 
2808
2945
  g_object_unref (layer);
2809
2946
 
2810
 
  if (old_has_alpha != gimp_image_has_alpha (gimage))
2811
 
    gimp_image_alpha_changed (gimage);
 
2947
  if (old_has_alpha != gimp_image_has_alpha (image))
 
2948
    gimp_image_alpha_changed (image);
2812
2949
 
2813
2950
  if (undo_group)
2814
 
    gimp_image_undo_group_end (gimage);
 
2951
    gimp_image_undo_group_end (image);
 
2952
}
 
2953
 
 
2954
void
 
2955
gimp_image_add_layers (GimpImage   *image,
 
2956
                       GList       *layers,
 
2957
                       gint         position,
 
2958
                       gint         x,
 
2959
                       gint         y,
 
2960
                       gint         width,
 
2961
                       gint         height,
 
2962
                       const gchar *undo_desc)
 
2963
{
 
2964
  GList *list;
 
2965
  gint   layers_x      = G_MAXINT;
 
2966
  gint   layers_y      = G_MAXINT;
 
2967
  gint   layers_width  = 0;
 
2968
  gint   layers_height = 0;
 
2969
  gint   offset_x;
 
2970
  gint   offset_y;
 
2971
 
 
2972
  g_return_if_fail (GIMP_IS_IMAGE (image));
 
2973
  g_return_if_fail (layers != NULL);
 
2974
 
 
2975
  if (position == -1)
 
2976
    {
 
2977
      GimpLayer *active_layer = gimp_image_get_active_layer (image);
 
2978
 
 
2979
      if (active_layer)
 
2980
        position = gimp_image_get_layer_index (image, active_layer);
 
2981
      else
 
2982
        position = 0;
 
2983
    }
 
2984
 
 
2985
  for (list = layers; list; list = g_list_next (list))
 
2986
    {
 
2987
      GimpItem *item = GIMP_ITEM (list->data);
 
2988
      gint      off_x, off_y;
 
2989
 
 
2990
      gimp_item_offsets (item, &off_x, &off_y);
 
2991
 
 
2992
      layers_x = MIN (layers_x, off_x);
 
2993
      layers_y = MIN (layers_y, off_y);
 
2994
 
 
2995
      layers_width  = MAX (layers_width,
 
2996
                           off_x + gimp_item_width (item)  - layers_x);
 
2997
      layers_height = MAX (layers_height,
 
2998
                           off_y + gimp_item_height (item) - layers_y);
 
2999
    }
 
3000
 
 
3001
  offset_x = x + (width  - layers_width)  / 2 - layers_x;
 
3002
  offset_y = y + (height - layers_height) / 2 - layers_y;
 
3003
 
 
3004
  gimp_image_undo_group_start (image, GIMP_UNDO_GROUP_LAYER_ADD, undo_desc);
 
3005
 
 
3006
  for (list = layers; list; list = g_list_next (list))
 
3007
    {
 
3008
      GimpItem *new_item = GIMP_ITEM (list->data);
 
3009
 
 
3010
      gimp_item_translate (new_item, offset_x, offset_y, FALSE);
 
3011
 
 
3012
      gimp_image_add_layer (image, GIMP_LAYER (new_item), position);
 
3013
      position++;
 
3014
    }
 
3015
 
 
3016
  gimp_image_undo_group_end (image);
2815
3017
}
2816
3018
 
2817
3019
gboolean
2818
 
gimp_image_raise_layer (GimpImage *gimage,
 
3020
gimp_image_raise_layer (GimpImage *image,
2819
3021
                        GimpLayer *layer)
2820
3022
{
2821
3023
  gint index;
2822
3024
 
2823
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
 
3025
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
2824
3026
  g_return_val_if_fail (GIMP_IS_LAYER (layer), FALSE);
2825
3027
 
2826
 
  index = gimp_container_get_child_index (gimage->layers,
 
3028
  index = gimp_container_get_child_index (image->layers,
2827
3029
                                          GIMP_OBJECT (layer));
2828
3030
 
2829
3031
  if (index == 0)
2832
3034
      return FALSE;
2833
3035
    }
2834
3036
 
2835
 
  if (! gimp_drawable_has_alpha (GIMP_DRAWABLE (layer)))
2836
 
    {
2837
 
      g_message (_("Cannot raise a layer without alpha."));
2838
 
      return FALSE;
2839
 
    }
2840
 
 
2841
 
  return gimp_image_position_layer (gimage, layer, index - 1,
 
3037
  return gimp_image_position_layer (image, layer, index - 1,
2842
3038
                                    TRUE, _("Raise Layer"));
2843
3039
}
2844
3040
 
2845
3041
gboolean
2846
 
gimp_image_lower_layer (GimpImage *gimage,
 
3042
gimp_image_lower_layer (GimpImage *image,
2847
3043
                        GimpLayer *layer)
2848
3044
{
2849
3045
  gint index;
2850
3046
 
2851
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
 
3047
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
2852
3048
  g_return_val_if_fail (GIMP_IS_LAYER (layer), FALSE);
2853
3049
 
2854
 
  index = gimp_container_get_child_index (gimage->layers,
 
3050
  index = gimp_container_get_child_index (image->layers,
2855
3051
                                          GIMP_OBJECT (layer));
2856
3052
 
2857
 
  if (index == gimp_container_num_children (gimage->layers) - 1)
 
3053
  if (index == gimp_container_num_children (image->layers) - 1)
2858
3054
    {
2859
3055
      g_message (_("Layer cannot be lowered more."));
2860
3056
      return FALSE;
2861
3057
    }
2862
3058
 
2863
 
  return gimp_image_position_layer (gimage, layer, index + 1,
 
3059
  return gimp_image_position_layer (image, layer, index + 1,
2864
3060
                                    TRUE, _("Lower Layer"));
2865
3061
}
2866
3062
 
2867
3063
gboolean
2868
 
gimp_image_raise_layer_to_top (GimpImage *gimage,
 
3064
gimp_image_raise_layer_to_top (GimpImage *image,
2869
3065
                               GimpLayer *layer)
2870
3066
{
2871
 
  gint index;
2872
 
 
2873
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
 
3067
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
2874
3068
  g_return_val_if_fail (GIMP_IS_LAYER (layer), FALSE);
2875
3069
 
2876
 
  index = gimp_container_get_child_index (gimage->layers,
2877
 
                                          GIMP_OBJECT (layer));
2878
 
 
2879
 
  if (index == 0)
2880
 
    {
2881
 
      g_message (_("Layer is already on top."));
2882
 
      return FALSE;
2883
 
    }
2884
 
 
2885
 
  if (! gimp_drawable_has_alpha (GIMP_DRAWABLE (layer)))
2886
 
    {
2887
 
      g_message (_("Cannot raise a layer without alpha."));
2888
 
      return FALSE;
2889
 
    }
2890
 
 
2891
 
  return gimp_image_position_layer (gimage, layer, 0,
 
3070
  return gimp_image_position_layer (image, layer, 0,
2892
3071
                                    TRUE, _("Raise Layer to Top"));
2893
3072
}
2894
3073
 
2895
3074
gboolean
2896
 
gimp_image_lower_layer_to_bottom (GimpImage *gimage,
 
3075
gimp_image_lower_layer_to_bottom (GimpImage *image,
2897
3076
                                  GimpLayer *layer)
2898
3077
{
2899
 
  gint index;
2900
3078
  gint length;
2901
3079
 
2902
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
 
3080
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
2903
3081
  g_return_val_if_fail (GIMP_IS_LAYER (layer), FALSE);
2904
3082
 
2905
 
  index = gimp_container_get_child_index (gimage->layers,
2906
 
                                          GIMP_OBJECT (layer));
2907
 
 
2908
 
  length = gimp_container_num_children (gimage->layers);
2909
 
 
2910
 
  if (index == length - 1)
2911
 
    {
2912
 
      g_message (_("Layer is already on the bottom."));
2913
 
      return FALSE;
2914
 
    }
2915
 
 
2916
 
  return gimp_image_position_layer (gimage, layer, length - 1,
 
3083
  length = gimp_container_num_children (image->layers);
 
3084
 
 
3085
  return gimp_image_position_layer (image, layer, length - 1,
2917
3086
                                    TRUE, _("Lower Layer to Bottom"));
2918
3087
}
2919
3088
 
2920
3089
gboolean
2921
 
gimp_image_position_layer (GimpImage   *gimage,
 
3090
gimp_image_position_layer (GimpImage   *image,
2922
3091
                           GimpLayer   *layer,
2923
3092
                           gint         new_index,
2924
3093
                           gboolean     push_undo,
2925
3094
                           const gchar *undo_desc)
2926
3095
{
2927
 
  gint index;
2928
 
  gint num_layers;
 
3096
  gint  index;
 
3097
  gint  num_layers;
2929
3098
 
2930
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
 
3099
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
2931
3100
  g_return_val_if_fail (GIMP_IS_LAYER (layer), FALSE);
2932
3101
 
2933
 
  index = gimp_container_get_child_index (gimage->layers,
2934
 
                                          GIMP_OBJECT (layer));
 
3102
  index = gimp_container_get_child_index (image->layers, GIMP_OBJECT (layer));
2935
3103
  if (index < 0)
2936
3104
    return FALSE;
2937
3105
 
2938
 
  num_layers = gimp_container_num_children (gimage->layers);
 
3106
  num_layers = gimp_container_num_children (image->layers);
2939
3107
 
2940
3108
  new_index = CLAMP (new_index, 0, num_layers - 1);
2941
3109
 
2942
3110
  if (new_index == index)
2943
3111
    return TRUE;
2944
3112
 
2945
 
  /* check if we want to move it below a bottom layer without alpha */
2946
 
  if (new_index == num_layers - 1)
2947
 
    {
2948
 
      GimpLayer *tmp;
2949
 
 
2950
 
      tmp = (GimpLayer *) gimp_container_get_child_by_index (gimage->layers,
2951
 
                                                             num_layers - 1);
2952
 
 
2953
 
      if (new_index == num_layers - 1 &&
2954
 
          ! gimp_drawable_has_alpha (GIMP_DRAWABLE (tmp)))
2955
 
        {
2956
 
          g_message (_("Layer '%s' has no alpha. Layer was placed above it."),
2957
 
                     GIMP_OBJECT (tmp)->name);
2958
 
          new_index--;
2959
 
        }
2960
 
    }
2961
 
 
2962
3113
  if (push_undo)
2963
 
    gimp_image_undo_push_layer_reposition (gimage, undo_desc, layer);
 
3114
    gimp_image_undo_push_layer_reposition (image, undo_desc, layer);
2964
3115
 
2965
 
  gimp_container_reorder (gimage->layers, GIMP_OBJECT (layer), new_index);
 
3116
  gimp_container_reorder (image->layers, GIMP_OBJECT (layer), new_index);
2966
3117
 
2967
3118
  if (gimp_item_get_visible (GIMP_ITEM (layer)))
2968
3119
    {
2970
3121
 
2971
3122
      gimp_item_offsets (GIMP_ITEM (layer), &off_x, &off_y);
2972
3123
 
2973
 
      gimp_image_update (gimage,
 
3124
      gimp_image_update (image,
2974
3125
                         off_x, off_y,
2975
3126
                         gimp_item_width  (GIMP_ITEM (layer)),
2976
3127
                         gimp_item_height (GIMP_ITEM (layer)));
2977
 
      gimp_viewable_invalidate_preview (GIMP_VIEWABLE (gimage));
 
3128
      gimp_viewable_invalidate_preview (GIMP_VIEWABLE (image));
2978
3129
    }
2979
3130
 
2980
3131
  return TRUE;
2981
3132
}
2982
3133
 
2983
3134
gboolean
2984
 
gimp_image_add_channel (GimpImage   *gimage,
 
3135
gimp_image_add_channel (GimpImage   *image,
2985
3136
                        GimpChannel *channel,
2986
3137
                        gint         position)
2987
3138
{
2988
3139
  GimpChannel *active_channel;
2989
3140
 
2990
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
 
3141
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
2991
3142
  g_return_val_if_fail (GIMP_IS_CHANNEL (channel), FALSE);
2992
3143
 
2993
 
  if (GIMP_ITEM (channel)->gimage != NULL &&
2994
 
      GIMP_ITEM (channel)->gimage != gimage)
 
3144
  if (GIMP_ITEM (channel)->image != NULL &&
 
3145
      GIMP_ITEM (channel)->image != image)
2995
3146
    {
2996
3147
      g_warning ("%s: attempting to add channel to wrong image.", G_STRFUNC);
2997
3148
      return FALSE;
2998
3149
    }
2999
3150
 
3000
 
  if (gimp_container_have (gimage->channels, GIMP_OBJECT (channel)))
 
3151
  if (gimp_container_have (image->channels, GIMP_OBJECT (channel)))
3001
3152
    {
3002
3153
      g_warning ("%s: trying to add channel to image twice.", G_STRFUNC);
3003
3154
      return FALSE;
3004
3155
    }
3005
3156
 
3006
 
  active_channel = gimp_image_get_active_channel (gimage);
3007
 
 
3008
 
  gimp_image_undo_push_channel_add (gimage, _("Add Channel"),
3009
 
                                    channel, 0, active_channel);
3010
 
 
3011
 
  gimp_item_set_image (GIMP_ITEM (channel), gimage);
 
3157
  active_channel = gimp_image_get_active_channel (image);
 
3158
 
 
3159
  gimp_image_undo_push_channel_add (image, _("Add Channel"),
 
3160
                                    channel, active_channel);
 
3161
 
 
3162
  gimp_item_set_image (GIMP_ITEM (channel), image);
3012
3163
 
3013
3164
  /*  add the layer to the list at the specified position  */
3014
3165
  if (position == -1)
3015
3166
    {
3016
3167
      if (active_channel)
3017
 
        position = gimp_container_get_child_index (gimage->channels,
 
3168
        position = gimp_container_get_child_index (image->channels,
3018
3169
                                                   GIMP_OBJECT (active_channel));
3019
3170
      else
3020
3171
        position = 0;
3021
3172
    }
3022
3173
 
3023
3174
  /*  Don't add at a non-existing index  */
3024
 
  if (position > gimp_container_num_children (gimage->channels))
3025
 
    position = gimp_container_num_children (gimage->channels);
3026
 
 
3027
 
  gimp_container_insert (gimage->channels, GIMP_OBJECT (channel), position);
3028
 
  gimp_item_sink (GIMP_ITEM (channel));
3029
 
 
3030
 
  /*  notify this gimage of the currently active channel  */
3031
 
  gimp_image_set_active_channel (gimage, channel);
 
3175
  if (position > gimp_container_num_children (image->channels))
 
3176
    position = gimp_container_num_children (image->channels);
 
3177
 
 
3178
  g_object_ref_sink (channel);
 
3179
  gimp_container_insert (image->channels, GIMP_OBJECT (channel), position);
 
3180
  g_object_unref (channel);
 
3181
 
 
3182
  /*  notify this image of the currently active channel  */
 
3183
  gimp_image_set_active_channel (image, channel);
3032
3184
 
3033
3185
  return TRUE;
3034
3186
}
3035
3187
 
3036
3188
void
3037
 
gimp_image_remove_channel (GimpImage   *gimage,
 
3189
gimp_image_remove_channel (GimpImage   *image,
3038
3190
                           GimpChannel *channel)
3039
3191
{
3040
3192
  GimpChannel *active_channel;
3041
3193
  gint         index;
3042
3194
  gboolean     undo_group = FALSE;
3043
3195
 
3044
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
 
3196
  g_return_if_fail (GIMP_IS_IMAGE (image));
3045
3197
  g_return_if_fail (GIMP_IS_CHANNEL (channel));
3046
 
  g_return_if_fail (gimp_container_have (gimage->channels,
 
3198
  g_return_if_fail (gimp_container_have (image->channels,
3047
3199
                                         GIMP_OBJECT (channel)));
3048
3200
 
3049
3201
  if (gimp_drawable_has_floating_sel (GIMP_DRAWABLE (channel)))
3050
3202
    {
3051
 
      gimp_image_undo_group_start (gimage, GIMP_UNDO_GROUP_IMAGE_ITEM_REMOVE,
 
3203
      gimp_image_undo_group_start (image, GIMP_UNDO_GROUP_IMAGE_ITEM_REMOVE,
3052
3204
                                   _("Remove Channel"));
3053
3205
      undo_group = TRUE;
3054
3206
 
3055
 
      floating_sel_remove (gimp_image_floating_sel (gimage));
 
3207
      floating_sel_remove (gimp_image_floating_sel (image));
3056
3208
    }
3057
3209
 
3058
 
  active_channel = gimp_image_get_active_channel (gimage);
 
3210
  active_channel = gimp_image_get_active_channel (image);
3059
3211
 
3060
 
  index = gimp_container_get_child_index (gimage->channels,
 
3212
  index = gimp_container_get_child_index (image->channels,
3061
3213
                                          GIMP_OBJECT (channel));
3062
3214
 
3063
 
  gimp_image_undo_push_channel_remove (gimage, _("Remove Channel"),
 
3215
  gimp_image_undo_push_channel_remove (image, _("Remove Channel"),
3064
3216
                                       channel, index, active_channel);
3065
3217
 
3066
3218
  g_object_ref (channel);
3067
3219
 
3068
 
  gimp_container_remove (gimage->channels, GIMP_OBJECT (channel));
 
3220
  gimp_container_remove (image->channels, GIMP_OBJECT (channel));
3069
3221
  gimp_item_removed (GIMP_ITEM (channel));
3070
3222
 
3071
3223
  if (channel == active_channel)
3072
3224
    {
3073
 
      gint n_children = gimp_container_num_children (gimage->channels);
 
3225
      gint n_children = gimp_container_num_children (image->channels);
3074
3226
 
3075
3227
      if (n_children > 0)
3076
3228
        {
3077
3229
          index = CLAMP (index, 0, n_children - 1);
3078
3230
 
3079
3231
          active_channel = (GimpChannel *)
3080
 
            gimp_container_get_child_by_index (gimage->channels, index);
 
3232
            gimp_container_get_child_by_index (image->channels, index);
3081
3233
 
3082
 
          gimp_image_set_active_channel (gimage, active_channel);
 
3234
          gimp_image_set_active_channel (image, active_channel);
3083
3235
        }
3084
3236
      else
3085
3237
        {
3086
 
          gimp_image_unset_active_channel (gimage);
 
3238
          gimp_image_unset_active_channel (image);
3087
3239
        }
3088
3240
    }
3089
3241
 
3090
3242
  g_object_unref (channel);
3091
3243
 
3092
3244
  if (undo_group)
3093
 
    gimp_image_undo_group_end (gimage);
 
3245
    gimp_image_undo_group_end (image);
3094
3246
}
3095
3247
 
3096
3248
gboolean
3097
 
gimp_image_raise_channel (GimpImage   *gimage,
 
3249
gimp_image_raise_channel (GimpImage   *image,
3098
3250
                          GimpChannel *channel)
3099
3251
{
3100
3252
  gint index;
3101
3253
 
3102
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
 
3254
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
3103
3255
  g_return_val_if_fail (GIMP_IS_CHANNEL (channel), FALSE);
3104
3256
 
3105
 
  index = gimp_container_get_child_index (gimage->channels,
 
3257
  index = gimp_container_get_child_index (image->channels,
3106
3258
                                          GIMP_OBJECT (channel));
3107
3259
 
3108
3260
  if (index == 0)
3111
3263
      return FALSE;
3112
3264
    }
3113
3265
 
3114
 
  return gimp_image_position_channel (gimage, channel, index - 1,
 
3266
  return gimp_image_position_channel (image, channel, index - 1,
3115
3267
                                      TRUE, _("Raise Channel"));
3116
3268
}
3117
3269
 
3118
3270
gboolean
3119
 
gimp_image_raise_channel_to_top (GimpImage   *gimage,
 
3271
gimp_image_raise_channel_to_top (GimpImage   *image,
3120
3272
                                 GimpChannel *channel)
3121
3273
{
3122
3274
  gint index;
3123
3275
 
3124
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
 
3276
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
3125
3277
  g_return_val_if_fail (GIMP_IS_CHANNEL (channel), FALSE);
3126
3278
 
3127
 
  index = gimp_container_get_child_index (gimage->channels,
 
3279
  index = gimp_container_get_child_index (image->channels,
3128
3280
                                          GIMP_OBJECT (channel));
3129
3281
 
3130
3282
  if (index == 0)
3133
3285
      return FALSE;
3134
3286
    }
3135
3287
 
3136
 
  return gimp_image_position_channel (gimage, channel, 0,
 
3288
  return gimp_image_position_channel (image, channel, 0,
3137
3289
                                      TRUE, _("Raise Channel to Top"));
3138
3290
}
3139
3291
 
3140
3292
gboolean
3141
 
gimp_image_lower_channel (GimpImage   *gimage,
 
3293
gimp_image_lower_channel (GimpImage   *image,
3142
3294
                          GimpChannel *channel)
3143
3295
{
3144
3296
  gint index;
3145
3297
 
3146
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
 
3298
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
3147
3299
  g_return_val_if_fail (GIMP_IS_CHANNEL (channel), FALSE);
3148
3300
 
3149
 
  index = gimp_container_get_child_index (gimage->channels,
 
3301
  index = gimp_container_get_child_index (image->channels,
3150
3302
                                          GIMP_OBJECT (channel));
3151
3303
 
3152
 
  if (index == gimp_container_num_children (gimage->channels) - 1)
 
3304
  if (index == gimp_container_num_children (image->channels) - 1)
3153
3305
    {
3154
3306
      g_message (_("Channel cannot be lowered more."));
3155
3307
      return FALSE;
3156
3308
    }
3157
3309
 
3158
 
  return gimp_image_position_channel (gimage, channel, index + 1,
 
3310
  return gimp_image_position_channel (image, channel, index + 1,
3159
3311
                                      TRUE, _("Lower Channel"));
3160
3312
}
3161
3313
 
3162
3314
gboolean
3163
 
gimp_image_lower_channel_to_bottom (GimpImage   *gimage,
 
3315
gimp_image_lower_channel_to_bottom (GimpImage   *image,
3164
3316
                                    GimpChannel *channel)
3165
3317
{
3166
3318
  gint index;
3167
3319
  gint length;
3168
3320
 
3169
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
 
3321
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
3170
3322
  g_return_val_if_fail (GIMP_IS_CHANNEL (channel), FALSE);
3171
3323
 
3172
 
  index = gimp_container_get_child_index (gimage->channels,
 
3324
  index = gimp_container_get_child_index (image->channels,
3173
3325
                                          GIMP_OBJECT (channel));
3174
3326
 
3175
 
  length = gimp_container_num_children (gimage->channels);
 
3327
  length = gimp_container_num_children (image->channels);
3176
3328
 
3177
3329
  if (index == length - 1)
3178
3330
    {
3180
3332
      return FALSE;
3181
3333
    }
3182
3334
 
3183
 
  return gimp_image_position_channel (gimage, channel, length - 1,
 
3335
  return gimp_image_position_channel (image, channel, length - 1,
3184
3336
                                      TRUE, _("Lower Channel to Bottom"));
3185
3337
}
3186
3338
 
3187
3339
gboolean
3188
 
gimp_image_position_channel (GimpImage   *gimage,
 
3340
gimp_image_position_channel (GimpImage   *image,
3189
3341
                             GimpChannel *channel,
3190
3342
                             gint         new_index,
3191
3343
                             gboolean     push_undo,
3194
3346
  gint index;
3195
3347
  gint num_channels;
3196
3348
 
3197
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
 
3349
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
3198
3350
  g_return_val_if_fail (GIMP_IS_CHANNEL (channel), FALSE);
3199
3351
 
3200
 
  index = gimp_container_get_child_index (gimage->channels,
 
3352
  index = gimp_container_get_child_index (image->channels,
3201
3353
                                          GIMP_OBJECT (channel));
3202
3354
  if (index < 0)
3203
3355
    return FALSE;
3204
3356
 
3205
 
  num_channels = gimp_container_num_children (gimage->channels);
 
3357
  num_channels = gimp_container_num_children (image->channels);
3206
3358
 
3207
3359
  new_index = CLAMP (new_index, 0, num_channels - 1);
3208
3360
 
3210
3362
    return TRUE;
3211
3363
 
3212
3364
  if (push_undo)
3213
 
    gimp_image_undo_push_channel_reposition (gimage, undo_desc, channel);
 
3365
    gimp_image_undo_push_channel_reposition (image, undo_desc, channel);
3214
3366
 
3215
 
  gimp_container_reorder (gimage->channels,
 
3367
  gimp_container_reorder (image->channels,
3216
3368
                          GIMP_OBJECT (channel), new_index);
3217
3369
 
3218
3370
  if (gimp_item_get_visible (GIMP_ITEM (channel)))
3221
3373
 
3222
3374
      gimp_item_offsets (GIMP_ITEM (channel), &off_x, &off_y);
3223
3375
 
3224
 
      gimp_image_update (gimage,
 
3376
      gimp_image_update (image,
3225
3377
                         off_x, off_y,
3226
3378
                         gimp_item_width  (GIMP_ITEM (channel)),
3227
3379
                         gimp_item_height (GIMP_ITEM (channel)));
3228
 
      gimp_viewable_invalidate_preview (GIMP_VIEWABLE (gimage));
 
3380
      gimp_viewable_invalidate_preview (GIMP_VIEWABLE (image));
3229
3381
    }
3230
3382
 
3231
3383
  return TRUE;
3232
3384
}
3233
3385
 
3234
3386
gboolean
3235
 
gimp_image_add_vectors (GimpImage   *gimage,
 
3387
gimp_image_add_vectors (GimpImage   *image,
3236
3388
                        GimpVectors *vectors,
3237
3389
                        gint         position)
3238
3390
{
3239
3391
  GimpVectors *active_vectors;
3240
3392
 
3241
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
 
3393
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
3242
3394
  g_return_val_if_fail (GIMP_IS_VECTORS (vectors), FALSE);
3243
3395
 
3244
 
  if (GIMP_ITEM (vectors)->gimage != NULL &&
3245
 
      GIMP_ITEM (vectors)->gimage != gimage)
 
3396
  if (GIMP_ITEM (vectors)->image != NULL &&
 
3397
      GIMP_ITEM (vectors)->image != image)
3246
3398
    {
3247
3399
      g_warning ("%s: attempting to add vectors to wrong image.", G_STRFUNC);
3248
3400
      return FALSE;
3249
3401
    }
3250
3402
 
3251
 
  if (gimp_container_have (gimage->vectors, GIMP_OBJECT (vectors)))
 
3403
  if (gimp_container_have (image->vectors, GIMP_OBJECT (vectors)))
3252
3404
    {
3253
3405
      g_warning ("%s: trying to add vectors to image twice.", G_STRFUNC);
3254
3406
      return FALSE;
3255
3407
    }
3256
3408
 
3257
 
  active_vectors = gimp_image_get_active_vectors (gimage);
3258
 
 
3259
 
  gimp_image_undo_push_vectors_add (gimage, _("Add Path"),
3260
 
                                    vectors, 0, active_vectors);
3261
 
 
3262
 
  gimp_item_set_image (GIMP_ITEM (vectors), gimage);
 
3409
  active_vectors = gimp_image_get_active_vectors (image);
 
3410
 
 
3411
  gimp_image_undo_push_vectors_add (image, _("Add Path"),
 
3412
                                    vectors, active_vectors);
 
3413
 
 
3414
  gimp_item_set_image (GIMP_ITEM (vectors), image);
3263
3415
 
3264
3416
  /*  add the layer to the list at the specified position  */
3265
3417
  if (position == -1)
3266
3418
    {
3267
3419
      if (active_vectors)
3268
 
        position = gimp_container_get_child_index (gimage->vectors,
 
3420
        position = gimp_container_get_child_index (image->vectors,
3269
3421
                                                   GIMP_OBJECT (active_vectors));
3270
3422
      else
3271
3423
        position = 0;
3272
3424
    }
3273
3425
 
3274
3426
  /*  Don't add at a non-existing index  */
3275
 
  if (position > gimp_container_num_children (gimage->vectors))
3276
 
    position = gimp_container_num_children (gimage->vectors);
3277
 
 
3278
 
  gimp_container_insert (gimage->vectors, GIMP_OBJECT (vectors), position);
3279
 
  gimp_item_sink (GIMP_ITEM (vectors));
3280
 
 
3281
 
  /*  notify this gimage of the currently active vectors  */
3282
 
  gimp_image_set_active_vectors (gimage, vectors);
 
3427
  if (position > gimp_container_num_children (image->vectors))
 
3428
    position = gimp_container_num_children (image->vectors);
 
3429
 
 
3430
  g_object_ref_sink (vectors);
 
3431
  gimp_container_insert (image->vectors, GIMP_OBJECT (vectors), position);
 
3432
  g_object_unref (vectors);
 
3433
 
 
3434
  /*  notify this image of the currently active vectors  */
 
3435
  gimp_image_set_active_vectors (image, vectors);
3283
3436
 
3284
3437
  return TRUE;
3285
3438
}
3286
3439
 
3287
3440
void
3288
 
gimp_image_remove_vectors (GimpImage   *gimage,
 
3441
gimp_image_remove_vectors (GimpImage   *image,
3289
3442
                           GimpVectors *vectors)
3290
3443
{
3291
3444
  GimpVectors *active_vectors;
3292
3445
  gint         index;
3293
3446
 
3294
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
 
3447
  g_return_if_fail (GIMP_IS_IMAGE (image));
3295
3448
  g_return_if_fail (GIMP_IS_VECTORS (vectors));
3296
 
  g_return_if_fail (gimp_container_have (gimage->vectors,
 
3449
  g_return_if_fail (gimp_container_have (image->vectors,
3297
3450
                                         GIMP_OBJECT (vectors)));
3298
3451
 
3299
 
  active_vectors = gimp_image_get_active_vectors (gimage);
 
3452
  active_vectors = gimp_image_get_active_vectors (image);
3300
3453
 
3301
 
  index = gimp_container_get_child_index (gimage->vectors,
 
3454
  index = gimp_container_get_child_index (image->vectors,
3302
3455
                                          GIMP_OBJECT (vectors));
3303
3456
 
3304
 
  gimp_image_undo_push_vectors_remove (gimage, _("Remove Path"),
 
3457
  gimp_image_undo_push_vectors_remove (image, _("Remove Path"),
3305
3458
                                       vectors, index, active_vectors);
3306
3459
 
3307
3460
  g_object_ref (vectors);
3308
3461
 
3309
 
  gimp_container_remove (gimage->vectors, GIMP_OBJECT (vectors));
 
3462
  gimp_container_remove (image->vectors, GIMP_OBJECT (vectors));
3310
3463
  gimp_item_removed (GIMP_ITEM (vectors));
3311
3464
 
3312
3465
  if (vectors == active_vectors)
3313
3466
    {
3314
 
      gint n_children = gimp_container_num_children (gimage->vectors);
 
3467
      gint n_children = gimp_container_num_children (image->vectors);
3315
3468
 
3316
3469
      if (n_children > 0)
3317
3470
        {
3318
3471
          index = CLAMP (index, 0, n_children - 1);
3319
3472
 
3320
3473
          active_vectors = (GimpVectors *)
3321
 
            gimp_container_get_child_by_index (gimage->vectors, index);
 
3474
            gimp_container_get_child_by_index (image->vectors, index);
3322
3475
        }
3323
3476
      else
3324
3477
        {
3325
3478
          active_vectors = NULL;
3326
3479
        }
3327
3480
 
3328
 
      gimp_image_set_active_vectors (gimage, active_vectors);
 
3481
      gimp_image_set_active_vectors (image, active_vectors);
3329
3482
    }
3330
3483
 
3331
3484
  g_object_unref (vectors);
3332
3485
}
3333
3486
 
3334
3487
gboolean
3335
 
gimp_image_raise_vectors (GimpImage   *gimage,
 
3488
gimp_image_raise_vectors (GimpImage   *image,
3336
3489
                          GimpVectors *vectors)
3337
3490
{
3338
3491
  gint index;
3339
3492
 
3340
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
 
3493
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
3341
3494
  g_return_val_if_fail (GIMP_IS_VECTORS (vectors), FALSE);
3342
3495
 
3343
 
  index = gimp_container_get_child_index (gimage->vectors,
 
3496
  index = gimp_container_get_child_index (image->vectors,
3344
3497
                                          GIMP_OBJECT (vectors));
3345
3498
 
3346
3499
  if (index == 0)
3349
3502
      return FALSE;
3350
3503
    }
3351
3504
 
3352
 
  return gimp_image_position_vectors (gimage, vectors, index - 1,
 
3505
  return gimp_image_position_vectors (image, vectors, index - 1,
3353
3506
                                      TRUE, _("Raise Path"));
3354
3507
}
3355
3508
 
3356
3509
gboolean
3357
 
gimp_image_raise_vectors_to_top (GimpImage   *gimage,
 
3510
gimp_image_raise_vectors_to_top (GimpImage   *image,
3358
3511
                                 GimpVectors *vectors)
3359
3512
{
3360
3513
  gint index;
3361
3514
 
3362
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
 
3515
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
3363
3516
  g_return_val_if_fail (GIMP_IS_VECTORS (vectors), FALSE);
3364
3517
 
3365
 
  index = gimp_container_get_child_index (gimage->vectors,
 
3518
  index = gimp_container_get_child_index (image->vectors,
3366
3519
                                          GIMP_OBJECT (vectors));
3367
3520
 
3368
3521
  if (index == 0)
3371
3524
      return FALSE;
3372
3525
    }
3373
3526
 
3374
 
  return gimp_image_position_vectors (gimage, vectors, 0,
 
3527
  return gimp_image_position_vectors (image, vectors, 0,
3375
3528
                                      TRUE, _("Raise Path to Top"));
3376
3529
}
3377
3530
 
3378
3531
gboolean
3379
 
gimp_image_lower_vectors (GimpImage   *gimage,
 
3532
gimp_image_lower_vectors (GimpImage   *image,
3380
3533
                          GimpVectors *vectors)
3381
3534
{
3382
3535
  gint index;
3383
3536
 
3384
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
 
3537
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
3385
3538
  g_return_val_if_fail (GIMP_IS_VECTORS (vectors), FALSE);
3386
3539
 
3387
 
  index = gimp_container_get_child_index (gimage->vectors,
 
3540
  index = gimp_container_get_child_index (image->vectors,
3388
3541
                                          GIMP_OBJECT (vectors));
3389
3542
 
3390
 
  if (index == gimp_container_num_children (gimage->vectors) - 1)
 
3543
  if (index == gimp_container_num_children (image->vectors) - 1)
3391
3544
    {
3392
3545
      g_message (_("Path cannot be lowered more."));
3393
3546
      return FALSE;
3394
3547
    }
3395
3548
 
3396
 
  return gimp_image_position_vectors (gimage, vectors, index + 1,
 
3549
  return gimp_image_position_vectors (image, vectors, index + 1,
3397
3550
                                      TRUE, _("Lower Path"));
3398
3551
}
3399
3552
 
3400
3553
gboolean
3401
 
gimp_image_lower_vectors_to_bottom (GimpImage   *gimage,
 
3554
gimp_image_lower_vectors_to_bottom (GimpImage   *image,
3402
3555
                                    GimpVectors *vectors)
3403
3556
{
3404
3557
  gint index;
3405
3558
  gint length;
3406
3559
 
3407
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
 
3560
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
3408
3561
  g_return_val_if_fail (GIMP_IS_VECTORS (vectors), FALSE);
3409
3562
 
3410
 
  index = gimp_container_get_child_index (gimage->vectors,
 
3563
  index = gimp_container_get_child_index (image->vectors,
3411
3564
                                          GIMP_OBJECT (vectors));
3412
3565
 
3413
 
  length = gimp_container_num_children (gimage->vectors);
 
3566
  length = gimp_container_num_children (image->vectors);
3414
3567
 
3415
3568
  if (index == length - 1)
3416
3569
    {
3418
3571
      return FALSE;
3419
3572
    }
3420
3573
 
3421
 
  return gimp_image_position_vectors (gimage, vectors, length - 1,
 
3574
  return gimp_image_position_vectors (image, vectors, length - 1,
3422
3575
                                      TRUE, _("Lower Path to Bottom"));
3423
3576
}
3424
3577
 
3425
3578
gboolean
3426
 
gimp_image_position_vectors (GimpImage   *gimage,
 
3579
gimp_image_position_vectors (GimpImage   *image,
3427
3580
                             GimpVectors *vectors,
3428
3581
                             gint         new_index,
3429
3582
                             gboolean     push_undo,
3432
3585
  gint index;
3433
3586
  gint num_vectors;
3434
3587
 
3435
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
 
3588
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
3436
3589
  g_return_val_if_fail (GIMP_IS_VECTORS (vectors), FALSE);
3437
3590
 
3438
 
  index = gimp_container_get_child_index (gimage->vectors,
 
3591
  index = gimp_container_get_child_index (image->vectors,
3439
3592
                                          GIMP_OBJECT (vectors));
3440
3593
  if (index < 0)
3441
3594
    return FALSE;
3442
3595
 
3443
 
  num_vectors = gimp_container_num_children (gimage->vectors);
 
3596
  num_vectors = gimp_container_num_children (image->vectors);
3444
3597
 
3445
3598
  new_index = CLAMP (new_index, 0, num_vectors - 1);
3446
3599
 
3448
3601
    return TRUE;
3449
3602
 
3450
3603
  if (push_undo)
3451
 
    gimp_image_undo_push_vectors_reposition (gimage, undo_desc, vectors);
 
3604
    gimp_image_undo_push_vectors_reposition (image, undo_desc, vectors);
3452
3605
 
3453
 
  gimp_container_reorder (gimage->vectors,
 
3606
  gimp_container_reorder (image->vectors,
3454
3607
                          GIMP_OBJECT (vectors), new_index);
3455
3608
 
3456
3609
  return TRUE;
3457
3610
}
3458
3611
 
3459
3612
gboolean
3460
 
gimp_image_layer_boundary (const GimpImage  *gimage,
 
3613
gimp_image_layer_boundary (const GimpImage  *image,
3461
3614
                           BoundSeg        **segs,
3462
3615
                           gint             *n_segs)
3463
3616
{
3464
3617
  GimpLayer *layer;
3465
3618
 
3466
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
 
3619
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
3467
3620
  g_return_val_if_fail (segs != NULL, FALSE);
3468
3621
  g_return_val_if_fail (n_segs != NULL, FALSE);
3469
3622
 
3470
3623
  /*  The second boundary corresponds to the active layer's
3471
3624
   *  perimeter...
3472
3625
   */
3473
 
  layer = gimp_image_get_active_layer (gimage);
 
3626
  layer = gimp_image_get_active_layer (image);
3474
3627
 
3475
3628
  if (layer)
3476
3629
    {
3486
3639
}
3487
3640
 
3488
3641
GimpLayer *
3489
 
gimp_image_pick_correlate_layer (const GimpImage *gimage,
 
3642
gimp_image_pick_correlate_layer (const GimpImage *image,
3490
3643
                                 gint             x,
3491
3644
                                 gint             y)
3492
3645
{
3493
3646
  GList *list;
3494
3647
 
3495
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), NULL);
 
3648
  g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
3496
3649
 
3497
 
  for (list = GIMP_LIST (gimage->layers)->list;
 
3650
  for (list = GIMP_LIST (image->layers)->list;
3498
3651
       list;
3499
3652
       list = g_list_next (list))
3500
3653
    {
3501
3654
      GimpLayer *layer = list->data;
3502
 
 
3503
 
      if (gimp_layer_pick_correlate (layer, x, y))
3504
 
        return layer;
 
3655
      gint       off_x, off_y;
 
3656
 
 
3657
      gimp_item_offsets (GIMP_ITEM (layer), &off_x, &off_y);
 
3658
 
 
3659
      if (gimp_pickable_get_opacity_at (GIMP_PICKABLE (layer),
 
3660
                                        x - off_x, y - off_y) > 63)
 
3661
        {
 
3662
          return layer;
 
3663
        }
3505
3664
    }
3506
3665
 
3507
3666
  return NULL;
3508
3667
}
3509
3668
 
3510
3669
gboolean
3511
 
gimp_image_coords_in_active_drawable (GimpImage        *gimage,
3512
 
                                      const GimpCoords *coords)
 
3670
gimp_image_coords_in_active_pickable (GimpImage        *image,
 
3671
                                      const GimpCoords *coords,
 
3672
                                      gboolean          sample_merged,
 
3673
                                      gboolean          selected_only)
3513
3674
{
3514
 
  GimpDrawable *drawable;
3515
 
 
3516
 
  g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
3517
 
 
3518
 
  drawable = gimp_image_active_drawable (gimage);
3519
 
 
3520
 
  if (drawable)
3521
 
    {
3522
 
      GimpItem *item = GIMP_ITEM (drawable);
3523
 
      gint      x, y;
3524
 
 
3525
 
      gimp_item_offsets (item, &x, &y);
3526
 
 
3527
 
      x = ROUND (coords->x) - x;
3528
 
      y = ROUND (coords->y) - y;
3529
 
 
3530
 
      if (x < 0 || x > gimp_item_width (item))
3531
 
        return FALSE;
3532
 
 
3533
 
      if (y < 0 || y > gimp_item_height (item))
3534
 
        return FALSE;
3535
 
 
3536
 
      return TRUE;
3537
 
    }
3538
 
 
3539
 
  return FALSE;
 
3675
  gint     x, y;
 
3676
  gboolean in_pickable = FALSE;
 
3677
 
 
3678
  g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
 
3679
 
 
3680
  x = floor (coords->x);
 
3681
  y = floor (coords->y);
 
3682
 
 
3683
  if (sample_merged)
 
3684
    {
 
3685
      if (x >= 0 && x < image->width &&
 
3686
          y >= 0 && y < image->height)
 
3687
        in_pickable = TRUE;
 
3688
    }
 
3689
  else
 
3690
    {
 
3691
      GimpDrawable *drawable = gimp_image_active_drawable (image);
 
3692
 
 
3693
      if (drawable)
 
3694
        {
 
3695
          GimpItem *item = GIMP_ITEM (drawable);
 
3696
          gint      off_x, off_y;
 
3697
          gint      d_x, d_y;
 
3698
 
 
3699
          gimp_item_offsets (item, &off_x, &off_y);
 
3700
 
 
3701
          d_x = x - off_x;
 
3702
          d_y = y - off_y;
 
3703
 
 
3704
          if (d_x >= 0 && d_x < gimp_item_width (item) &&
 
3705
              d_y >= 0 && d_y < gimp_item_height (item))
 
3706
            in_pickable = TRUE;
 
3707
        }
 
3708
    }
 
3709
 
 
3710
  if (in_pickable && selected_only)
 
3711
    {
 
3712
      GimpChannel *selection = gimp_image_get_mask (image);
 
3713
 
 
3714
      if (! gimp_channel_is_empty (selection) &&
 
3715
          ! gimp_pickable_get_opacity_at (GIMP_PICKABLE (selection),
 
3716
                                          x, y))
 
3717
        {
 
3718
          in_pickable = FALSE;
 
3719
        }
 
3720
    }
 
3721
 
 
3722
  return in_pickable;
3540
3723
}
3541
3724
 
3542
3725
void
3543
 
gimp_image_invalidate_layer_previews (GimpImage *gimage)
 
3726
gimp_image_invalidate_layer_previews (GimpImage *image)
3544
3727
{
3545
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
 
3728
  g_return_if_fail (GIMP_IS_IMAGE (image));
3546
3729
 
3547
 
  gimp_container_foreach (gimage->layers,
 
3730
  gimp_container_foreach (image->layers,
3548
3731
                          (GFunc) gimp_viewable_invalidate_preview,
3549
3732
                          NULL);
3550
3733
}
3551
3734
 
3552
3735
void
3553
 
gimp_image_invalidate_channel_previews (GimpImage *gimage)
 
3736
gimp_image_invalidate_channel_previews (GimpImage *image)
3554
3737
{
3555
 
  g_return_if_fail (GIMP_IS_IMAGE (gimage));
 
3738
  g_return_if_fail (GIMP_IS_IMAGE (image));
3556
3739
 
3557
 
  gimp_container_foreach (gimage->channels,
 
3740
  gimp_container_foreach (image->channels,
3558
3741
                          (GFunc) gimp_viewable_invalidate_preview,
3559
3742
                          NULL);
3560
3743
}