/* 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 Mattisbvf * * 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_IMAGE_H__ #define __PIKA_IMAGE_H__ #include "pikaviewable.h" #define PIKA_IMAGE_ACTIVE_PARENT ((gpointer) 1) #define PIKA_TYPE_IMAGE (pika_image_get_type ()) #define PIKA_IMAGE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PIKA_TYPE_IMAGE, PikaImage)) #define PIKA_IMAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PIKA_TYPE_IMAGE, PikaImageClass)) #define PIKA_IS_IMAGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PIKA_TYPE_IMAGE)) #define PIKA_IS_IMAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PIKA_TYPE_IMAGE)) #define PIKA_IMAGE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PIKA_TYPE_IMAGE, PikaImageClass)) typedef struct _PikaImageClass PikaImageClass; typedef struct _PikaImagePrivate PikaImagePrivate; struct _PikaImage { PikaViewable parent_instance; Pika *pika; /* the PIKA the image belongs to */ PikaImagePrivate *priv; }; struct _PikaImageClass { PikaViewableClass parent_class; /* signals */ void (* mode_changed) (PikaImage *image); void (* precision_changed) (PikaImage *image); void (* alpha_changed) (PikaImage *image); void (* floating_selection_changed) (PikaImage *image); void (* selected_channels_changed) (PikaImage *image); void (* selected_vectors_changed) (PikaImage *image); void (* selected_layers_changed) (PikaImage *image); void (* component_visibility_changed) (PikaImage *image, PikaChannelType channel); void (* component_active_changed) (PikaImage *image, PikaChannelType channel); void (* mask_changed) (PikaImage *image); void (* resolution_changed) (PikaImage *image); void (* size_changed_detailed) (PikaImage *image, gint previous_origin_x, gint previous_origin_y, gint previous_width, gint previous_height); void (* unit_changed) (PikaImage *image); void (* quick_mask_changed) (PikaImage *image); void (* selection_invalidate) (PikaImage *image); void (* clean) (PikaImage *image, PikaDirtyMask dirty_mask); void (* dirty) (PikaImage *image, PikaDirtyMask dirty_mask); void (* saving) (PikaImage *image); void (* saved) (PikaImage *image, GFile *file); void (* exported) (PikaImage *image, GFile *file); void (* guide_added) (PikaImage *image, PikaGuide *guide); void (* guide_removed) (PikaImage *image, PikaGuide *guide); void (* guide_moved) (PikaImage *image, PikaGuide *guide); void (* sample_point_added) (PikaImage *image, PikaSamplePoint *sample_point); void (* sample_point_removed) (PikaImage *image, PikaSamplePoint *sample_point); void (* sample_point_moved) (PikaImage *image, PikaSamplePoint *sample_point); void (* parasite_attached) (PikaImage *image, const gchar *name); void (* parasite_detached) (PikaImage *image, const gchar *name); void (* colormap_changed) (PikaImage *image, gint color_index); void (* undo_event) (PikaImage *image, PikaUndoEvent event, PikaUndo *undo); void (* layer_sets_changed) (PikaImage *image); void (* channel_sets_changed) (PikaImage *image); void (* vectors_sets_changed) (PikaImage *image); }; GType pika_image_get_type (void) G_GNUC_CONST; PikaImage * pika_image_new (Pika *pika, gint width, gint height, PikaImageBaseType base_type, PikaPrecision precision); gint64 pika_image_estimate_memsize (PikaImage *image, PikaComponentType component_type, gint width, gint height); PikaImageBaseType pika_image_get_base_type (PikaImage *image); PikaComponentType pika_image_get_component_type (PikaImage *image); PikaPrecision pika_image_get_precision (PikaImage *image); const Babl * pika_image_get_format (PikaImage *image, PikaImageBaseType base_type, PikaPrecision precision, gboolean with_alpha, const Babl *space); const Babl * pika_image_get_layer_space (PikaImage *image); const Babl * pika_image_get_layer_format (PikaImage *image, gboolean with_alpha); const Babl * pika_image_get_channel_format (PikaImage *image); const Babl * pika_image_get_mask_format (PikaImage *image); PikaLayerMode pika_image_get_default_new_layer_mode (PikaImage *image); void pika_image_unset_default_new_layer_mode (PikaImage *image); gint pika_image_get_id (PikaImage *image); PikaImage * pika_image_get_by_id (Pika *pika, gint id); GFile * pika_image_get_file (PikaImage *image); GFile * pika_image_get_untitled_file (PikaImage *image); GFile * pika_image_get_file_or_untitled (PikaImage *image); GFile * pika_image_get_imported_file (PikaImage *image); GFile * pika_image_get_exported_file (PikaImage *image); GFile * pika_image_get_save_a_copy_file (PikaImage *image); GFile * pika_image_get_any_file (PikaImage *image); void pika_image_set_file (PikaImage *image, GFile *file); void pika_image_set_imported_file (PikaImage *image, GFile *file); void pika_image_set_exported_file (PikaImage *image, GFile *file); void pika_image_set_save_a_copy_file (PikaImage *image, GFile *file); const gchar * pika_image_get_display_name (PikaImage *image); const gchar * pika_image_get_display_path (PikaImage *image); void pika_image_set_load_proc (PikaImage *image, PikaPlugInProcedure *proc); PikaPlugInProcedure * pika_image_get_load_proc (PikaImage *image); void pika_image_set_save_proc (PikaImage *image, PikaPlugInProcedure *proc); PikaPlugInProcedure * pika_image_get_save_proc (PikaImage *image); void pika_image_saving (PikaImage *image); void pika_image_saved (PikaImage *image, GFile *file); void pika_image_set_export_proc (PikaImage *image, PikaPlugInProcedure *proc); PikaPlugInProcedure * pika_image_get_export_proc (PikaImage *image); void pika_image_exported (PikaImage *image, GFile *file); gint pika_image_get_xcf_version (PikaImage *image, gboolean zlib_compression, gint *pika_version, const gchar **version_string, gchar **version_reason); void pika_image_set_xcf_compression (PikaImage *image, gboolean compression); gboolean pika_image_get_xcf_compression (PikaImage *image); void pika_image_set_resolution (PikaImage *image, gdouble xres, gdouble yres); void pika_image_get_resolution (PikaImage *image, gdouble *xres, gdouble *yres); void pika_image_resolution_changed (PikaImage *image); void pika_image_set_unit (PikaImage *image, PikaUnit unit); PikaUnit pika_image_get_unit (PikaImage *image); void pika_image_unit_changed (PikaImage *image); gint pika_image_get_width (PikaImage *image); gint pika_image_get_height (PikaImage *image); gboolean pika_image_has_alpha (PikaImage *image); gboolean pika_image_is_empty (PikaImage *image); void pika_image_set_floating_selection (PikaImage *image, PikaLayer *floating_sel); PikaLayer * pika_image_get_floating_selection (PikaImage *image); void pika_image_floating_selection_changed (PikaImage *image); PikaChannel * pika_image_get_mask (PikaImage *image); void pika_image_mask_changed (PikaImage *image); gboolean pika_image_mask_intersect (PikaImage *image, GList *items, gint *x, gint *y, gint *width, gint *height); /* image components */ const Babl * pika_image_get_component_format (PikaImage *image, PikaChannelType channel); gint pika_image_get_component_index (PikaImage *image, PikaChannelType channel); void pika_image_set_component_active (PikaImage *image, PikaChannelType type, gboolean active); gboolean pika_image_get_component_active (PikaImage *image, PikaChannelType type); void pika_image_get_active_array (PikaImage *image, gboolean *components); PikaComponentMask pika_image_get_active_mask (PikaImage *image); void pika_image_set_component_visible (PikaImage *image, PikaChannelType type, gboolean visible); gboolean pika_image_get_component_visible (PikaImage *image, PikaChannelType type); void pika_image_get_visible_array (PikaImage *image, gboolean *components); PikaComponentMask pika_image_get_visible_mask (PikaImage *image); /* emitting image signals */ void pika_image_mode_changed (PikaImage *image); void pika_image_precision_changed (PikaImage *image); void pika_image_alpha_changed (PikaImage *image); void pika_image_invalidate (PikaImage *image, gint x, gint y, gint width, gint height); void pika_image_invalidate_all (PikaImage *image); void pika_image_guide_added (PikaImage *image, PikaGuide *guide); void pika_image_guide_removed (PikaImage *image, PikaGuide *guide); void pika_image_guide_moved (PikaImage *image, PikaGuide *guide); void pika_image_sample_point_added (PikaImage *image, PikaSamplePoint *sample_point); void pika_image_sample_point_removed (PikaImage *image, PikaSamplePoint *sample_point); void pika_image_sample_point_moved (PikaImage *image, PikaSamplePoint *sample_point); void pika_image_colormap_changed (PikaImage *image, gint col); void pika_image_selection_invalidate (PikaImage *image); void pika_image_quick_mask_changed (PikaImage *image); void pika_image_size_changed_detailed (PikaImage *image, gint previous_origin_x, gint previous_origin_y, gint previous_width, gint previous_height); void pika_image_undo_event (PikaImage *image, PikaUndoEvent event, PikaUndo *undo); /* dirty counters */ gint pika_image_dirty (PikaImage *image, PikaDirtyMask dirty_mask); gint pika_image_clean (PikaImage *image, PikaDirtyMask dirty_mask); void pika_image_clean_all (PikaImage *image); void pika_image_export_clean_all (PikaImage *image); gint pika_image_is_dirty (PikaImage *image); gboolean pika_image_is_export_dirty (PikaImage *image); gint64 pika_image_get_dirty_time (PikaImage *image); /* flush this image's displays */ void pika_image_flush (PikaImage *image); /* display / instance counters */ gint pika_image_get_display_count (PikaImage *image); void pika_image_inc_display_count (PikaImage *image); void pika_image_dec_display_count (PikaImage *image); gint pika_image_get_instance_count (PikaImage *image); void pika_image_inc_instance_count (PikaImage *image); void pika_image_inc_show_all_count (PikaImage *image); void pika_image_dec_show_all_count (PikaImage *image); /* parasites */ const PikaParasite * pika_image_parasite_find (PikaImage *image, const gchar *name); gchar ** pika_image_parasite_list (PikaImage *image); gboolean pika_image_parasite_validate (PikaImage *image, const PikaParasite *parasite, GError **error); void pika_image_parasite_attach (PikaImage *image, const PikaParasite *parasite, gboolean push_undo); void pika_image_parasite_detach (PikaImage *image, const gchar *name, gboolean push_undo); /* tattoos */ PikaTattoo pika_image_get_new_tattoo (PikaImage *image); gboolean pika_image_set_tattoo_state (PikaImage *image, PikaTattoo val); PikaTattoo pika_image_get_tattoo_state (PikaImage *image); /* projection */ PikaProjection * pika_image_get_projection (PikaImage *image); /* layers / channels / vectors */ PikaItemTree * pika_image_get_layer_tree (PikaImage *image); PikaItemTree * pika_image_get_channel_tree (PikaImage *image); PikaItemTree * pika_image_get_vectors_tree (PikaImage *image); PikaContainer * pika_image_get_layers (PikaImage *image); PikaContainer * pika_image_get_channels (PikaImage *image); PikaContainer * pika_image_get_vectors (PikaImage *image); gint pika_image_get_n_layers (PikaImage *image); gint pika_image_get_n_channels (PikaImage *image); gint pika_image_get_n_vectors (PikaImage *image); GList * pika_image_get_layer_iter (PikaImage *image); GList * pika_image_get_channel_iter (PikaImage *image); GList * pika_image_get_vectors_iter (PikaImage *image); GList * pika_image_get_layer_list (PikaImage *image); GList * pika_image_get_channel_list (PikaImage *image); GList * pika_image_get_vectors_list (PikaImage *image); void pika_image_unset_selected_channels (PikaImage *image); gboolean pika_image_is_selected_drawable (PikaImage *image, PikaDrawable *drawable); gboolean pika_image_equal_selected_drawables (PikaImage *image, GList *drawables); GList * pika_image_get_selected_drawables (PikaImage *image); GList * pika_image_get_selected_layers (PikaImage *image); GList * pika_image_get_selected_channels (PikaImage *image); GList * pika_image_get_selected_vectors (PikaImage *image); void pika_image_set_selected_layers (PikaImage *image, GList *layers); void pika_image_set_selected_channels (PikaImage *image, GList *channels); void pika_image_set_selected_vectors (PikaImage *image, GList *vectors); PikaLayer * pika_image_get_layer_by_tattoo (PikaImage *image, PikaTattoo tattoo); PikaChannel * pika_image_get_channel_by_tattoo (PikaImage *image, PikaTattoo tattoo); PikaVectors * pika_image_get_vectors_by_tattoo (PikaImage *image, PikaTattoo tattoo); PikaLayer * pika_image_get_layer_by_name (PikaImage *image, const gchar *name); PikaChannel * pika_image_get_channel_by_name (PikaImage *image, const gchar *name); PikaVectors * pika_image_get_vectors_by_name (PikaImage *image, const gchar *name); gboolean pika_image_reorder_item (PikaImage *image, PikaItem *item, PikaItem *new_parent, gint new_index, gboolean push_undo, const gchar *undo_desc); gboolean pika_image_raise_item (PikaImage *image, PikaItem *item, GError **error); gboolean pika_image_raise_item_to_top (PikaImage *image, PikaItem *item); gboolean pika_image_lower_item (PikaImage *image, PikaItem *item, GError **error); gboolean pika_image_lower_item_to_bottom (PikaImage *image, PikaItem *item); gboolean pika_image_add_layer (PikaImage *image, PikaLayer *layer, PikaLayer *parent, gint position, gboolean push_undo); void pika_image_remove_layer (PikaImage *image, PikaLayer *layer, gboolean push_undo, GList *new_selected); void pika_image_add_layers (PikaImage *image, GList *layers, PikaLayer *parent, gint position, gint x, gint y, gint width, gint height, const gchar *undo_desc); void pika_image_store_item_set (PikaImage *image, PikaItemList *set); gboolean pika_image_unlink_item_set (PikaImage *image, PikaItemList *set); GList * pika_image_get_stored_item_sets (PikaImage *image, GType item_type); void pika_image_select_item_set (PikaImage *image, PikaItemList *set); void pika_image_add_item_set (PikaImage *image, PikaItemList *set); void pika_image_remove_item_set (PikaImage *image, PikaItemList *set); void pika_image_intersect_item_set (PikaImage *image, PikaItemList *set); gboolean pika_image_add_channel (PikaImage *image, PikaChannel *channel, PikaChannel *parent, gint position, gboolean push_undo); void pika_image_remove_channel (PikaImage *image, PikaChannel *channel, gboolean push_undo, GList *new_selected); gboolean pika_image_add_vectors (PikaImage *image, PikaVectors *vectors, PikaVectors *parent, gint position, gboolean push_undo); void pika_image_remove_vectors (PikaImage *image, PikaVectors *vectors, gboolean push_undo, GList *new_selected); gboolean pika_image_add_hidden_item (PikaImage *image, PikaItem *item); void pika_image_remove_hidden_item (PikaImage *image, PikaItem *item); gboolean pika_image_is_hidden_item (PikaImage *image, PikaItem *item); gboolean pika_image_coords_in_active_pickable (PikaImage *image, const PikaCoords *coords, gboolean show_all, gboolean sample_merged, gboolean selected_only); void pika_image_invalidate_previews (PikaImage *image); void pika_image_set_converting (PikaImage *image, gboolean converting); gboolean pika_image_get_converting (PikaImage *image); #endif /* __PIKA_IMAGE_H__ */