/* PIKA - Photo and Image Kooker Application * a rebranding of The GNU Image Manipulation Program (created with heckimp) * A derived work which may be trivial. However, any changes may be (C)2023 by Aldercone Studio * * Original copyright, applying to most contents (license remains unchanged): * Copyright (C) 1995 Spencer Kimball and Peter Mattis * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __PIKA_ITEM_H__ #define __PIKA_ITEM_H__ #include "pikafilter.h" #define PIKA_TYPE_ITEM (pika_item_get_type ()) #define PIKA_ITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PIKA_TYPE_ITEM, PikaItem)) #define PIKA_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PIKA_TYPE_ITEM, PikaItemClass)) #define PIKA_IS_ITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PIKA_TYPE_ITEM)) #define PIKA_IS_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PIKA_TYPE_ITEM)) #define PIKA_ITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PIKA_TYPE_ITEM, PikaItemClass)) typedef struct _PikaItemClass PikaItemClass; struct _PikaItem { PikaFilter parent_instance; }; struct _PikaItemClass { PikaFilterClass parent_class; /* signals */ void (* removed) (PikaItem *item); void (* visibility_changed) (PikaItem *item); void (* color_tag_changed) (PikaItem *item); void (* lock_content_changed) (PikaItem *item); void (* lock_position_changed) (PikaItem *item); void (* lock_visibility_changed) (PikaItem *item); /* virtual functions */ void (* unset_removed) (PikaItem *item); gboolean (* is_attached) (PikaItem *item); gboolean (* is_content_locked) (PikaItem *item, PikaItem **locked_item); gboolean (* is_position_locked) (PikaItem *item, PikaItem **locked_item, gboolean checking_children); gboolean (* is_visibility_locked) (PikaItem *item, PikaItem **locked_item); PikaItemTree * (* get_tree) (PikaItem *item); gboolean (* bounds) (PikaItem *item, gdouble *x, gdouble *y, gdouble *width, gdouble *height); PikaItem * (* duplicate) (PikaItem *item, GType new_type); void (* convert) (PikaItem *item, PikaImage *dest_image, GType old_type); gboolean (* rename) (PikaItem *item, const gchar *new_name, const gchar *undo_desc, GError **error); void (* start_move) (PikaItem *item, gboolean push_undo); void (* end_move) (PikaItem *item, gboolean push_undo); void (* start_transform) (PikaItem *item, gboolean push_undo); void (* end_transform) (PikaItem *item, gboolean push_undo); void (* translate) (PikaItem *item, gdouble offset_x, gdouble offset_y, gboolean push_undo); void (* scale) (PikaItem *item, gint new_width, gint new_height, gint new_offset_x, gint new_offset_y, PikaInterpolationType interpolation_type, PikaProgress *progress); void (* resize) (PikaItem *item, PikaContext *context, PikaFillType fill_type, gint new_width, gint new_height, gint offset_x, gint offset_y); void (* flip) (PikaItem *item, PikaContext *context, PikaOrientationType flip_type, gdouble axis, gboolean clip_result); void (* rotate) (PikaItem *item, PikaContext *context, PikaRotationType rotate_type, gdouble center_x, gdouble center_y, gboolean clip_result); void (* transform) (PikaItem *item, PikaContext *context, const PikaMatrix3 *matrix, PikaTransformDirection direction, PikaInterpolationType interpolation_type, PikaTransformResize clip_result, PikaProgress *progress); PikaTransformResize (* get_clip) (PikaItem *item, PikaTransformResize clip_result); gboolean (* fill) (PikaItem *item, PikaDrawable *drawable, PikaFillOptions *fill_options, gboolean push_undo, PikaProgress *progress, GError **error); gboolean (* stroke) (PikaItem *item, PikaDrawable *drawable, PikaStrokeOptions *stroke_options, gboolean push_undo, PikaProgress *progress, GError **error); void (* to_selection) (PikaItem *item, PikaChannelOps op, gboolean antialias, gboolean feather, gdouble feather_radius_x, gdouble feather_radius_y); const gchar *default_name; const gchar *rename_desc; const gchar *translate_desc; const gchar *scale_desc; const gchar *resize_desc; const gchar *flip_desc; const gchar *rotate_desc; const gchar *transform_desc; const gchar *to_selection_desc; const gchar *fill_desc; const gchar *stroke_desc; const gchar *reorder_desc; const gchar *raise_desc; const gchar *raise_to_top_desc; const gchar *lower_desc; const gchar *lower_to_bottom_desc; const gchar *raise_failed; const gchar *lower_failed; }; GType pika_item_get_type (void) G_GNUC_CONST; PikaItem * pika_item_new (GType type, PikaImage *image, const gchar *name, gint offset_x, gint offset_y, gint width, gint height); void pika_item_removed (PikaItem *item); gboolean pika_item_is_removed (PikaItem *item); void pika_item_unset_removed (PikaItem *item); gboolean pika_item_is_attached (PikaItem *item); PikaItem * pika_item_get_parent (PikaItem *item); PikaItemTree * pika_item_get_tree (PikaItem *item); PikaContainer * pika_item_get_container (PikaItem *item); GList * pika_item_get_container_iter (PikaItem *item); gint pika_item_get_index (PikaItem *item); GList * pika_item_get_path (PikaItem *item); gboolean pika_item_bounds (PikaItem *item, gint *x, gint *y, gint *width, gint *height); gboolean pika_item_bounds_f (PikaItem *item, gdouble *x, gdouble *y, gdouble *width, gdouble *height); PikaItem * pika_item_duplicate (PikaItem *item, GType new_type); PikaItem * pika_item_convert (PikaItem *item, PikaImage *dest_image, GType new_type); gboolean pika_item_rename (PikaItem *item, const gchar *new_name, GError **error); gint pika_item_get_width (PikaItem *item); gint pika_item_get_height (PikaItem *item); void pika_item_set_size (PikaItem *item, gint width, gint height); void pika_item_get_offset (PikaItem *item, gint *offset_x, gint *offset_y); void pika_item_set_offset (PikaItem *item, gint offset_x, gint offset_y); gint pika_item_get_offset_x (PikaItem *item); gint pika_item_get_offset_y (PikaItem *item); void pika_item_start_move (PikaItem *item, gboolean push_undo); void pika_item_end_move (PikaItem *item, gboolean push_undo); void pika_item_start_transform (PikaItem *item, gboolean push_undo); void pika_item_end_transform (PikaItem *item, gboolean push_undo); void pika_item_translate (PikaItem *item, gdouble offset_x, gdouble offset_y, gboolean push_undo); gboolean pika_item_check_scaling (PikaItem *item, gint new_width, gint new_height); void pika_item_scale (PikaItem *item, gint new_width, gint new_height, gint new_offset_x, gint new_offset_y, PikaInterpolationType interpolation, PikaProgress *progress); gboolean pika_item_scale_by_factors (PikaItem *item, gdouble w_factor, gdouble h_factor, PikaInterpolationType interpolation, PikaProgress *progress); gboolean pika_item_scale_by_factors_with_origin (PikaItem *item, gdouble w_factor, gdouble h_factor, gint origin_x, gint origin_y, gint new_origin_x, gint new_origin_y, PikaInterpolationType interpolation, PikaProgress *progress); void pika_item_scale_by_origin (PikaItem *item, gint new_width, gint new_height, PikaInterpolationType interpolation, PikaProgress *progress, gboolean local_origin); void pika_item_resize (PikaItem *item, PikaContext *context, PikaFillType fill_type, gint new_width, gint new_height, gint offset_x, gint offset_y); void pika_item_resize_to_image (PikaItem *item); void pika_item_flip (PikaItem *item, PikaContext *context, PikaOrientationType flip_type, gdouble axis, gboolean clip_result); void pika_item_rotate (PikaItem *item, PikaContext *context, PikaRotationType rotate_type, gdouble center_x, gdouble center_y, gboolean clip_result); void pika_item_transform (PikaItem *item, PikaContext *context, const PikaMatrix3 *matrix, PikaTransformDirection direction, PikaInterpolationType interpolation_type, PikaTransformResize clip_result, PikaProgress *progress); PikaTransformResize pika_item_get_clip (PikaItem *item, PikaTransformResize clip_result); gboolean pika_item_fill (PikaItem *item, GList *drawables, PikaFillOptions *fill_options, gboolean push_undo, PikaProgress *progress, GError **error); gboolean pika_item_stroke (PikaItem *item, GList *drawables, PikaContext *context, PikaStrokeOptions *stroke_options, PikaPaintOptions *paint_options, gboolean push_undo, PikaProgress *progress, GError **error); void pika_item_to_selection (PikaItem *item, PikaChannelOps op, gboolean antialias, gboolean feather, gdouble feather_radius_x, gdouble feather_radius_y); void pika_item_add_offset_node (PikaItem *item, GeglNode *node); void pika_item_remove_offset_node (PikaItem *item, GeglNode *node); gint pika_item_get_id (PikaItem *item); PikaItem * pika_item_get_by_id (Pika *pika, gint id); PikaTattoo pika_item_get_tattoo (PikaItem *item); void pika_item_set_tattoo (PikaItem *item, PikaTattoo tattoo); PikaImage * pika_item_get_image (PikaItem *item); void pika_item_set_image (PikaItem *item, PikaImage *image); void pika_item_replace_item (PikaItem *item, PikaItem *replace); void pika_item_set_parasites (PikaItem *item, PikaParasiteList *parasites); PikaParasiteList * pika_item_get_parasites (PikaItem *item); gboolean pika_item_parasite_validate (PikaItem *item, const PikaParasite *parasite, GError **error); void pika_item_parasite_attach (PikaItem *item, const PikaParasite *parasite, gboolean push_undo); void pika_item_parasite_detach (PikaItem *item, const gchar *name, gboolean push_undo); const PikaParasite * pika_item_parasite_find (PikaItem *item, const gchar *name); gchar ** pika_item_parasite_list (PikaItem *item); gboolean pika_item_set_visible (PikaItem *item, gboolean visible, gboolean push_undo); gboolean pika_item_get_visible (PikaItem *item); gboolean pika_item_is_visible (PikaItem *item); void pika_item_bind_visible_to_active (PikaItem *item, gboolean bind); void pika_item_set_color_tag (PikaItem *item, PikaColorTag color_tag, gboolean push_undo); PikaColorTag pika_item_get_color_tag (PikaItem *item); PikaColorTag pika_item_get_merged_color_tag (PikaItem *item); void pika_item_set_lock_content (PikaItem *item, gboolean lock_content, gboolean push_undo); gboolean pika_item_get_lock_content (PikaItem *item); gboolean pika_item_can_lock_content (PikaItem *item); gboolean pika_item_is_content_locked (PikaItem *item, PikaItem **locked_item); void pika_item_set_lock_position (PikaItem *item, gboolean lock_position, gboolean push_undo); gboolean pika_item_get_lock_position (PikaItem *item); gboolean pika_item_can_lock_position (PikaItem *item); gboolean pika_item_is_position_locked (PikaItem *item, PikaItem **locked_item); void pika_item_set_lock_visibility (PikaItem *item, gboolean lock_visibility, gboolean push_undo); gboolean pika_item_get_lock_visibility (PikaItem *item); gboolean pika_item_can_lock_visibility (PikaItem *item); gboolean pika_item_is_visibility_locked (PikaItem *item, PikaItem **locked_item); gboolean pika_item_mask_bounds (PikaItem *item, gint *x1, gint *y1, gint *x2, gint *y2); gboolean pika_item_mask_intersect (PikaItem *item, gint *x, gint *y, gint *width, gint *height); gboolean pika_item_is_in_set (PikaItem *item, PikaItemSet set); #endif /* __PIKA_ITEM_H__ */