/* 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 * * pikacontext.h * Copyright (C) 1999-2010 Michael Natterer * * 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_CONTEXT_H__ #define __PIKA_CONTEXT_H__ #include "pikaviewable.h" #define PIKA_TYPE_CONTEXT (pika_context_get_type ()) #define PIKA_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PIKA_TYPE_CONTEXT, PikaContext)) #define PIKA_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST (klass, PIKA_TYPE_CONTEXT, PikaContextClass)) #define PIKA_IS_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PIKA_TYPE_CONTEXT)) #define PIKA_IS_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PIKA_TYPE_CONTEXT)) #define PIKA_CONTEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS (obj, PIKA_TYPE_CONTEXT, PikaContextClass)) typedef struct _PikaContextClass PikaContextClass; /** * PikaContext: * * Holds state such as the active image, active display, active brush, * active foreground and background color, and so on. There can many * instances of contexts. The user context is what the user sees and * interacts with but there can also be contexts for docks and for * plug-ins. */ struct _PikaContext { PikaViewable parent_instance; Pika *pika; PikaContext *parent; guint32 defined_props; guint32 serialize_props; PikaImage *image; PikaDisplay *display; PikaToolInfo *tool_info; gchar *tool_name; PikaPaintInfo *paint_info; gchar *paint_name; PikaRGB foreground; PikaRGB background; gdouble opacity; PikaLayerMode paint_mode; PikaBrush *brush; gchar *brush_name; PikaDynamics *dynamics; gchar *dynamics_name; PikaMybrush *mybrush; gchar *mybrush_name; PikaPattern *pattern; gchar *pattern_name; PikaGradient *gradient; gchar *gradient_name; PikaPalette *palette; gchar *palette_name; PikaFont *font; gchar *font_name; PikaToolPreset *tool_preset; gchar *tool_preset_name; PikaBuffer *buffer; gchar *buffer_name; PikaImagefile *imagefile; gchar *imagefile_name; PikaTemplate *template; gchar *template_name; PikaLineArt *line_art; guint line_art_timeout_id; }; struct _PikaContextClass { PikaViewableClass parent_class; void (* image_changed) (PikaContext *context, PikaImage *image); void (* display_changed) (PikaContext *context, PikaDisplay *display); void (* tool_changed) (PikaContext *context, PikaToolInfo *tool_info); void (* paint_info_changed) (PikaContext *context, PikaPaintInfo *paint_info); void (* foreground_changed) (PikaContext *context, PikaRGB *color); void (* background_changed) (PikaContext *context, PikaRGB *color); void (* opacity_changed) (PikaContext *context, gdouble opacity); void (* paint_mode_changed) (PikaContext *context, PikaLayerMode paint_mode); void (* brush_changed) (PikaContext *context, PikaBrush *brush); void (* dynamics_changed) (PikaContext *context, PikaDynamics *dynamics); void (* mybrush_changed) (PikaContext *context, PikaMybrush *brush); void (* pattern_changed) (PikaContext *context, PikaPattern *pattern); void (* gradient_changed) (PikaContext *context, PikaGradient *gradient); void (* palette_changed) (PikaContext *context, PikaPalette *palette); void (* font_changed) (PikaContext *context, PikaFont *font); void (* tool_preset_changed)(PikaContext *context, PikaToolPreset *tool_preset); void (* buffer_changed) (PikaContext *context, PikaBuffer *buffer); void (* imagefile_changed) (PikaContext *context, PikaImagefile *imagefile); void (* template_changed) (PikaContext *context, PikaTemplate *template); void (* prop_name_changed) (PikaContext *context, PikaContextPropType prop); }; GType pika_context_get_type (void) G_GNUC_CONST; PikaContext * pika_context_new (Pika *pika, const gchar *name, PikaContext *template); PikaContext * pika_context_get_parent (PikaContext *context); void pika_context_set_parent (PikaContext *context, PikaContext *parent); /* define / undefinine context properties * * the value of an undefined property will be taken from the parent context. */ void pika_context_define_property (PikaContext *context, PikaContextPropType prop, gboolean defined); gboolean pika_context_property_defined (PikaContext *context, PikaContextPropType prop); void pika_context_define_properties (PikaContext *context, PikaContextPropMask props_mask, gboolean defined); /* specify which context properties will be serialized */ void pika_context_set_serialize_properties (PikaContext *context, PikaContextPropMask props_mask); PikaContextPropMask pika_context_get_serialize_properties (PikaContext *context); /* copying context properties */ void pika_context_copy_property (PikaContext *src, PikaContext *dest, PikaContextPropType prop); void pika_context_copy_properties (PikaContext *src, PikaContext *dest, PikaContextPropMask props_mask); /* manipulate by GType */ PikaContextPropType pika_context_type_to_property (GType type); const gchar * pika_context_type_to_prop_name (GType type); const gchar * pika_context_type_to_signal_name (GType type); PikaObject * pika_context_get_by_type (PikaContext *context, GType type); void pika_context_set_by_type (PikaContext *context, GType type, PikaObject *object); void pika_context_changed_by_type (PikaContext *context, GType type); /* image */ PikaImage * pika_context_get_image (PikaContext *context); void pika_context_set_image (PikaContext *context, PikaImage *image); void pika_context_image_changed (PikaContext *context); /* display */ PikaDisplay * pika_context_get_display (PikaContext *context); void pika_context_set_display (PikaContext *context, PikaDisplay *display); void pika_context_display_changed (PikaContext *context); /* tool */ PikaToolInfo * pika_context_get_tool (PikaContext *context); void pika_context_set_tool (PikaContext *context, PikaToolInfo *tool_info); void pika_context_tool_changed (PikaContext *context); /* paint info */ PikaPaintInfo * pika_context_get_paint_info (PikaContext *context); void pika_context_set_paint_info (PikaContext *context, PikaPaintInfo *paint_info); void pika_context_paint_info_changed (PikaContext *context); /* foreground color */ void pika_context_get_foreground (PikaContext *context, PikaRGB *color); void pika_context_set_foreground (PikaContext *context, const PikaRGB *color); void pika_context_foreground_changed (PikaContext *context); /* background color */ void pika_context_get_background (PikaContext *context, PikaRGB *color); void pika_context_set_background (PikaContext *context, const PikaRGB *color); void pika_context_background_changed (PikaContext *context); /* color utility functions */ void pika_context_set_default_colors (PikaContext *context); void pika_context_swap_colors (PikaContext *context); /* opacity */ gdouble pika_context_get_opacity (PikaContext *context); void pika_context_set_opacity (PikaContext *context, gdouble opacity); void pika_context_opacity_changed (PikaContext *context); /* paint mode */ PikaLayerMode pika_context_get_paint_mode (PikaContext *context); void pika_context_set_paint_mode (PikaContext *context, PikaLayerMode paint_mode); void pika_context_paint_mode_changed (PikaContext *context); /* brush */ PikaBrush * pika_context_get_brush (PikaContext *context); void pika_context_set_brush (PikaContext *context, PikaBrush *brush); void pika_context_brush_changed (PikaContext *context); /* dynamics */ PikaDynamics * pika_context_get_dynamics (PikaContext *context); void pika_context_set_dynamics (PikaContext *context, PikaDynamics *dynamics); void pika_context_dynamics_changed (PikaContext *context); /* mybrush */ PikaMybrush * pika_context_get_mybrush (PikaContext *context); void pika_context_set_mybrush (PikaContext *context, PikaMybrush *brush); void pika_context_mybrush_changed (PikaContext *context); /* pattern */ PikaPattern * pika_context_get_pattern (PikaContext *context); void pika_context_set_pattern (PikaContext *context, PikaPattern *pattern); void pika_context_pattern_changed (PikaContext *context); /* gradient */ PikaGradient * pika_context_get_gradient (PikaContext *context); void pika_context_set_gradient (PikaContext *context, PikaGradient *gradient); void pika_context_gradient_changed (PikaContext *context); /* palette */ PikaPalette * pika_context_get_palette (PikaContext *context); void pika_context_set_palette (PikaContext *context, PikaPalette *palette); void pika_context_palette_changed (PikaContext *context); /* font */ PikaFont * pika_context_get_font (PikaContext *context); void pika_context_set_font (PikaContext *context, PikaFont *font); const gchar * pika_context_get_font_name (PikaContext *context); void pika_context_set_font_name (PikaContext *context, const gchar *name); void pika_context_font_changed (PikaContext *context); /* tool_preset */ PikaToolPreset * pika_context_get_tool_preset (PikaContext *context); void pika_context_set_tool_preset (PikaContext *context, PikaToolPreset *tool_preset); void pika_context_tool_preset_changed (PikaContext *context); /* buffer */ PikaBuffer * pika_context_get_buffer (PikaContext *context); void pika_context_set_buffer (PikaContext *context, PikaBuffer *palette); void pika_context_buffer_changed (PikaContext *context); /* imagefile */ PikaImagefile * pika_context_get_imagefile (PikaContext *context); void pika_context_set_imagefile (PikaContext *context, PikaImagefile *imagefile); void pika_context_imagefile_changed (PikaContext *context); /* template */ PikaTemplate * pika_context_get_template (PikaContext *context); void pika_context_set_template (PikaContext *context, PikaTemplate *template); void pika_context_template_changed (PikaContext *context); /* line art */ PikaLineArt * pika_context_take_line_art (PikaContext *context); void pika_context_store_line_art (PikaContext *context, PikaLineArt *line_art); #endif /* __PIKA_CONTEXT_H__ */