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