1 /* GIMP - The GNU Image Manipulation Program
2  * Copyright (C) 1995 Spencer Kimball and Peter Mattis
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
16  */
17 
18 #ifndef __GIMP_ITEM_H__
19 #define __GIMP_ITEM_H__
20 
21 
22 #include "gimpfilter.h"
23 
24 
25 #define GIMP_TYPE_ITEM            (gimp_item_get_type ())
26 #define GIMP_ITEM(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_ITEM, GimpItem))
27 #define GIMP_ITEM_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_ITEM, GimpItemClass))
28 #define GIMP_IS_ITEM(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_ITEM))
29 #define GIMP_IS_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_ITEM))
30 #define GIMP_ITEM_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_ITEM, GimpItemClass))
31 
32 
33 typedef struct _GimpItemClass GimpItemClass;
34 
35 struct _GimpItem
36 {
37   GimpFilter  parent_instance;
38 };
39 
40 struct _GimpItemClass
41 {
42   GimpFilterClass  parent_class;
43 
44   /*  signals  */
45   void            (* removed)               (GimpItem            *item);
46   void            (* visibility_changed)    (GimpItem            *item);
47   void            (* linked_changed)        (GimpItem            *item);
48   void            (* color_tag_changed)     (GimpItem            *item);
49   void            (* lock_content_changed)  (GimpItem            *item);
50   void            (* lock_position_changed) (GimpItem            *item);
51 
52   /*  virtual functions  */
53   void            (* unset_removed)      (GimpItem               *item);
54   gboolean        (* is_attached)        (GimpItem               *item);
55   gboolean        (* is_content_locked)  (GimpItem               *item);
56   gboolean        (* is_position_locked) (GimpItem               *item);
57   GimpItemTree  * (* get_tree)           (GimpItem               *item);
58   gboolean        (* bounds)             (GimpItem               *item,
59                                           gdouble                *x,
60                                           gdouble                *y,
61                                           gdouble                *width,
62                                           gdouble                *height);
63   GimpItem      * (* duplicate)          (GimpItem               *item,
64                                           GType                   new_type);
65   void            (* convert)            (GimpItem               *item,
66                                           GimpImage              *dest_image,
67                                           GType                   old_type);
68   gboolean        (* rename)             (GimpItem               *item,
69                                           const gchar            *new_name,
70                                           const gchar            *undo_desc,
71                                           GError                **error);
72   void            (* start_move)         (GimpItem               *item,
73                                           gboolean                push_undo);
74   void            (* end_move)           (GimpItem               *item,
75                                           gboolean                push_undo);
76   void            (* start_transform)    (GimpItem               *item,
77                                           gboolean                push_undo);
78   void            (* end_transform)      (GimpItem               *item,
79                                           gboolean                push_undo);
80   void            (* translate)          (GimpItem               *item,
81                                           gdouble                 offset_x,
82                                           gdouble                 offset_y,
83                                           gboolean                push_undo);
84   void            (* scale)              (GimpItem               *item,
85                                           gint                    new_width,
86                                           gint                    new_height,
87                                           gint                    new_offset_x,
88                                           gint                    new_offset_y,
89                                           GimpInterpolationType   interpolation_type,
90                                           GimpProgress           *progress);
91   void            (* resize)             (GimpItem               *item,
92                                           GimpContext            *context,
93                                           GimpFillType            fill_type,
94                                           gint                    new_width,
95                                           gint                    new_height,
96                                           gint                    offset_x,
97                                           gint                    offset_y);
98   void            (* flip)               (GimpItem               *item,
99                                           GimpContext            *context,
100                                           GimpOrientationType     flip_type,
101                                           gdouble                 axis,
102                                           gboolean                clip_result);
103   void            (* rotate)             (GimpItem               *item,
104                                           GimpContext            *context,
105                                           GimpRotationType        rotate_type,
106                                           gdouble                 center_x,
107                                           gdouble                 center_y,
108                                           gboolean                clip_result);
109   void            (* transform)          (GimpItem               *item,
110                                           GimpContext            *context,
111                                           const GimpMatrix3      *matrix,
112                                           GimpTransformDirection  direction,
113                                           GimpInterpolationType   interpolation_type,
114                                           GimpTransformResize     clip_result,
115                                           GimpProgress           *progress);
116   GimpTransformResize (* get_clip)       (GimpItem               *item,
117                                           GimpTransformResize     clip_result);
118   gboolean        (* fill)               (GimpItem               *item,
119                                           GimpDrawable           *drawable,
120                                           GimpFillOptions        *fill_options,
121                                           gboolean                push_undo,
122                                           GimpProgress           *progress,
123                                           GError                **error);
124   gboolean        (* stroke)             (GimpItem               *item,
125                                           GimpDrawable           *drawable,
126                                           GimpStrokeOptions      *stroke_options,
127                                           gboolean                push_undo,
128                                           GimpProgress           *progress,
129                                           GError                **error);
130   void            (* to_selection)       (GimpItem               *item,
131                                           GimpChannelOps          op,
132                                           gboolean                antialias,
133                                           gboolean                feather,
134                                           gdouble                 feather_radius_x,
135                                           gdouble                 feather_radius_y);
136 
137   const gchar *default_name;
138   const gchar *rename_desc;
139   const gchar *translate_desc;
140   const gchar *scale_desc;
141   const gchar *resize_desc;
142   const gchar *flip_desc;
143   const gchar *rotate_desc;
144   const gchar *transform_desc;
145   const gchar *to_selection_desc;
146   const gchar *fill_desc;
147   const gchar *stroke_desc;
148 
149   const gchar *reorder_desc;
150   const gchar *raise_desc;
151   const gchar *raise_to_top_desc;
152   const gchar *lower_desc;
153   const gchar *lower_to_bottom_desc;
154 
155   const gchar *raise_failed;
156   const gchar *lower_failed;
157 };
158 
159 
160 GType           gimp_item_get_type           (void) G_GNUC_CONST;
161 
162 GimpItem      * gimp_item_new                (GType               type,
163                                               GimpImage          *image,
164                                               const gchar        *name,
165                                               gint                offset_x,
166                                               gint                offset_y,
167                                               gint                width,
168                                               gint                height);
169 
170 void            gimp_item_removed            (GimpItem           *item);
171 gboolean        gimp_item_is_removed         (GimpItem           *item);
172 void            gimp_item_unset_removed      (GimpItem           *item);
173 
174 gboolean        gimp_item_is_attached        (GimpItem           *item);
175 
176 GimpItem      * gimp_item_get_parent         (GimpItem           *item);
177 
178 GimpItemTree  * gimp_item_get_tree           (GimpItem           *item);
179 GimpContainer * gimp_item_get_container      (GimpItem           *item);
180 GList         * gimp_item_get_container_iter (GimpItem           *item);
181 gint            gimp_item_get_index          (GimpItem           *item);
182 GList         * gimp_item_get_path           (GimpItem           *item);
183 
184 gboolean        gimp_item_bounds             (GimpItem           *item,
185                                               gint               *x,
186                                               gint               *y,
187                                               gint               *width,
188                                               gint               *height);
189 gboolean        gimp_item_bounds_f           (GimpItem           *item,
190                                               gdouble            *x,
191                                               gdouble            *y,
192                                               gdouble            *width,
193                                               gdouble            *height);
194 
195 GimpItem      * gimp_item_duplicate          (GimpItem           *item,
196                                               GType               new_type);
197 GimpItem      * gimp_item_convert            (GimpItem           *item,
198                                               GimpImage          *dest_image,
199                                               GType               new_type);
200 
201 gboolean        gimp_item_rename             (GimpItem           *item,
202                                               const gchar        *new_name,
203                                               GError            **error);
204 
205 gint            gimp_item_get_width          (GimpItem           *item);
206 gint            gimp_item_get_height         (GimpItem           *item);
207 void            gimp_item_set_size           (GimpItem           *item,
208                                               gint                width,
209                                               gint                height);
210 
211 void            gimp_item_get_offset         (GimpItem           *item,
212                                               gint               *offset_x,
213                                               gint               *offset_y);
214 void            gimp_item_set_offset         (GimpItem           *item,
215                                               gint                offset_x,
216                                               gint                offset_y);
217 gint            gimp_item_get_offset_x       (GimpItem           *item);
218 gint            gimp_item_get_offset_y       (GimpItem           *item);
219 
220 void            gimp_item_start_move         (GimpItem           *item,
221                                               gboolean            push_undo);
222 void            gimp_item_end_move           (GimpItem           *item,
223                                               gboolean            push_undo);
224 
225 void            gimp_item_start_transform    (GimpItem           *item,
226                                               gboolean            push_undo);
227 void            gimp_item_end_transform      (GimpItem           *item,
228                                               gboolean            push_undo);
229 
230 void            gimp_item_translate          (GimpItem           *item,
231                                               gdouble             offset_x,
232                                               gdouble             offset_y,
233                                               gboolean            push_undo);
234 
235 gboolean        gimp_item_check_scaling      (GimpItem           *item,
236                                               gint                new_width,
237                                               gint                new_height);
238 void            gimp_item_scale              (GimpItem           *item,
239                                               gint                new_width,
240                                               gint                new_height,
241                                               gint                new_offset_x,
242                                               gint                new_offset_y,
243                                               GimpInterpolationType interpolation,
244                                               GimpProgress       *progress);
245 gboolean        gimp_item_scale_by_factors   (GimpItem           *item,
246                                               gdouble             w_factor,
247                                               gdouble             h_factor,
248                                               GimpInterpolationType interpolation,
249                                               GimpProgress       *progress);
250 gboolean
251       gimp_item_scale_by_factors_with_origin (GimpItem           *item,
252                                               gdouble             w_factor,
253                                               gdouble             h_factor,
254                                               gint                origin_x,
255                                               gint                origin_y,
256                                               gint                new_origin_x,
257                                               gint                new_origin_y,
258                                               GimpInterpolationType interpolation,
259                                               GimpProgress       *progress);
260 void            gimp_item_scale_by_origin    (GimpItem           *item,
261                                               gint                new_width,
262                                               gint                new_height,
263                                               GimpInterpolationType interpolation,
264                                               GimpProgress       *progress,
265                                               gboolean            local_origin);
266 void            gimp_item_resize             (GimpItem           *item,
267                                               GimpContext        *context,
268                                               GimpFillType        fill_type,
269                                               gint                new_width,
270                                               gint                new_height,
271                                               gint                offset_x,
272                                               gint                offset_y);
273 void            gimp_item_resize_to_image    (GimpItem           *item);
274 
275 void            gimp_item_flip               (GimpItem           *item,
276                                               GimpContext        *context,
277                                               GimpOrientationType flip_type,
278                                               gdouble             axis,
279                                               gboolean            clip_result);
280 void            gimp_item_rotate             (GimpItem           *item,
281                                               GimpContext        *context,
282                                               GimpRotationType    rotate_type,
283                                               gdouble             center_x,
284                                               gdouble             center_y,
285                                               gboolean            clip_result);
286 void            gimp_item_transform          (GimpItem           *item,
287                                               GimpContext        *context,
288                                               const GimpMatrix3  *matrix,
289                                               GimpTransformDirection direction,
290                                               GimpInterpolationType interpolation_type,
291                                               GimpTransformResize clip_result,
292                                               GimpProgress       *progress);
293 GimpTransformResize   gimp_item_get_clip     (GimpItem           *item,
294                                               GimpTransformResize clip_result);
295 
296 gboolean        gimp_item_fill               (GimpItem           *item,
297                                               GimpDrawable       *drawable,
298                                               GimpFillOptions    *fill_options,
299                                               gboolean            push_undo,
300                                               GimpProgress       *progress,
301                                               GError            **error);
302 gboolean        gimp_item_stroke             (GimpItem           *item,
303                                               GimpDrawable       *drawable,
304                                               GimpContext        *context,
305                                               GimpStrokeOptions  *stroke_options,
306                                               GimpPaintOptions   *paint_options,
307                                               gboolean            push_undo,
308                                               GimpProgress       *progress,
309                                               GError            **error);
310 
311 void            gimp_item_to_selection       (GimpItem           *item,
312                                               GimpChannelOps      op,
313                                               gboolean            antialias,
314                                               gboolean            feather,
315                                               gdouble             feather_radius_x,
316                                               gdouble             feather_radius_y);
317 
318 void            gimp_item_add_offset_node    (GimpItem           *item,
319                                               GeglNode           *node);
320 void            gimp_item_remove_offset_node (GimpItem           *item,
321                                               GeglNode           *node);
322 
323 gint            gimp_item_get_ID             (GimpItem           *item);
324 GimpItem      * gimp_item_get_by_ID          (Gimp               *gimp,
325                                               gint                id);
326 
327 GimpTattoo      gimp_item_get_tattoo         (GimpItem           *item);
328 void            gimp_item_set_tattoo         (GimpItem           *item,
329                                               GimpTattoo          tattoo);
330 
331 GimpImage     * gimp_item_get_image          (GimpItem           *item);
332 void            gimp_item_set_image          (GimpItem           *item,
333                                               GimpImage          *image);
334 
335 void            gimp_item_replace_item       (GimpItem           *item,
336                                               GimpItem           *replace);
337 
338 void               gimp_item_set_parasites   (GimpItem           *item,
339                                               GimpParasiteList   *parasites);
340 GimpParasiteList * gimp_item_get_parasites   (GimpItem           *item);
341 
342 gboolean        gimp_item_parasite_validate  (GimpItem           *item,
343                                               const GimpParasite *parasite,
344                                               GError            **error);
345 void            gimp_item_parasite_attach    (GimpItem           *item,
346                                               const GimpParasite *parasite,
347                                               gboolean            push_undo);
348 void            gimp_item_parasite_detach    (GimpItem           *item,
349                                               const gchar        *name,
350                                               gboolean            push_undo);
351 const GimpParasite * gimp_item_parasite_find (GimpItem           *item,
352                                               const gchar        *name);
353 gchar        ** gimp_item_parasite_list      (GimpItem           *item,
354                                               gint               *count);
355 
356 void            gimp_item_set_visible        (GimpItem           *item,
357                                               gboolean            visible,
358                                               gboolean            push_undo);
359 gboolean        gimp_item_get_visible        (GimpItem           *item);
360 gboolean        gimp_item_is_visible         (GimpItem           *item);
361 
362 void        gimp_item_bind_visible_to_active (GimpItem           *item,
363                                               gboolean            bind);
364 
365 void            gimp_item_set_linked         (GimpItem           *item,
366                                               gboolean            linked,
367                                               gboolean            push_undo);
368 gboolean        gimp_item_get_linked         (GimpItem           *item);
369 
370 void            gimp_item_set_color_tag      (GimpItem           *item,
371                                               GimpColorTag        color_tag,
372                                               gboolean            push_undo);
373 GimpColorTag    gimp_item_get_color_tag      (GimpItem           *item);
374 GimpColorTag  gimp_item_get_merged_color_tag (GimpItem           *item);
375 
376 void            gimp_item_set_lock_content   (GimpItem           *item,
377                                               gboolean            lock_content,
378                                               gboolean            push_undo);
379 gboolean        gimp_item_get_lock_content   (GimpItem           *item);
380 gboolean        gimp_item_can_lock_content   (GimpItem           *item);
381 gboolean        gimp_item_is_content_locked  (GimpItem           *item);
382 
383 void            gimp_item_set_lock_position  (GimpItem          *item,
384                                               gboolean           lock_position,
385                                               gboolean           push_undo);
386 gboolean        gimp_item_get_lock_position  (GimpItem          *item);
387 gboolean        gimp_item_can_lock_position  (GimpItem          *item);
388 gboolean        gimp_item_is_position_locked (GimpItem          *item);
389 
390 gboolean        gimp_item_mask_bounds        (GimpItem           *item,
391                                               gint               *x1,
392                                               gint               *y1,
393                                               gint               *x2,
394                                               gint               *y2);
395 gboolean        gimp_item_mask_intersect     (GimpItem           *item,
396                                               gint               *x,
397                                               gint               *y,
398                                               gint               *width,
399                                               gint               *height);
400 
401 gboolean        gimp_item_is_in_set          (GimpItem           *item,
402                                               GimpItemSet         set);
403 
404 
405 #endif /* __GIMP_ITEM_H__ */
406