PIKApp/app/core/pikaimage.h

505 lines
30 KiB
C
Raw Normal View History

2023-09-26 00:35:21 +02:00
/* 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 <https://www.gnu.org/licenses/>.
*/
#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__ */