mirror of https://github.com/GNOME/gimp.git
added the possibility to store the current tool, FG/BG color, brush,
1999-10-17 Michael Natterer <mitch@gimp.org> * app/gimpcontext.[ch]: added the possibility to store the current tool, FG/BG color, brush, pattern and gradient, but don't use these attributes yet. Before replacing the get/set color/brush/... functions with context functions, I'll have to change the "parent context" implementation to something where the children catch the parent's color/brush/..._changed signals. Finally, updating the indicator_area, device_status, tool_options etc. will be done by connecting to their own context's "*_changed" signals, which will be much cleaner than calling the update functions from various places. (I think this is a "consistency fix", please let me know if you consider it a new feature).
This commit is contained in:
parent
ec40ac728b
commit
f650984006
18
ChangeLog
18
ChangeLog
|
@ -1,3 +1,21 @@
|
|||
1999-10-17 Michael Natterer <mitch@gimp.org>
|
||||
|
||||
* app/gimpcontext.[ch]: added the possibility to store the current
|
||||
tool, FG/BG color, brush, pattern and gradient, but don't use
|
||||
these attributes yet.
|
||||
|
||||
Before replacing the get/set color/brush/... functions with
|
||||
context functions, I'll have to change the "parent context"
|
||||
implementation to something where the children catch the parent's
|
||||
color/brush/..._changed signals.
|
||||
Finally, updating the indicator_area, device_status, tool_options
|
||||
etc. will be done by connecting to their own context's "*_changed"
|
||||
signals, which will be much cleaner than calling the update
|
||||
functions from various places.
|
||||
|
||||
(I think this is a "consistency fix", please let me know if you
|
||||
consider it a new feature).
|
||||
|
||||
Sun Oct 17 00:55:38 CEST 1999 Marc Lehmann <marc@gimp.org>
|
||||
|
||||
* (221 files): Corrected ~20 pdb function names by choosing the
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#include "gimpcontext.h"
|
||||
|
@ -23,11 +22,11 @@
|
|||
|
||||
#define context_return_if_fail(context) \
|
||||
g_return_if_fail ((context) != NULL); \
|
||||
g_return_if_fail (GIMP_IS_CONTEXT (context));
|
||||
g_return_if_fail (GIMP_IS_CONTEXT (context))
|
||||
|
||||
#define context_return_val_if_fail(context,val) \
|
||||
g_return_val_if_fail ((context) != NULL, (val)); \
|
||||
g_return_val_if_fail (GIMP_IS_CONTEXT (context), (val));
|
||||
g_return_val_if_fail (GIMP_IS_CONTEXT (context), (val))
|
||||
|
||||
#define context_check_current(context) \
|
||||
((context) = (context) ? (context) : current_context)
|
||||
|
@ -38,17 +37,29 @@
|
|||
|
||||
enum {
|
||||
ARG_0,
|
||||
ARG_IMAGE,
|
||||
ARG_DISPLAY,
|
||||
ARG_TOOL,
|
||||
ARG_FOREGROUND,
|
||||
ARG_BACKGROUND,
|
||||
ARG_OPACITY,
|
||||
ARG_PAINT_MODE,
|
||||
ARG_IMAGE,
|
||||
ARG_DISPLAY
|
||||
ARG_BRUSH,
|
||||
ARG_PATTERN,
|
||||
ARG_GRADIENT
|
||||
};
|
||||
|
||||
enum {
|
||||
OPACITY_CHANGED,
|
||||
PAINT_MODE_CHANGED,
|
||||
IMAGE_CHANGED,
|
||||
DISPLAY_CHANGED,
|
||||
TOOL_CHANGED,
|
||||
FOREGROUND_CHANGED,
|
||||
BACKGROUND_CHANGED,
|
||||
OPACITY_CHANGED,
|
||||
PAINT_MODE_CHANGED,
|
||||
BRUSH_CHANGED,
|
||||
PATTERN_CHANGED,
|
||||
GRADIENT_CHANGED,
|
||||
LAST_SIGNAL
|
||||
};
|
||||
|
||||
|
@ -69,7 +80,7 @@ static GimpContext * default_context = NULL;
|
|||
static GimpContext * standard_context = NULL;
|
||||
|
||||
|
||||
/* private functions ******************************************************/
|
||||
/* private functions *******************************************************/
|
||||
|
||||
static void
|
||||
gimp_context_set_arg (GtkObject *object,
|
||||
|
@ -82,17 +93,35 @@ gimp_context_set_arg (GtkObject *object,
|
|||
|
||||
switch (arg_id)
|
||||
{
|
||||
case ARG_IMAGE:
|
||||
gimp_context_set_image (context, GTK_VALUE_POINTER (*arg));
|
||||
break;
|
||||
case ARG_DISPLAY:
|
||||
gimp_context_set_display (context, GTK_VALUE_POINTER (*arg));
|
||||
break;
|
||||
case ARG_TOOL:
|
||||
gimp_context_set_tool (context, GTK_VALUE_INT (*arg));
|
||||
break;
|
||||
case ARG_FOREGROUND:
|
||||
gimp_context_set_foreground (context, GTK_VALUE_POINTER (*arg));
|
||||
break;
|
||||
case ARG_BACKGROUND:
|
||||
gimp_context_set_background (context, GTK_VALUE_POINTER (*arg));
|
||||
break;
|
||||
case ARG_OPACITY:
|
||||
gimp_context_set_opacity (context, GTK_VALUE_DOUBLE (*arg));
|
||||
break;
|
||||
case ARG_PAINT_MODE:
|
||||
gimp_context_set_paint_mode (context, GTK_VALUE_INT (*arg));
|
||||
break;
|
||||
case ARG_IMAGE:
|
||||
gimp_context_set_image (context, GTK_VALUE_POINTER (*arg));
|
||||
case ARG_BRUSH:
|
||||
gimp_context_set_brush (context, GTK_VALUE_POINTER (*arg));
|
||||
break;
|
||||
case ARG_DISPLAY:
|
||||
gimp_context_set_display (context, GTK_VALUE_POINTER (*arg));
|
||||
case ARG_PATTERN:
|
||||
gimp_context_set_pattern (context, GTK_VALUE_POINTER (*arg));
|
||||
break;
|
||||
case ARG_GRADIENT:
|
||||
gimp_context_set_gradient (context, GTK_VALUE_POINTER (*arg));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -110,17 +139,49 @@ gimp_context_get_arg (GtkObject *object,
|
|||
|
||||
switch (arg_id)
|
||||
{
|
||||
case ARG_IMAGE:
|
||||
GTK_VALUE_POINTER (*arg) = gimp_context_get_image (context);
|
||||
break;
|
||||
case ARG_DISPLAY:
|
||||
GTK_VALUE_POINTER (*arg) = gimp_context_get_display (context);
|
||||
break;
|
||||
case ARG_TOOL:
|
||||
GTK_VALUE_INT (*arg) = gimp_context_get_tool (context);
|
||||
break;
|
||||
case ARG_FOREGROUND:
|
||||
{
|
||||
guchar *dest = GTK_VALUE_POINTER (*arg);
|
||||
guchar src[3];
|
||||
gimp_context_get_foreground (context, src);
|
||||
dest[0] = src[0];
|
||||
dest[1] = src[1];
|
||||
dest[2] = src[2];
|
||||
}
|
||||
break;
|
||||
case ARG_BACKGROUND:
|
||||
{
|
||||
guchar *dest = GTK_VALUE_POINTER (*arg);
|
||||
guchar src[3];
|
||||
gimp_context_get_background (context, src);
|
||||
dest[0] = src[0];
|
||||
dest[1] = src[1];
|
||||
dest[2] = src[2];
|
||||
}
|
||||
break;
|
||||
case ARG_OPACITY:
|
||||
GTK_VALUE_DOUBLE (*arg) = gimp_context_get_opacity (context);
|
||||
break;
|
||||
case ARG_PAINT_MODE:
|
||||
GTK_VALUE_INT (*arg) = gimp_context_get_paint_mode (context);
|
||||
break;
|
||||
case ARG_IMAGE:
|
||||
GTK_VALUE_POINTER (*arg) = gimp_context_get_image (context);
|
||||
case ARG_BRUSH:
|
||||
GTK_VALUE_POINTER (*arg) = gimp_context_get_brush (context);
|
||||
break;
|
||||
case ARG_DISPLAY:
|
||||
GTK_VALUE_POINTER (*arg) = gimp_context_get_display (context);
|
||||
case ARG_PATTERN:
|
||||
GTK_VALUE_POINTER (*arg) = gimp_context_get_pattern (context);
|
||||
break;
|
||||
case ARG_GRADIENT:
|
||||
GTK_VALUE_POINTER (*arg) = gimp_context_get_gradient (context);
|
||||
break;
|
||||
default:
|
||||
arg->type = GTK_TYPE_INVALID;
|
||||
|
@ -151,33 +212,29 @@ gimp_context_class_init (GimpContextClass *klass)
|
|||
|
||||
object_class = GTK_OBJECT_CLASS (klass);
|
||||
|
||||
gtk_object_add_arg_type ("GimpContext::opacity",
|
||||
GTK_TYPE_DOUBLE, GTK_ARG_READWRITE, ARG_OPACITY);
|
||||
gtk_object_add_arg_type ("GimpContext::paint_mode",
|
||||
GTK_TYPE_INT, GTK_ARG_READWRITE, ARG_PAINT_MODE);
|
||||
gtk_object_add_arg_type ("GimpContext::image",
|
||||
GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_IMAGE);
|
||||
gtk_object_add_arg_type ("GimpContext::display",
|
||||
GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_DISPLAY);
|
||||
gtk_object_add_arg_type ("GimpContext::tool",
|
||||
GTK_TYPE_INT, GTK_ARG_READWRITE, ARG_TOOL);
|
||||
gtk_object_add_arg_type ("GimpContext::foreground",
|
||||
GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_FOREGROUND);
|
||||
gtk_object_add_arg_type ("GimpContext::background",
|
||||
GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_BACKGROUND);
|
||||
gtk_object_add_arg_type ("GimpContext::opacity",
|
||||
GTK_TYPE_DOUBLE, GTK_ARG_READWRITE, ARG_OPACITY);
|
||||
gtk_object_add_arg_type ("GimpContext::paint_mode",
|
||||
GTK_TYPE_INT, GTK_ARG_READWRITE, ARG_PAINT_MODE);
|
||||
gtk_object_add_arg_type ("GimpContext::brush",
|
||||
GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_BRUSH);
|
||||
gtk_object_add_arg_type ("GimpContext::pattern",
|
||||
GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_PATTERN);
|
||||
gtk_object_add_arg_type ("GimpContext::gradient",
|
||||
GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_GRADIENT);
|
||||
|
||||
parent_class = gtk_type_class (gimp_object_get_type ());
|
||||
|
||||
gimp_context_signals[OPACITY_CHANGED] =
|
||||
gimp_signal_new ("opacity_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (GimpContextClass,
|
||||
opacity_changed),
|
||||
gimp_sigtype_double);
|
||||
|
||||
gimp_context_signals[PAINT_MODE_CHANGED] =
|
||||
gimp_signal_new ("paint_mode_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (GimpContextClass,
|
||||
paint_mode_changed),
|
||||
gimp_sigtype_int);
|
||||
|
||||
gimp_context_signals[IMAGE_CHANGED] =
|
||||
gimp_signal_new ("image_changed",
|
||||
GTK_RUN_FIRST,
|
||||
|
@ -194,6 +251,70 @@ gimp_context_class_init (GimpContextClass *klass)
|
|||
display_changed),
|
||||
gimp_sigtype_pointer);
|
||||
|
||||
gimp_context_signals[TOOL_CHANGED] =
|
||||
gimp_signal_new ("tool_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (GimpContextClass,
|
||||
tool_changed),
|
||||
gimp_sigtype_int);
|
||||
|
||||
gimp_context_signals[FOREGROUND_CHANGED] =
|
||||
gimp_signal_new ("foreground_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (GimpContextClass,
|
||||
foreground_changed),
|
||||
gimp_sigtype_pointer);
|
||||
|
||||
gimp_context_signals[BACKGROUND_CHANGED] =
|
||||
gimp_signal_new ("background_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (GimpContextClass,
|
||||
background_changed),
|
||||
gimp_sigtype_pointer);
|
||||
|
||||
gimp_context_signals[OPACITY_CHANGED] =
|
||||
gimp_signal_new ("opacity_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (GimpContextClass,
|
||||
opacity_changed),
|
||||
gimp_sigtype_double);
|
||||
|
||||
gimp_context_signals[PAINT_MODE_CHANGED] =
|
||||
gimp_signal_new ("paint_mode_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (GimpContextClass,
|
||||
paint_mode_changed),
|
||||
gimp_sigtype_int);
|
||||
|
||||
gimp_context_signals[BRUSH_CHANGED] =
|
||||
gimp_signal_new ("brush_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (GimpContextClass,
|
||||
brush_changed),
|
||||
gimp_sigtype_pointer);
|
||||
|
||||
gimp_context_signals[PATTERN_CHANGED] =
|
||||
gimp_signal_new ("pattern_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (GimpContextClass,
|
||||
pattern_changed),
|
||||
gimp_sigtype_pointer);
|
||||
|
||||
gimp_context_signals[GRADIENT_CHANGED] =
|
||||
gimp_signal_new ("gradient_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (GimpContextClass,
|
||||
gradient_changed),
|
||||
gimp_sigtype_pointer);
|
||||
|
||||
gtk_object_class_add_signals (object_class, gimp_context_signals,
|
||||
LAST_SIGNAL);
|
||||
|
||||
|
@ -201,10 +322,16 @@ gimp_context_class_init (GimpContextClass *klass)
|
|||
object_class->get_arg = gimp_context_get_arg;
|
||||
object_class->destroy = gimp_context_destroy;
|
||||
|
||||
klass->opacity_changed = NULL;
|
||||
klass->paint_mode_changed = NULL;
|
||||
klass->image_changed = NULL;
|
||||
klass->display_changed = NULL;
|
||||
klass->tool_changed = NULL;
|
||||
klass->foreground_changed = NULL;
|
||||
klass->background_changed = NULL;
|
||||
klass->opacity_changed = NULL;
|
||||
klass->paint_mode_changed = NULL;
|
||||
klass->brush_changed = NULL;
|
||||
klass->pattern_changed = NULL;
|
||||
klass->gradient_changed = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -213,8 +340,29 @@ gimp_context_init (GimpContext *context)
|
|||
context->name = NULL;
|
||||
context->parent = NULL;
|
||||
|
||||
/* Values to be taken from the parent context by default */
|
||||
|
||||
context->image_defined = FALSE;
|
||||
context->image = NULL;
|
||||
|
||||
context->display_defined = FALSE;
|
||||
context->display = NULL;
|
||||
|
||||
context->tool_defined = FALSE;
|
||||
context->tool = RECT_SELECT;
|
||||
|
||||
/* Values defined by default */
|
||||
|
||||
context->foreground_defined = TRUE;
|
||||
context->foreground[0] = 255;
|
||||
context->foreground[1] = 255;
|
||||
context->foreground[2] = 255;
|
||||
|
||||
context->background_defined = TRUE;
|
||||
context->background[0] = 0;
|
||||
context->background[1] = 0;
|
||||
context->background[2] = 0;
|
||||
|
||||
context->opacity_defined = TRUE;
|
||||
context->opacity = 1.0;
|
||||
|
||||
|
@ -223,14 +371,17 @@ gimp_context_init (GimpContext *context)
|
|||
|
||||
/* Values to be taken from the parent context by default */
|
||||
|
||||
context->image_defined = FALSE;
|
||||
context->image = NULL;
|
||||
context->brush_defined = FALSE;
|
||||
context->brush = NULL;
|
||||
|
||||
context->display_defined = FALSE;
|
||||
context->display = NULL;
|
||||
context->pattern_defined = FALSE;
|
||||
context->pattern = NULL;
|
||||
|
||||
context->gradient_defined = FALSE;
|
||||
context->gradient = NULL;
|
||||
}
|
||||
|
||||
/* public functions *******************************************************/
|
||||
/* public functions ********************************************************/
|
||||
|
||||
GtkType
|
||||
gimp_context_get_type (void)
|
||||
|
@ -276,21 +427,41 @@ gimp_context_new (gchar *name,
|
|||
|
||||
if (template)
|
||||
{
|
||||
context->opacity = gimp_context_get_opacity (template);
|
||||
context->paint_mode = gimp_context_get_paint_mode (template);
|
||||
context->image = gimp_context_get_image (template);
|
||||
context->display = gimp_context_get_display (template);
|
||||
guchar col[3];
|
||||
|
||||
context->image = gimp_context_get_image (template);
|
||||
context->display = gimp_context_get_display (template);
|
||||
context->tool = gimp_context_get_tool (template);
|
||||
gimp_context_get_foreground (template, col);
|
||||
context->foreground[0] = col[0];
|
||||
context->foreground[1] = col[1];
|
||||
context->foreground[2] = col[2];
|
||||
gimp_context_get_background (template, col);
|
||||
context->background[0] = col[0];
|
||||
context->background[1] = col[1];
|
||||
context->background[2] = col[2];
|
||||
context->opacity = gimp_context_get_opacity (template);
|
||||
context->paint_mode = gimp_context_get_paint_mode (template);
|
||||
context->brush = gimp_context_get_brush (template);
|
||||
context->pattern = gimp_context_get_pattern (template);
|
||||
context->gradient = gimp_context_get_gradient (template);
|
||||
|
||||
context->opacity_defined = template->opacity_defined;
|
||||
context->paint_mode_defined = template->paint_mode_defined;
|
||||
context->image_defined = template->image_defined;
|
||||
context->display_defined = template->display_defined;
|
||||
context->tool_defined = template->tool_defined;
|
||||
context->foreground_defined = template->foreground_defined;
|
||||
context->background_defined = template->background_defined;
|
||||
context->opacity_defined = template->opacity_defined;
|
||||
context->paint_mode_defined = template->paint_mode_defined;
|
||||
context->brush_defined = template->brush_defined;
|
||||
context->pattern_defined = template->pattern_defined;
|
||||
context->gradient_defined = template->gradient_defined;
|
||||
}
|
||||
|
||||
return context;
|
||||
}
|
||||
|
||||
/* getting/setting the special contexts ***********************************/
|
||||
/* getting/setting the special contexts ************************************/
|
||||
|
||||
GimpContext *
|
||||
gimp_context_get_current (void)
|
||||
|
@ -341,7 +512,7 @@ gimp_context_get_standard (void)
|
|||
return standard_context;
|
||||
}
|
||||
|
||||
/* functions manipulating a single context ********************************/
|
||||
/* functions manipulating a single context *********************************/
|
||||
|
||||
gchar *
|
||||
gimp_context_get_name (GimpContext *context)
|
||||
|
@ -380,99 +551,7 @@ gimp_context_set_parent (GimpContext *context,
|
|||
* functions into a single macro call
|
||||
*/
|
||||
|
||||
/* opacity */
|
||||
|
||||
gdouble
|
||||
gimp_context_get_opacity (GimpContext *context)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_val_if_fail (context, 1.0);
|
||||
context_find_defined (context, opacity_defined);
|
||||
|
||||
return context->opacity;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_set_opacity (GimpContext *context,
|
||||
gdouble opacity)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_if_fail (context);
|
||||
context_find_defined (context, opacity_defined);
|
||||
|
||||
context->opacity = opacity;
|
||||
gtk_signal_emit (GTK_OBJECT (context),
|
||||
gimp_context_signals[OPACITY_CHANGED],
|
||||
opacity);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_context_opacity_defined (GimpContext *context)
|
||||
{
|
||||
context_return_val_if_fail (context, FALSE);
|
||||
|
||||
return context->opacity_defined;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_define_opacity (GimpContext *context,
|
||||
gboolean defined)
|
||||
{
|
||||
context_return_if_fail (context);
|
||||
|
||||
if (defined)
|
||||
context->opacity = gimp_context_get_opacity (context);
|
||||
|
||||
context->opacity_defined = defined;
|
||||
}
|
||||
|
||||
/* paint mode */
|
||||
|
||||
LayerModeEffects
|
||||
gimp_context_get_paint_mode (GimpContext *context)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_val_if_fail (context, 0);
|
||||
context_find_defined (context, paint_mode_defined);
|
||||
|
||||
return context->paint_mode;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_set_paint_mode (GimpContext *context,
|
||||
LayerModeEffects paint_mode)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_if_fail (context);
|
||||
context_find_defined (context, paint_mode_defined);
|
||||
|
||||
context->paint_mode = paint_mode;
|
||||
gtk_signal_emit (GTK_OBJECT(context),
|
||||
gimp_context_signals[PAINT_MODE_CHANGED],
|
||||
paint_mode);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_context_paint_mode_defined (GimpContext *context)
|
||||
{
|
||||
context_return_val_if_fail (context, FALSE);
|
||||
|
||||
return context->paint_mode_defined;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_define_paint_mode (GimpContext *context,
|
||||
gboolean defined)
|
||||
{
|
||||
context_return_if_fail (context);
|
||||
|
||||
if (defined)
|
||||
context->paint_mode = gimp_context_get_paint_mode (context);
|
||||
|
||||
context->paint_mode_defined = defined;
|
||||
}
|
||||
|
||||
/* image */
|
||||
/* image *******************************************************************/
|
||||
|
||||
GimpImage *
|
||||
gimp_context_get_image (GimpContext *context)
|
||||
|
@ -520,7 +599,7 @@ gimp_context_define_image (GimpContext *context,
|
|||
context->image_defined = defined;
|
||||
}
|
||||
|
||||
/* display */
|
||||
/* display *****************************************************************/
|
||||
|
||||
GDisplay *
|
||||
gimp_context_get_display (GimpContext *context)
|
||||
|
@ -574,3 +653,417 @@ gimp_context_define_display (GimpContext *context,
|
|||
|
||||
context->display_defined = defined;
|
||||
}
|
||||
|
||||
/* tool ********************************************************************/
|
||||
|
||||
ToolType
|
||||
gimp_context_get_tool (GimpContext *context)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_val_if_fail (context, 0);
|
||||
context_find_defined (context, tool_defined);
|
||||
|
||||
return context->tool;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_set_tool (GimpContext *context,
|
||||
ToolType tool)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_if_fail (context);
|
||||
context_find_defined (context, tool_defined);
|
||||
|
||||
if (context->tool == tool) return;
|
||||
|
||||
context->tool = tool;
|
||||
gtk_signal_emit (GTK_OBJECT (context),
|
||||
gimp_context_signals[TOOL_CHANGED],
|
||||
tool);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_context_tool_defined (GimpContext *context)
|
||||
{
|
||||
context_return_val_if_fail (context, FALSE);
|
||||
|
||||
return context->tool_defined;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_define_tool (GimpContext *context,
|
||||
gboolean defined)
|
||||
{
|
||||
context_return_if_fail (context);
|
||||
|
||||
if (defined)
|
||||
context->tool = gimp_context_get_tool (context);
|
||||
|
||||
context->tool_defined = defined;
|
||||
}
|
||||
|
||||
/* foreground color ********************************************************/
|
||||
|
||||
void
|
||||
gimp_context_get_foreground (GimpContext *context,
|
||||
guchar foreground[3])
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_if_fail (context);
|
||||
context_find_defined (context, foreground_defined);
|
||||
|
||||
foreground[0] = context->foreground[0];
|
||||
foreground[1] = context->foreground[1];
|
||||
foreground[2] = context->foreground[2];
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_set_foreground (GimpContext *context,
|
||||
guchar foreground[3])
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_if_fail (context);
|
||||
context_find_defined (context, foreground_defined);
|
||||
|
||||
if (context->foreground[0] == foreground[0] &&
|
||||
context->foreground[1] == foreground[1] &&
|
||||
context->foreground[2] == foreground[2]) return;
|
||||
|
||||
context->foreground[0] = foreground[0];
|
||||
context->foreground[1] = foreground[1];
|
||||
context->foreground[2] = foreground[2];
|
||||
|
||||
gtk_signal_emit (GTK_OBJECT (context),
|
||||
gimp_context_signals[FOREGROUND_CHANGED],
|
||||
context->foreground);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_context_foreground_defined (GimpContext *context)
|
||||
{
|
||||
context_return_val_if_fail (context, FALSE);
|
||||
|
||||
return context->foreground_defined;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_define_foreground (GimpContext *context,
|
||||
gboolean defined)
|
||||
{
|
||||
context_return_if_fail (context);
|
||||
|
||||
if (defined)
|
||||
{
|
||||
guchar col[3];
|
||||
|
||||
gimp_context_get_foreground (context, col);
|
||||
context->foreground[0] = col[0];
|
||||
context->foreground[1] = col[1];
|
||||
context->foreground[2] = col[2];
|
||||
}
|
||||
|
||||
context->foreground_defined = defined;
|
||||
}
|
||||
|
||||
/* background color ********************************************************/
|
||||
|
||||
void
|
||||
gimp_context_get_background (GimpContext *context,
|
||||
guchar background[3])
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_if_fail (context);
|
||||
context_find_defined (context, background_defined);
|
||||
|
||||
background[0] = context->background[0];
|
||||
background[1] = context->background[1];
|
||||
background[2] = context->background[2];
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_set_background (GimpContext *context,
|
||||
guchar background[3])
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_if_fail (context);
|
||||
context_find_defined (context, background_defined);
|
||||
|
||||
if (context->background[0] == background[0] &&
|
||||
context->background[1] == background[1] &&
|
||||
context->background[2] == background[2]) return;
|
||||
|
||||
context->background[0] = background[0];
|
||||
context->background[1] = background[1];
|
||||
context->background[2] = background[2];
|
||||
|
||||
gtk_signal_emit (GTK_OBJECT (context),
|
||||
gimp_context_signals[BACKGROUND_CHANGED],
|
||||
context->background);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_context_background_defined (GimpContext *context)
|
||||
{
|
||||
context_return_val_if_fail (context, FALSE);
|
||||
|
||||
return context->background_defined;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_define_background (GimpContext *context,
|
||||
gboolean defined)
|
||||
{
|
||||
context_return_if_fail (context);
|
||||
|
||||
if (defined)
|
||||
{
|
||||
guchar col[3];
|
||||
|
||||
gimp_context_get_background (context, col);
|
||||
context->background[0] = col[0];
|
||||
context->background[1] = col[1];
|
||||
context->background[2] = col[2];
|
||||
}
|
||||
|
||||
context->background_defined = defined;
|
||||
}
|
||||
|
||||
/* opacity *****************************************************************/
|
||||
|
||||
gdouble
|
||||
gimp_context_get_opacity (GimpContext *context)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_val_if_fail (context, 1.0);
|
||||
context_find_defined (context, opacity_defined);
|
||||
|
||||
return context->opacity;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_set_opacity (GimpContext *context,
|
||||
gdouble opacity)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_if_fail (context);
|
||||
context_find_defined (context, opacity_defined);
|
||||
|
||||
if (context->opacity == opacity) return;
|
||||
|
||||
context->opacity = opacity;
|
||||
gtk_signal_emit (GTK_OBJECT (context),
|
||||
gimp_context_signals[OPACITY_CHANGED],
|
||||
opacity);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_context_opacity_defined (GimpContext *context)
|
||||
{
|
||||
context_return_val_if_fail (context, FALSE);
|
||||
|
||||
return context->opacity_defined;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_define_opacity (GimpContext *context,
|
||||
gboolean defined)
|
||||
{
|
||||
context_return_if_fail (context);
|
||||
|
||||
if (defined)
|
||||
context->opacity = gimp_context_get_opacity (context);
|
||||
|
||||
context->opacity_defined = defined;
|
||||
}
|
||||
|
||||
/* paint mode **************************************************************/
|
||||
|
||||
LayerModeEffects
|
||||
gimp_context_get_paint_mode (GimpContext *context)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_val_if_fail (context, 0);
|
||||
context_find_defined (context, paint_mode_defined);
|
||||
|
||||
return context->paint_mode;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_set_paint_mode (GimpContext *context,
|
||||
LayerModeEffects paint_mode)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_if_fail (context);
|
||||
context_find_defined (context, paint_mode_defined);
|
||||
|
||||
if (context->paint_mode == paint_mode) return;
|
||||
|
||||
context->paint_mode = paint_mode;
|
||||
gtk_signal_emit (GTK_OBJECT (context),
|
||||
gimp_context_signals[PAINT_MODE_CHANGED],
|
||||
paint_mode);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_context_paint_mode_defined (GimpContext *context)
|
||||
{
|
||||
context_return_val_if_fail (context, FALSE);
|
||||
|
||||
return context->paint_mode_defined;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_define_paint_mode (GimpContext *context,
|
||||
gboolean defined)
|
||||
{
|
||||
context_return_if_fail (context);
|
||||
|
||||
if (defined)
|
||||
context->paint_mode = gimp_context_get_paint_mode (context);
|
||||
|
||||
context->paint_mode_defined = defined;
|
||||
}
|
||||
|
||||
/* brush *******************************************************************/
|
||||
|
||||
GimpBrush *
|
||||
gimp_context_get_brush (GimpContext *context)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_val_if_fail (context, NULL);
|
||||
context_find_defined (context, brush_defined);
|
||||
|
||||
return context->brush;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_set_brush (GimpContext *context,
|
||||
GimpBrush *brush)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_if_fail (context);
|
||||
context_find_defined (context, brush_defined);
|
||||
|
||||
if (context->brush == brush) return;
|
||||
|
||||
context->brush = brush;
|
||||
gtk_signal_emit (GTK_OBJECT (context),
|
||||
gimp_context_signals[BRUSH_CHANGED],
|
||||
brush);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_context_brush_defined (GimpContext *context)
|
||||
{
|
||||
context_return_val_if_fail (context, FALSE);
|
||||
|
||||
return context->brush_defined;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_define_brush (GimpContext *context,
|
||||
gboolean defined)
|
||||
{
|
||||
context_return_if_fail (context);
|
||||
|
||||
if (defined)
|
||||
context->brush = gimp_context_get_brush (context);
|
||||
|
||||
context->brush_defined = defined;
|
||||
}
|
||||
|
||||
/* pattern *****************************************************************/
|
||||
|
||||
GPattern *
|
||||
gimp_context_get_pattern (GimpContext *context)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_val_if_fail (context, NULL);
|
||||
context_find_defined (context, pattern_defined);
|
||||
|
||||
return context->pattern;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_set_pattern (GimpContext *context,
|
||||
GPattern *pattern)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_if_fail (context);
|
||||
context_find_defined (context, pattern_defined);
|
||||
|
||||
if (context->pattern == pattern) return;
|
||||
|
||||
context->pattern = pattern;
|
||||
gtk_signal_emit (GTK_OBJECT (context),
|
||||
gimp_context_signals[PATTERN_CHANGED],
|
||||
pattern);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_context_pattern_defined (GimpContext *context)
|
||||
{
|
||||
context_return_val_if_fail (context, FALSE);
|
||||
|
||||
return context->pattern_defined;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_define_pattern (GimpContext *context,
|
||||
gboolean defined)
|
||||
{
|
||||
context_return_if_fail (context);
|
||||
|
||||
if (defined)
|
||||
context->pattern = gimp_context_get_pattern (context);
|
||||
|
||||
context->pattern_defined = defined;
|
||||
}
|
||||
|
||||
/* gradient ****************************************************************/
|
||||
|
||||
gradient_t *
|
||||
gimp_context_get_gradient (GimpContext *context)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_val_if_fail (context, NULL);
|
||||
context_find_defined (context, gradient_defined);
|
||||
|
||||
return context->gradient;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_set_gradient (GimpContext *context,
|
||||
gradient_t *gradient)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_if_fail (context);
|
||||
context_find_defined (context, gradient_defined);
|
||||
|
||||
if (context->gradient == gradient) return;
|
||||
|
||||
context->gradient = gradient;
|
||||
gtk_signal_emit (GTK_OBJECT (context),
|
||||
gimp_context_signals[GRADIENT_CHANGED],
|
||||
gradient);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_context_gradient_defined (GimpContext *context)
|
||||
{
|
||||
context_return_val_if_fail (context, FALSE);
|
||||
|
||||
return context->gradient_defined;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_define_gradient (GimpContext *context,
|
||||
gboolean defined)
|
||||
{
|
||||
context_return_if_fail (context);
|
||||
|
||||
if (defined)
|
||||
context->gradient = gimp_context_get_gradient (context);
|
||||
|
||||
context->gradient_defined = defined;
|
||||
}
|
||||
|
|
|
@ -20,8 +20,13 @@
|
|||
|
||||
#include <glib.h>
|
||||
|
||||
#include "apptypes.h"
|
||||
#include "gdisplay.h"
|
||||
#include "gimpimageF.h"
|
||||
#include "gradient_header.h"
|
||||
#include "patterns.h"
|
||||
#include "toolsF.h"
|
||||
|
||||
#include "gimpobjectP.h"
|
||||
|
||||
#define GIMP_TYPE_CONTEXT (gimp_context_get_type ())
|
||||
|
@ -32,18 +37,29 @@
|
|||
|
||||
typedef enum
|
||||
{
|
||||
GIMP_CONTEXT_ARG_OPACITY = 1 << 0,
|
||||
GIMP_CONTEXT_ARG_PAINT_MODE = 1 << 1,
|
||||
GIMP_CONTEXT_ARG_IMAGE = 1 << 2,
|
||||
GIMP_CONTEXT_ARG_DISPLAY = 1 << 3,
|
||||
GIMP_CONTEXT_ARG_IMAGE = 1 << 0,
|
||||
GIMP_CONTEXT_ARG_DISPLAY = 1 << 1,
|
||||
GIMP_CONTEXT_ARG_TOOL = 1 << 2,
|
||||
GIMP_CONTEXT_ARG_FOREGROUND = 1 << 3,
|
||||
GIMP_CONTEXT_ARG_BACKGROUND = 1 << 4,
|
||||
GIMP_CONTEXT_ARG_OPACITY = 1 << 5,
|
||||
GIMP_CONTEXT_ARG_PAINT_MODE = 1 << 6,
|
||||
GIMP_CONTEXT_ARG_BRUSH = 1 << 7,
|
||||
GIMP_CONTEXT_ARG_PATTERN = 1 << 8,
|
||||
GIMP_CONTEXT_ARG_GRADIENT = 1 << 9,
|
||||
|
||||
/* aliases
|
||||
*/
|
||||
GIMP_CONTEXT_ARG_PAINT = GIMP_CONTEXT_ARG_OPACITY |
|
||||
GIMP_CONTEXT_ARG_PAINT_MODE,
|
||||
GIMP_CONTEXT_ARG_ALL = GIMP_CONTEXT_ARG_PAINT |
|
||||
GIMP_CONTEXT_ARG_IMAGE |
|
||||
GIMP_CONTEXT_ARG_DISPLAY
|
||||
GIMP_CONTEXT_ARG_PAINT = GIMP_CONTEXT_ARG_FOREGROUND |
|
||||
GIMP_CONTEXT_ARG_BACKGROUND |
|
||||
GIMP_CONTEXT_ARG_OPACITY |
|
||||
GIMP_CONTEXT_ARG_PAINT_MODE |
|
||||
GIMP_CONTEXT_ARG_BRUSH |
|
||||
GIMP_CONTEXT_ARG_PATTERN |
|
||||
GIMP_CONTEXT_ARG_GRADIENT,
|
||||
GIMP_CONTEXT_ARG_ALL = GIMP_CONTEXT_ARG_IMAGE |
|
||||
GIMP_CONTEXT_ARG_DISPLAY |
|
||||
GIMP_CONTEXT_ARG_TOOL
|
||||
} GimpContextArgs;
|
||||
|
||||
typedef struct _GimpContext GimpContext;
|
||||
|
@ -59,6 +75,20 @@ struct _GimpContext
|
|||
/* FIXME: the solution of having a boolean for each attribute and the
|
||||
* name "defined" need some brainstorming
|
||||
*/
|
||||
gboolean image_defined;
|
||||
GimpImage *image;
|
||||
|
||||
gboolean display_defined;
|
||||
GDisplay *display;
|
||||
|
||||
gboolean tool_defined;
|
||||
ToolType tool;
|
||||
|
||||
gboolean foreground_defined;
|
||||
guchar foreground[3];
|
||||
|
||||
gboolean background_defined;
|
||||
guchar background[3];
|
||||
|
||||
gboolean opacity_defined;
|
||||
gdouble opacity;
|
||||
|
@ -66,22 +96,32 @@ struct _GimpContext
|
|||
gboolean paint_mode_defined;
|
||||
LayerModeEffects paint_mode;
|
||||
|
||||
gboolean image_defined;
|
||||
GimpImage *image;
|
||||
gboolean brush_defined;
|
||||
GimpBrush *brush;
|
||||
|
||||
gboolean display_defined;
|
||||
GDisplay *display;
|
||||
gboolean pattern_defined;
|
||||
GPattern *pattern;
|
||||
|
||||
gboolean gradient_defined;
|
||||
gradient_t *gradient;
|
||||
};
|
||||
|
||||
struct _GimpContextClass
|
||||
{
|
||||
GimpObjectClass parent_class;
|
||||
|
||||
void (* opacity_changed) (GimpContext *context, gdouble opacity);
|
||||
void (* paint_mode_changed) (GimpContext *context, gint paint_mode);
|
||||
|
||||
void (* image_changed) (GimpContext *context, gpointer image);
|
||||
void (* display_changed) (GimpContext *context, gpointer display);
|
||||
|
||||
void (* tool_changed) (GimpContext *context, gint tool_type);
|
||||
|
||||
void (* foreground_changed) (GimpContext *context, guchar foreground[3]);
|
||||
void (* background_changed) (GimpContext *context, guchar background[3]);
|
||||
void (* opacity_changed) (GimpContext *context, gdouble opacity);
|
||||
void (* paint_mode_changed) (GimpContext *context, gint paint_mode);
|
||||
void (* brush_changed) (GimpContext *context, gpointer brush);
|
||||
void (* pattern_changed) (GimpContext *context, gpointer pattern);
|
||||
void (* gradient_changed) (GimpContext *context, gpointer gradient);
|
||||
};
|
||||
|
||||
GtkType gimp_context_get_type (void);
|
||||
|
@ -129,33 +169,96 @@ GimpContext * gimp_context_get_parent (GimpContext *context);
|
|||
void gimp_context_set_parent (GimpContext *context,
|
||||
GimpContext *parent);
|
||||
|
||||
gdouble gimp_context_get_opacity (GimpContext *context);
|
||||
void gimp_context_set_opacity (GimpContext *context,
|
||||
gdouble opacity);
|
||||
gboolean gimp_context_opacity_defined (GimpContext *context);
|
||||
void gimp_context_define_opacity (GimpContext *context,
|
||||
gboolean defined);
|
||||
/* image */
|
||||
|
||||
LayerModeEffects
|
||||
gimp_context_get_paint_mode (GimpContext *context);
|
||||
void gimp_context_set_paint_mode (GimpContext *context,
|
||||
LayerModeEffects paint_mode);
|
||||
gboolean gimp_context_paint_mode_defined (GimpContext *context);
|
||||
void gimp_context_define_paint_mode (GimpContext *context,
|
||||
gboolean defined);
|
||||
GimpImage * gimp_context_get_image (GimpContext *context);
|
||||
void gimp_context_set_image (GimpContext *context,
|
||||
GimpImage *image);
|
||||
gboolean gimp_context_image_defined (GimpContext *context);
|
||||
void gimp_context_define_image (GimpContext *context,
|
||||
gboolean defined);
|
||||
|
||||
GimpImage * gimp_context_get_image (GimpContext *context);
|
||||
void gimp_context_set_image (GimpContext *context,
|
||||
GimpImage *image);
|
||||
gboolean gimp_context_image_defined (GimpContext *context);
|
||||
void gimp_context_define_image (GimpContext *context,
|
||||
gboolean defined);
|
||||
/* display */
|
||||
|
||||
GDisplay * gimp_context_get_display (GimpContext *context);
|
||||
void gimp_context_set_display (GimpContext *context,
|
||||
GDisplay *display);
|
||||
gboolean gimp_context_display_defined (GimpContext *context);
|
||||
void gimp_context_define_display (GimpContext *context,
|
||||
gboolean defined);
|
||||
GDisplay * gimp_context_get_display (GimpContext *context);
|
||||
void gimp_context_set_display (GimpContext *context,
|
||||
GDisplay *display);
|
||||
gboolean gimp_context_display_defined (GimpContext *context);
|
||||
void gimp_context_define_display (GimpContext *context,
|
||||
gboolean defined);
|
||||
|
||||
/* tool */
|
||||
|
||||
ToolType gimp_context_get_tool (GimpContext *context);
|
||||
void gimp_context_set_tool (GimpContext *context,
|
||||
ToolType tool_type);
|
||||
gboolean gimp_context_tool_defined (GimpContext *context);
|
||||
void gimp_context_define_tool (GimpContext *context,
|
||||
gboolean defined);
|
||||
|
||||
/* foreground color */
|
||||
|
||||
void gimp_context_get_foreground (GimpContext *context,
|
||||
guchar foreground[3]);
|
||||
void gimp_context_set_foreground (GimpContext *context,
|
||||
guchar foreground[3]);
|
||||
gboolean gimp_context_foreground_defined (GimpContext *context);
|
||||
void gimp_context_define_foreground (GimpContext *context,
|
||||
gboolean defined);
|
||||
|
||||
/* background color */
|
||||
|
||||
void gimp_context_get_background (GimpContext *context,
|
||||
guchar background[3]);
|
||||
void gimp_context_set_background (GimpContext *context,
|
||||
guchar background[3]);
|
||||
gboolean gimp_context_background_defined (GimpContext *context);
|
||||
void gimp_context_define_background (GimpContext *context,
|
||||
gboolean defined);
|
||||
|
||||
/* opacity */
|
||||
|
||||
gdouble gimp_context_get_opacity (GimpContext *context);
|
||||
void gimp_context_set_opacity (GimpContext *context,
|
||||
gdouble opacity);
|
||||
gboolean gimp_context_opacity_defined (GimpContext *context);
|
||||
void gimp_context_define_opacity (GimpContext *context,
|
||||
gboolean defined);
|
||||
|
||||
/* paint mode */
|
||||
|
||||
LayerModeEffects gimp_context_get_paint_mode (GimpContext *context);
|
||||
void gimp_context_set_paint_mode (GimpContext *context,
|
||||
LayerModeEffects paint_mode);
|
||||
gboolean gimp_context_paint_mode_defined (GimpContext *context);
|
||||
void gimp_context_define_paint_mode (GimpContext *context,
|
||||
gboolean defined);
|
||||
|
||||
/* brush */
|
||||
|
||||
GimpBrush * gimp_context_get_brush (GimpContext *context);
|
||||
void gimp_context_set_brush (GimpContext *context,
|
||||
GimpBrush *brush);
|
||||
gboolean gimp_context_brush_defined (GimpContext *context);
|
||||
void gimp_context_define_brush (GimpContext *context,
|
||||
gboolean defined);
|
||||
|
||||
/* pattern */
|
||||
|
||||
GPattern * gimp_context_get_pattern (GimpContext *context);
|
||||
void gimp_context_set_pattern (GimpContext *context,
|
||||
GPattern *pattern);
|
||||
gboolean gimp_context_pattern_defined (GimpContext *context);
|
||||
void gimp_context_define_pattern (GimpContext *context,
|
||||
gboolean defined);
|
||||
|
||||
/* gradient */
|
||||
|
||||
gradient_t * gimp_context_get_gradient (GimpContext *context);
|
||||
void gimp_context_set_gradient (GimpContext *context,
|
||||
gradient_t *gradient);
|
||||
gboolean gimp_context_gradient_defined (GimpContext *context);
|
||||
void gimp_context_define_gradient (GimpContext *context,
|
||||
gboolean defined);
|
||||
|
||||
#endif /* __GIMP_CONTEXT_H__ */
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#include "gimpcontext.h"
|
||||
|
@ -23,11 +22,11 @@
|
|||
|
||||
#define context_return_if_fail(context) \
|
||||
g_return_if_fail ((context) != NULL); \
|
||||
g_return_if_fail (GIMP_IS_CONTEXT (context));
|
||||
g_return_if_fail (GIMP_IS_CONTEXT (context))
|
||||
|
||||
#define context_return_val_if_fail(context,val) \
|
||||
g_return_val_if_fail ((context) != NULL, (val)); \
|
||||
g_return_val_if_fail (GIMP_IS_CONTEXT (context), (val));
|
||||
g_return_val_if_fail (GIMP_IS_CONTEXT (context), (val))
|
||||
|
||||
#define context_check_current(context) \
|
||||
((context) = (context) ? (context) : current_context)
|
||||
|
@ -38,17 +37,29 @@
|
|||
|
||||
enum {
|
||||
ARG_0,
|
||||
ARG_IMAGE,
|
||||
ARG_DISPLAY,
|
||||
ARG_TOOL,
|
||||
ARG_FOREGROUND,
|
||||
ARG_BACKGROUND,
|
||||
ARG_OPACITY,
|
||||
ARG_PAINT_MODE,
|
||||
ARG_IMAGE,
|
||||
ARG_DISPLAY
|
||||
ARG_BRUSH,
|
||||
ARG_PATTERN,
|
||||
ARG_GRADIENT
|
||||
};
|
||||
|
||||
enum {
|
||||
OPACITY_CHANGED,
|
||||
PAINT_MODE_CHANGED,
|
||||
IMAGE_CHANGED,
|
||||
DISPLAY_CHANGED,
|
||||
TOOL_CHANGED,
|
||||
FOREGROUND_CHANGED,
|
||||
BACKGROUND_CHANGED,
|
||||
OPACITY_CHANGED,
|
||||
PAINT_MODE_CHANGED,
|
||||
BRUSH_CHANGED,
|
||||
PATTERN_CHANGED,
|
||||
GRADIENT_CHANGED,
|
||||
LAST_SIGNAL
|
||||
};
|
||||
|
||||
|
@ -69,7 +80,7 @@ static GimpContext * default_context = NULL;
|
|||
static GimpContext * standard_context = NULL;
|
||||
|
||||
|
||||
/* private functions ******************************************************/
|
||||
/* private functions *******************************************************/
|
||||
|
||||
static void
|
||||
gimp_context_set_arg (GtkObject *object,
|
||||
|
@ -82,17 +93,35 @@ gimp_context_set_arg (GtkObject *object,
|
|||
|
||||
switch (arg_id)
|
||||
{
|
||||
case ARG_IMAGE:
|
||||
gimp_context_set_image (context, GTK_VALUE_POINTER (*arg));
|
||||
break;
|
||||
case ARG_DISPLAY:
|
||||
gimp_context_set_display (context, GTK_VALUE_POINTER (*arg));
|
||||
break;
|
||||
case ARG_TOOL:
|
||||
gimp_context_set_tool (context, GTK_VALUE_INT (*arg));
|
||||
break;
|
||||
case ARG_FOREGROUND:
|
||||
gimp_context_set_foreground (context, GTK_VALUE_POINTER (*arg));
|
||||
break;
|
||||
case ARG_BACKGROUND:
|
||||
gimp_context_set_background (context, GTK_VALUE_POINTER (*arg));
|
||||
break;
|
||||
case ARG_OPACITY:
|
||||
gimp_context_set_opacity (context, GTK_VALUE_DOUBLE (*arg));
|
||||
break;
|
||||
case ARG_PAINT_MODE:
|
||||
gimp_context_set_paint_mode (context, GTK_VALUE_INT (*arg));
|
||||
break;
|
||||
case ARG_IMAGE:
|
||||
gimp_context_set_image (context, GTK_VALUE_POINTER (*arg));
|
||||
case ARG_BRUSH:
|
||||
gimp_context_set_brush (context, GTK_VALUE_POINTER (*arg));
|
||||
break;
|
||||
case ARG_DISPLAY:
|
||||
gimp_context_set_display (context, GTK_VALUE_POINTER (*arg));
|
||||
case ARG_PATTERN:
|
||||
gimp_context_set_pattern (context, GTK_VALUE_POINTER (*arg));
|
||||
break;
|
||||
case ARG_GRADIENT:
|
||||
gimp_context_set_gradient (context, GTK_VALUE_POINTER (*arg));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -110,17 +139,49 @@ gimp_context_get_arg (GtkObject *object,
|
|||
|
||||
switch (arg_id)
|
||||
{
|
||||
case ARG_IMAGE:
|
||||
GTK_VALUE_POINTER (*arg) = gimp_context_get_image (context);
|
||||
break;
|
||||
case ARG_DISPLAY:
|
||||
GTK_VALUE_POINTER (*arg) = gimp_context_get_display (context);
|
||||
break;
|
||||
case ARG_TOOL:
|
||||
GTK_VALUE_INT (*arg) = gimp_context_get_tool (context);
|
||||
break;
|
||||
case ARG_FOREGROUND:
|
||||
{
|
||||
guchar *dest = GTK_VALUE_POINTER (*arg);
|
||||
guchar src[3];
|
||||
gimp_context_get_foreground (context, src);
|
||||
dest[0] = src[0];
|
||||
dest[1] = src[1];
|
||||
dest[2] = src[2];
|
||||
}
|
||||
break;
|
||||
case ARG_BACKGROUND:
|
||||
{
|
||||
guchar *dest = GTK_VALUE_POINTER (*arg);
|
||||
guchar src[3];
|
||||
gimp_context_get_background (context, src);
|
||||
dest[0] = src[0];
|
||||
dest[1] = src[1];
|
||||
dest[2] = src[2];
|
||||
}
|
||||
break;
|
||||
case ARG_OPACITY:
|
||||
GTK_VALUE_DOUBLE (*arg) = gimp_context_get_opacity (context);
|
||||
break;
|
||||
case ARG_PAINT_MODE:
|
||||
GTK_VALUE_INT (*arg) = gimp_context_get_paint_mode (context);
|
||||
break;
|
||||
case ARG_IMAGE:
|
||||
GTK_VALUE_POINTER (*arg) = gimp_context_get_image (context);
|
||||
case ARG_BRUSH:
|
||||
GTK_VALUE_POINTER (*arg) = gimp_context_get_brush (context);
|
||||
break;
|
||||
case ARG_DISPLAY:
|
||||
GTK_VALUE_POINTER (*arg) = gimp_context_get_display (context);
|
||||
case ARG_PATTERN:
|
||||
GTK_VALUE_POINTER (*arg) = gimp_context_get_pattern (context);
|
||||
break;
|
||||
case ARG_GRADIENT:
|
||||
GTK_VALUE_POINTER (*arg) = gimp_context_get_gradient (context);
|
||||
break;
|
||||
default:
|
||||
arg->type = GTK_TYPE_INVALID;
|
||||
|
@ -151,33 +212,29 @@ gimp_context_class_init (GimpContextClass *klass)
|
|||
|
||||
object_class = GTK_OBJECT_CLASS (klass);
|
||||
|
||||
gtk_object_add_arg_type ("GimpContext::opacity",
|
||||
GTK_TYPE_DOUBLE, GTK_ARG_READWRITE, ARG_OPACITY);
|
||||
gtk_object_add_arg_type ("GimpContext::paint_mode",
|
||||
GTK_TYPE_INT, GTK_ARG_READWRITE, ARG_PAINT_MODE);
|
||||
gtk_object_add_arg_type ("GimpContext::image",
|
||||
GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_IMAGE);
|
||||
gtk_object_add_arg_type ("GimpContext::display",
|
||||
GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_DISPLAY);
|
||||
gtk_object_add_arg_type ("GimpContext::tool",
|
||||
GTK_TYPE_INT, GTK_ARG_READWRITE, ARG_TOOL);
|
||||
gtk_object_add_arg_type ("GimpContext::foreground",
|
||||
GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_FOREGROUND);
|
||||
gtk_object_add_arg_type ("GimpContext::background",
|
||||
GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_BACKGROUND);
|
||||
gtk_object_add_arg_type ("GimpContext::opacity",
|
||||
GTK_TYPE_DOUBLE, GTK_ARG_READWRITE, ARG_OPACITY);
|
||||
gtk_object_add_arg_type ("GimpContext::paint_mode",
|
||||
GTK_TYPE_INT, GTK_ARG_READWRITE, ARG_PAINT_MODE);
|
||||
gtk_object_add_arg_type ("GimpContext::brush",
|
||||
GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_BRUSH);
|
||||
gtk_object_add_arg_type ("GimpContext::pattern",
|
||||
GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_PATTERN);
|
||||
gtk_object_add_arg_type ("GimpContext::gradient",
|
||||
GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_GRADIENT);
|
||||
|
||||
parent_class = gtk_type_class (gimp_object_get_type ());
|
||||
|
||||
gimp_context_signals[OPACITY_CHANGED] =
|
||||
gimp_signal_new ("opacity_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (GimpContextClass,
|
||||
opacity_changed),
|
||||
gimp_sigtype_double);
|
||||
|
||||
gimp_context_signals[PAINT_MODE_CHANGED] =
|
||||
gimp_signal_new ("paint_mode_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (GimpContextClass,
|
||||
paint_mode_changed),
|
||||
gimp_sigtype_int);
|
||||
|
||||
gimp_context_signals[IMAGE_CHANGED] =
|
||||
gimp_signal_new ("image_changed",
|
||||
GTK_RUN_FIRST,
|
||||
|
@ -194,6 +251,70 @@ gimp_context_class_init (GimpContextClass *klass)
|
|||
display_changed),
|
||||
gimp_sigtype_pointer);
|
||||
|
||||
gimp_context_signals[TOOL_CHANGED] =
|
||||
gimp_signal_new ("tool_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (GimpContextClass,
|
||||
tool_changed),
|
||||
gimp_sigtype_int);
|
||||
|
||||
gimp_context_signals[FOREGROUND_CHANGED] =
|
||||
gimp_signal_new ("foreground_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (GimpContextClass,
|
||||
foreground_changed),
|
||||
gimp_sigtype_pointer);
|
||||
|
||||
gimp_context_signals[BACKGROUND_CHANGED] =
|
||||
gimp_signal_new ("background_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (GimpContextClass,
|
||||
background_changed),
|
||||
gimp_sigtype_pointer);
|
||||
|
||||
gimp_context_signals[OPACITY_CHANGED] =
|
||||
gimp_signal_new ("opacity_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (GimpContextClass,
|
||||
opacity_changed),
|
||||
gimp_sigtype_double);
|
||||
|
||||
gimp_context_signals[PAINT_MODE_CHANGED] =
|
||||
gimp_signal_new ("paint_mode_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (GimpContextClass,
|
||||
paint_mode_changed),
|
||||
gimp_sigtype_int);
|
||||
|
||||
gimp_context_signals[BRUSH_CHANGED] =
|
||||
gimp_signal_new ("brush_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (GimpContextClass,
|
||||
brush_changed),
|
||||
gimp_sigtype_pointer);
|
||||
|
||||
gimp_context_signals[PATTERN_CHANGED] =
|
||||
gimp_signal_new ("pattern_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (GimpContextClass,
|
||||
pattern_changed),
|
||||
gimp_sigtype_pointer);
|
||||
|
||||
gimp_context_signals[GRADIENT_CHANGED] =
|
||||
gimp_signal_new ("gradient_changed",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (GimpContextClass,
|
||||
gradient_changed),
|
||||
gimp_sigtype_pointer);
|
||||
|
||||
gtk_object_class_add_signals (object_class, gimp_context_signals,
|
||||
LAST_SIGNAL);
|
||||
|
||||
|
@ -201,10 +322,16 @@ gimp_context_class_init (GimpContextClass *klass)
|
|||
object_class->get_arg = gimp_context_get_arg;
|
||||
object_class->destroy = gimp_context_destroy;
|
||||
|
||||
klass->opacity_changed = NULL;
|
||||
klass->paint_mode_changed = NULL;
|
||||
klass->image_changed = NULL;
|
||||
klass->display_changed = NULL;
|
||||
klass->tool_changed = NULL;
|
||||
klass->foreground_changed = NULL;
|
||||
klass->background_changed = NULL;
|
||||
klass->opacity_changed = NULL;
|
||||
klass->paint_mode_changed = NULL;
|
||||
klass->brush_changed = NULL;
|
||||
klass->pattern_changed = NULL;
|
||||
klass->gradient_changed = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -213,8 +340,29 @@ gimp_context_init (GimpContext *context)
|
|||
context->name = NULL;
|
||||
context->parent = NULL;
|
||||
|
||||
/* Values to be taken from the parent context by default */
|
||||
|
||||
context->image_defined = FALSE;
|
||||
context->image = NULL;
|
||||
|
||||
context->display_defined = FALSE;
|
||||
context->display = NULL;
|
||||
|
||||
context->tool_defined = FALSE;
|
||||
context->tool = RECT_SELECT;
|
||||
|
||||
/* Values defined by default */
|
||||
|
||||
context->foreground_defined = TRUE;
|
||||
context->foreground[0] = 255;
|
||||
context->foreground[1] = 255;
|
||||
context->foreground[2] = 255;
|
||||
|
||||
context->background_defined = TRUE;
|
||||
context->background[0] = 0;
|
||||
context->background[1] = 0;
|
||||
context->background[2] = 0;
|
||||
|
||||
context->opacity_defined = TRUE;
|
||||
context->opacity = 1.0;
|
||||
|
||||
|
@ -223,14 +371,17 @@ gimp_context_init (GimpContext *context)
|
|||
|
||||
/* Values to be taken from the parent context by default */
|
||||
|
||||
context->image_defined = FALSE;
|
||||
context->image = NULL;
|
||||
context->brush_defined = FALSE;
|
||||
context->brush = NULL;
|
||||
|
||||
context->display_defined = FALSE;
|
||||
context->display = NULL;
|
||||
context->pattern_defined = FALSE;
|
||||
context->pattern = NULL;
|
||||
|
||||
context->gradient_defined = FALSE;
|
||||
context->gradient = NULL;
|
||||
}
|
||||
|
||||
/* public functions *******************************************************/
|
||||
/* public functions ********************************************************/
|
||||
|
||||
GtkType
|
||||
gimp_context_get_type (void)
|
||||
|
@ -276,21 +427,41 @@ gimp_context_new (gchar *name,
|
|||
|
||||
if (template)
|
||||
{
|
||||
context->opacity = gimp_context_get_opacity (template);
|
||||
context->paint_mode = gimp_context_get_paint_mode (template);
|
||||
context->image = gimp_context_get_image (template);
|
||||
context->display = gimp_context_get_display (template);
|
||||
guchar col[3];
|
||||
|
||||
context->image = gimp_context_get_image (template);
|
||||
context->display = gimp_context_get_display (template);
|
||||
context->tool = gimp_context_get_tool (template);
|
||||
gimp_context_get_foreground (template, col);
|
||||
context->foreground[0] = col[0];
|
||||
context->foreground[1] = col[1];
|
||||
context->foreground[2] = col[2];
|
||||
gimp_context_get_background (template, col);
|
||||
context->background[0] = col[0];
|
||||
context->background[1] = col[1];
|
||||
context->background[2] = col[2];
|
||||
context->opacity = gimp_context_get_opacity (template);
|
||||
context->paint_mode = gimp_context_get_paint_mode (template);
|
||||
context->brush = gimp_context_get_brush (template);
|
||||
context->pattern = gimp_context_get_pattern (template);
|
||||
context->gradient = gimp_context_get_gradient (template);
|
||||
|
||||
context->opacity_defined = template->opacity_defined;
|
||||
context->paint_mode_defined = template->paint_mode_defined;
|
||||
context->image_defined = template->image_defined;
|
||||
context->display_defined = template->display_defined;
|
||||
context->tool_defined = template->tool_defined;
|
||||
context->foreground_defined = template->foreground_defined;
|
||||
context->background_defined = template->background_defined;
|
||||
context->opacity_defined = template->opacity_defined;
|
||||
context->paint_mode_defined = template->paint_mode_defined;
|
||||
context->brush_defined = template->brush_defined;
|
||||
context->pattern_defined = template->pattern_defined;
|
||||
context->gradient_defined = template->gradient_defined;
|
||||
}
|
||||
|
||||
return context;
|
||||
}
|
||||
|
||||
/* getting/setting the special contexts ***********************************/
|
||||
/* getting/setting the special contexts ************************************/
|
||||
|
||||
GimpContext *
|
||||
gimp_context_get_current (void)
|
||||
|
@ -341,7 +512,7 @@ gimp_context_get_standard (void)
|
|||
return standard_context;
|
||||
}
|
||||
|
||||
/* functions manipulating a single context ********************************/
|
||||
/* functions manipulating a single context *********************************/
|
||||
|
||||
gchar *
|
||||
gimp_context_get_name (GimpContext *context)
|
||||
|
@ -380,99 +551,7 @@ gimp_context_set_parent (GimpContext *context,
|
|||
* functions into a single macro call
|
||||
*/
|
||||
|
||||
/* opacity */
|
||||
|
||||
gdouble
|
||||
gimp_context_get_opacity (GimpContext *context)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_val_if_fail (context, 1.0);
|
||||
context_find_defined (context, opacity_defined);
|
||||
|
||||
return context->opacity;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_set_opacity (GimpContext *context,
|
||||
gdouble opacity)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_if_fail (context);
|
||||
context_find_defined (context, opacity_defined);
|
||||
|
||||
context->opacity = opacity;
|
||||
gtk_signal_emit (GTK_OBJECT (context),
|
||||
gimp_context_signals[OPACITY_CHANGED],
|
||||
opacity);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_context_opacity_defined (GimpContext *context)
|
||||
{
|
||||
context_return_val_if_fail (context, FALSE);
|
||||
|
||||
return context->opacity_defined;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_define_opacity (GimpContext *context,
|
||||
gboolean defined)
|
||||
{
|
||||
context_return_if_fail (context);
|
||||
|
||||
if (defined)
|
||||
context->opacity = gimp_context_get_opacity (context);
|
||||
|
||||
context->opacity_defined = defined;
|
||||
}
|
||||
|
||||
/* paint mode */
|
||||
|
||||
LayerModeEffects
|
||||
gimp_context_get_paint_mode (GimpContext *context)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_val_if_fail (context, 0);
|
||||
context_find_defined (context, paint_mode_defined);
|
||||
|
||||
return context->paint_mode;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_set_paint_mode (GimpContext *context,
|
||||
LayerModeEffects paint_mode)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_if_fail (context);
|
||||
context_find_defined (context, paint_mode_defined);
|
||||
|
||||
context->paint_mode = paint_mode;
|
||||
gtk_signal_emit (GTK_OBJECT(context),
|
||||
gimp_context_signals[PAINT_MODE_CHANGED],
|
||||
paint_mode);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_context_paint_mode_defined (GimpContext *context)
|
||||
{
|
||||
context_return_val_if_fail (context, FALSE);
|
||||
|
||||
return context->paint_mode_defined;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_define_paint_mode (GimpContext *context,
|
||||
gboolean defined)
|
||||
{
|
||||
context_return_if_fail (context);
|
||||
|
||||
if (defined)
|
||||
context->paint_mode = gimp_context_get_paint_mode (context);
|
||||
|
||||
context->paint_mode_defined = defined;
|
||||
}
|
||||
|
||||
/* image */
|
||||
/* image *******************************************************************/
|
||||
|
||||
GimpImage *
|
||||
gimp_context_get_image (GimpContext *context)
|
||||
|
@ -520,7 +599,7 @@ gimp_context_define_image (GimpContext *context,
|
|||
context->image_defined = defined;
|
||||
}
|
||||
|
||||
/* display */
|
||||
/* display *****************************************************************/
|
||||
|
||||
GDisplay *
|
||||
gimp_context_get_display (GimpContext *context)
|
||||
|
@ -574,3 +653,417 @@ gimp_context_define_display (GimpContext *context,
|
|||
|
||||
context->display_defined = defined;
|
||||
}
|
||||
|
||||
/* tool ********************************************************************/
|
||||
|
||||
ToolType
|
||||
gimp_context_get_tool (GimpContext *context)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_val_if_fail (context, 0);
|
||||
context_find_defined (context, tool_defined);
|
||||
|
||||
return context->tool;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_set_tool (GimpContext *context,
|
||||
ToolType tool)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_if_fail (context);
|
||||
context_find_defined (context, tool_defined);
|
||||
|
||||
if (context->tool == tool) return;
|
||||
|
||||
context->tool = tool;
|
||||
gtk_signal_emit (GTK_OBJECT (context),
|
||||
gimp_context_signals[TOOL_CHANGED],
|
||||
tool);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_context_tool_defined (GimpContext *context)
|
||||
{
|
||||
context_return_val_if_fail (context, FALSE);
|
||||
|
||||
return context->tool_defined;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_define_tool (GimpContext *context,
|
||||
gboolean defined)
|
||||
{
|
||||
context_return_if_fail (context);
|
||||
|
||||
if (defined)
|
||||
context->tool = gimp_context_get_tool (context);
|
||||
|
||||
context->tool_defined = defined;
|
||||
}
|
||||
|
||||
/* foreground color ********************************************************/
|
||||
|
||||
void
|
||||
gimp_context_get_foreground (GimpContext *context,
|
||||
guchar foreground[3])
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_if_fail (context);
|
||||
context_find_defined (context, foreground_defined);
|
||||
|
||||
foreground[0] = context->foreground[0];
|
||||
foreground[1] = context->foreground[1];
|
||||
foreground[2] = context->foreground[2];
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_set_foreground (GimpContext *context,
|
||||
guchar foreground[3])
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_if_fail (context);
|
||||
context_find_defined (context, foreground_defined);
|
||||
|
||||
if (context->foreground[0] == foreground[0] &&
|
||||
context->foreground[1] == foreground[1] &&
|
||||
context->foreground[2] == foreground[2]) return;
|
||||
|
||||
context->foreground[0] = foreground[0];
|
||||
context->foreground[1] = foreground[1];
|
||||
context->foreground[2] = foreground[2];
|
||||
|
||||
gtk_signal_emit (GTK_OBJECT (context),
|
||||
gimp_context_signals[FOREGROUND_CHANGED],
|
||||
context->foreground);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_context_foreground_defined (GimpContext *context)
|
||||
{
|
||||
context_return_val_if_fail (context, FALSE);
|
||||
|
||||
return context->foreground_defined;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_define_foreground (GimpContext *context,
|
||||
gboolean defined)
|
||||
{
|
||||
context_return_if_fail (context);
|
||||
|
||||
if (defined)
|
||||
{
|
||||
guchar col[3];
|
||||
|
||||
gimp_context_get_foreground (context, col);
|
||||
context->foreground[0] = col[0];
|
||||
context->foreground[1] = col[1];
|
||||
context->foreground[2] = col[2];
|
||||
}
|
||||
|
||||
context->foreground_defined = defined;
|
||||
}
|
||||
|
||||
/* background color ********************************************************/
|
||||
|
||||
void
|
||||
gimp_context_get_background (GimpContext *context,
|
||||
guchar background[3])
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_if_fail (context);
|
||||
context_find_defined (context, background_defined);
|
||||
|
||||
background[0] = context->background[0];
|
||||
background[1] = context->background[1];
|
||||
background[2] = context->background[2];
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_set_background (GimpContext *context,
|
||||
guchar background[3])
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_if_fail (context);
|
||||
context_find_defined (context, background_defined);
|
||||
|
||||
if (context->background[0] == background[0] &&
|
||||
context->background[1] == background[1] &&
|
||||
context->background[2] == background[2]) return;
|
||||
|
||||
context->background[0] = background[0];
|
||||
context->background[1] = background[1];
|
||||
context->background[2] = background[2];
|
||||
|
||||
gtk_signal_emit (GTK_OBJECT (context),
|
||||
gimp_context_signals[BACKGROUND_CHANGED],
|
||||
context->background);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_context_background_defined (GimpContext *context)
|
||||
{
|
||||
context_return_val_if_fail (context, FALSE);
|
||||
|
||||
return context->background_defined;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_define_background (GimpContext *context,
|
||||
gboolean defined)
|
||||
{
|
||||
context_return_if_fail (context);
|
||||
|
||||
if (defined)
|
||||
{
|
||||
guchar col[3];
|
||||
|
||||
gimp_context_get_background (context, col);
|
||||
context->background[0] = col[0];
|
||||
context->background[1] = col[1];
|
||||
context->background[2] = col[2];
|
||||
}
|
||||
|
||||
context->background_defined = defined;
|
||||
}
|
||||
|
||||
/* opacity *****************************************************************/
|
||||
|
||||
gdouble
|
||||
gimp_context_get_opacity (GimpContext *context)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_val_if_fail (context, 1.0);
|
||||
context_find_defined (context, opacity_defined);
|
||||
|
||||
return context->opacity;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_set_opacity (GimpContext *context,
|
||||
gdouble opacity)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_if_fail (context);
|
||||
context_find_defined (context, opacity_defined);
|
||||
|
||||
if (context->opacity == opacity) return;
|
||||
|
||||
context->opacity = opacity;
|
||||
gtk_signal_emit (GTK_OBJECT (context),
|
||||
gimp_context_signals[OPACITY_CHANGED],
|
||||
opacity);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_context_opacity_defined (GimpContext *context)
|
||||
{
|
||||
context_return_val_if_fail (context, FALSE);
|
||||
|
||||
return context->opacity_defined;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_define_opacity (GimpContext *context,
|
||||
gboolean defined)
|
||||
{
|
||||
context_return_if_fail (context);
|
||||
|
||||
if (defined)
|
||||
context->opacity = gimp_context_get_opacity (context);
|
||||
|
||||
context->opacity_defined = defined;
|
||||
}
|
||||
|
||||
/* paint mode **************************************************************/
|
||||
|
||||
LayerModeEffects
|
||||
gimp_context_get_paint_mode (GimpContext *context)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_val_if_fail (context, 0);
|
||||
context_find_defined (context, paint_mode_defined);
|
||||
|
||||
return context->paint_mode;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_set_paint_mode (GimpContext *context,
|
||||
LayerModeEffects paint_mode)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_if_fail (context);
|
||||
context_find_defined (context, paint_mode_defined);
|
||||
|
||||
if (context->paint_mode == paint_mode) return;
|
||||
|
||||
context->paint_mode = paint_mode;
|
||||
gtk_signal_emit (GTK_OBJECT (context),
|
||||
gimp_context_signals[PAINT_MODE_CHANGED],
|
||||
paint_mode);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_context_paint_mode_defined (GimpContext *context)
|
||||
{
|
||||
context_return_val_if_fail (context, FALSE);
|
||||
|
||||
return context->paint_mode_defined;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_define_paint_mode (GimpContext *context,
|
||||
gboolean defined)
|
||||
{
|
||||
context_return_if_fail (context);
|
||||
|
||||
if (defined)
|
||||
context->paint_mode = gimp_context_get_paint_mode (context);
|
||||
|
||||
context->paint_mode_defined = defined;
|
||||
}
|
||||
|
||||
/* brush *******************************************************************/
|
||||
|
||||
GimpBrush *
|
||||
gimp_context_get_brush (GimpContext *context)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_val_if_fail (context, NULL);
|
||||
context_find_defined (context, brush_defined);
|
||||
|
||||
return context->brush;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_set_brush (GimpContext *context,
|
||||
GimpBrush *brush)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_if_fail (context);
|
||||
context_find_defined (context, brush_defined);
|
||||
|
||||
if (context->brush == brush) return;
|
||||
|
||||
context->brush = brush;
|
||||
gtk_signal_emit (GTK_OBJECT (context),
|
||||
gimp_context_signals[BRUSH_CHANGED],
|
||||
brush);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_context_brush_defined (GimpContext *context)
|
||||
{
|
||||
context_return_val_if_fail (context, FALSE);
|
||||
|
||||
return context->brush_defined;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_define_brush (GimpContext *context,
|
||||
gboolean defined)
|
||||
{
|
||||
context_return_if_fail (context);
|
||||
|
||||
if (defined)
|
||||
context->brush = gimp_context_get_brush (context);
|
||||
|
||||
context->brush_defined = defined;
|
||||
}
|
||||
|
||||
/* pattern *****************************************************************/
|
||||
|
||||
GPattern *
|
||||
gimp_context_get_pattern (GimpContext *context)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_val_if_fail (context, NULL);
|
||||
context_find_defined (context, pattern_defined);
|
||||
|
||||
return context->pattern;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_set_pattern (GimpContext *context,
|
||||
GPattern *pattern)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_if_fail (context);
|
||||
context_find_defined (context, pattern_defined);
|
||||
|
||||
if (context->pattern == pattern) return;
|
||||
|
||||
context->pattern = pattern;
|
||||
gtk_signal_emit (GTK_OBJECT (context),
|
||||
gimp_context_signals[PATTERN_CHANGED],
|
||||
pattern);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_context_pattern_defined (GimpContext *context)
|
||||
{
|
||||
context_return_val_if_fail (context, FALSE);
|
||||
|
||||
return context->pattern_defined;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_define_pattern (GimpContext *context,
|
||||
gboolean defined)
|
||||
{
|
||||
context_return_if_fail (context);
|
||||
|
||||
if (defined)
|
||||
context->pattern = gimp_context_get_pattern (context);
|
||||
|
||||
context->pattern_defined = defined;
|
||||
}
|
||||
|
||||
/* gradient ****************************************************************/
|
||||
|
||||
gradient_t *
|
||||
gimp_context_get_gradient (GimpContext *context)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_val_if_fail (context, NULL);
|
||||
context_find_defined (context, gradient_defined);
|
||||
|
||||
return context->gradient;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_set_gradient (GimpContext *context,
|
||||
gradient_t *gradient)
|
||||
{
|
||||
context_check_current (context);
|
||||
context_return_if_fail (context);
|
||||
context_find_defined (context, gradient_defined);
|
||||
|
||||
if (context->gradient == gradient) return;
|
||||
|
||||
context->gradient = gradient;
|
||||
gtk_signal_emit (GTK_OBJECT (context),
|
||||
gimp_context_signals[GRADIENT_CHANGED],
|
||||
gradient);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gimp_context_gradient_defined (GimpContext *context)
|
||||
{
|
||||
context_return_val_if_fail (context, FALSE);
|
||||
|
||||
return context->gradient_defined;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_define_gradient (GimpContext *context,
|
||||
gboolean defined)
|
||||
{
|
||||
context_return_if_fail (context);
|
||||
|
||||
if (defined)
|
||||
context->gradient = gimp_context_get_gradient (context);
|
||||
|
||||
context->gradient_defined = defined;
|
||||
}
|
||||
|
|
|
@ -20,8 +20,13 @@
|
|||
|
||||
#include <glib.h>
|
||||
|
||||
#include "apptypes.h"
|
||||
#include "gdisplay.h"
|
||||
#include "gimpimageF.h"
|
||||
#include "gradient_header.h"
|
||||
#include "patterns.h"
|
||||
#include "toolsF.h"
|
||||
|
||||
#include "gimpobjectP.h"
|
||||
|
||||
#define GIMP_TYPE_CONTEXT (gimp_context_get_type ())
|
||||
|
@ -32,18 +37,29 @@
|
|||
|
||||
typedef enum
|
||||
{
|
||||
GIMP_CONTEXT_ARG_OPACITY = 1 << 0,
|
||||
GIMP_CONTEXT_ARG_PAINT_MODE = 1 << 1,
|
||||
GIMP_CONTEXT_ARG_IMAGE = 1 << 2,
|
||||
GIMP_CONTEXT_ARG_DISPLAY = 1 << 3,
|
||||
GIMP_CONTEXT_ARG_IMAGE = 1 << 0,
|
||||
GIMP_CONTEXT_ARG_DISPLAY = 1 << 1,
|
||||
GIMP_CONTEXT_ARG_TOOL = 1 << 2,
|
||||
GIMP_CONTEXT_ARG_FOREGROUND = 1 << 3,
|
||||
GIMP_CONTEXT_ARG_BACKGROUND = 1 << 4,
|
||||
GIMP_CONTEXT_ARG_OPACITY = 1 << 5,
|
||||
GIMP_CONTEXT_ARG_PAINT_MODE = 1 << 6,
|
||||
GIMP_CONTEXT_ARG_BRUSH = 1 << 7,
|
||||
GIMP_CONTEXT_ARG_PATTERN = 1 << 8,
|
||||
GIMP_CONTEXT_ARG_GRADIENT = 1 << 9,
|
||||
|
||||
/* aliases
|
||||
*/
|
||||
GIMP_CONTEXT_ARG_PAINT = GIMP_CONTEXT_ARG_OPACITY |
|
||||
GIMP_CONTEXT_ARG_PAINT_MODE,
|
||||
GIMP_CONTEXT_ARG_ALL = GIMP_CONTEXT_ARG_PAINT |
|
||||
GIMP_CONTEXT_ARG_IMAGE |
|
||||
GIMP_CONTEXT_ARG_DISPLAY
|
||||
GIMP_CONTEXT_ARG_PAINT = GIMP_CONTEXT_ARG_FOREGROUND |
|
||||
GIMP_CONTEXT_ARG_BACKGROUND |
|
||||
GIMP_CONTEXT_ARG_OPACITY |
|
||||
GIMP_CONTEXT_ARG_PAINT_MODE |
|
||||
GIMP_CONTEXT_ARG_BRUSH |
|
||||
GIMP_CONTEXT_ARG_PATTERN |
|
||||
GIMP_CONTEXT_ARG_GRADIENT,
|
||||
GIMP_CONTEXT_ARG_ALL = GIMP_CONTEXT_ARG_IMAGE |
|
||||
GIMP_CONTEXT_ARG_DISPLAY |
|
||||
GIMP_CONTEXT_ARG_TOOL
|
||||
} GimpContextArgs;
|
||||
|
||||
typedef struct _GimpContext GimpContext;
|
||||
|
@ -59,6 +75,20 @@ struct _GimpContext
|
|||
/* FIXME: the solution of having a boolean for each attribute and the
|
||||
* name "defined" need some brainstorming
|
||||
*/
|
||||
gboolean image_defined;
|
||||
GimpImage *image;
|
||||
|
||||
gboolean display_defined;
|
||||
GDisplay *display;
|
||||
|
||||
gboolean tool_defined;
|
||||
ToolType tool;
|
||||
|
||||
gboolean foreground_defined;
|
||||
guchar foreground[3];
|
||||
|
||||
gboolean background_defined;
|
||||
guchar background[3];
|
||||
|
||||
gboolean opacity_defined;
|
||||
gdouble opacity;
|
||||
|
@ -66,22 +96,32 @@ struct _GimpContext
|
|||
gboolean paint_mode_defined;
|
||||
LayerModeEffects paint_mode;
|
||||
|
||||
gboolean image_defined;
|
||||
GimpImage *image;
|
||||
gboolean brush_defined;
|
||||
GimpBrush *brush;
|
||||
|
||||
gboolean display_defined;
|
||||
GDisplay *display;
|
||||
gboolean pattern_defined;
|
||||
GPattern *pattern;
|
||||
|
||||
gboolean gradient_defined;
|
||||
gradient_t *gradient;
|
||||
};
|
||||
|
||||
struct _GimpContextClass
|
||||
{
|
||||
GimpObjectClass parent_class;
|
||||
|
||||
void (* opacity_changed) (GimpContext *context, gdouble opacity);
|
||||
void (* paint_mode_changed) (GimpContext *context, gint paint_mode);
|
||||
|
||||
void (* image_changed) (GimpContext *context, gpointer image);
|
||||
void (* display_changed) (GimpContext *context, gpointer display);
|
||||
|
||||
void (* tool_changed) (GimpContext *context, gint tool_type);
|
||||
|
||||
void (* foreground_changed) (GimpContext *context, guchar foreground[3]);
|
||||
void (* background_changed) (GimpContext *context, guchar background[3]);
|
||||
void (* opacity_changed) (GimpContext *context, gdouble opacity);
|
||||
void (* paint_mode_changed) (GimpContext *context, gint paint_mode);
|
||||
void (* brush_changed) (GimpContext *context, gpointer brush);
|
||||
void (* pattern_changed) (GimpContext *context, gpointer pattern);
|
||||
void (* gradient_changed) (GimpContext *context, gpointer gradient);
|
||||
};
|
||||
|
||||
GtkType gimp_context_get_type (void);
|
||||
|
@ -129,33 +169,96 @@ GimpContext * gimp_context_get_parent (GimpContext *context);
|
|||
void gimp_context_set_parent (GimpContext *context,
|
||||
GimpContext *parent);
|
||||
|
||||
gdouble gimp_context_get_opacity (GimpContext *context);
|
||||
void gimp_context_set_opacity (GimpContext *context,
|
||||
gdouble opacity);
|
||||
gboolean gimp_context_opacity_defined (GimpContext *context);
|
||||
void gimp_context_define_opacity (GimpContext *context,
|
||||
gboolean defined);
|
||||
/* image */
|
||||
|
||||
LayerModeEffects
|
||||
gimp_context_get_paint_mode (GimpContext *context);
|
||||
void gimp_context_set_paint_mode (GimpContext *context,
|
||||
LayerModeEffects paint_mode);
|
||||
gboolean gimp_context_paint_mode_defined (GimpContext *context);
|
||||
void gimp_context_define_paint_mode (GimpContext *context,
|
||||
gboolean defined);
|
||||
GimpImage * gimp_context_get_image (GimpContext *context);
|
||||
void gimp_context_set_image (GimpContext *context,
|
||||
GimpImage *image);
|
||||
gboolean gimp_context_image_defined (GimpContext *context);
|
||||
void gimp_context_define_image (GimpContext *context,
|
||||
gboolean defined);
|
||||
|
||||
GimpImage * gimp_context_get_image (GimpContext *context);
|
||||
void gimp_context_set_image (GimpContext *context,
|
||||
GimpImage *image);
|
||||
gboolean gimp_context_image_defined (GimpContext *context);
|
||||
void gimp_context_define_image (GimpContext *context,
|
||||
gboolean defined);
|
||||
/* display */
|
||||
|
||||
GDisplay * gimp_context_get_display (GimpContext *context);
|
||||
void gimp_context_set_display (GimpContext *context,
|
||||
GDisplay *display);
|
||||
gboolean gimp_context_display_defined (GimpContext *context);
|
||||
void gimp_context_define_display (GimpContext *context,
|
||||
gboolean defined);
|
||||
GDisplay * gimp_context_get_display (GimpContext *context);
|
||||
void gimp_context_set_display (GimpContext *context,
|
||||
GDisplay *display);
|
||||
gboolean gimp_context_display_defined (GimpContext *context);
|
||||
void gimp_context_define_display (GimpContext *context,
|
||||
gboolean defined);
|
||||
|
||||
/* tool */
|
||||
|
||||
ToolType gimp_context_get_tool (GimpContext *context);
|
||||
void gimp_context_set_tool (GimpContext *context,
|
||||
ToolType tool_type);
|
||||
gboolean gimp_context_tool_defined (GimpContext *context);
|
||||
void gimp_context_define_tool (GimpContext *context,
|
||||
gboolean defined);
|
||||
|
||||
/* foreground color */
|
||||
|
||||
void gimp_context_get_foreground (GimpContext *context,
|
||||
guchar foreground[3]);
|
||||
void gimp_context_set_foreground (GimpContext *context,
|
||||
guchar foreground[3]);
|
||||
gboolean gimp_context_foreground_defined (GimpContext *context);
|
||||
void gimp_context_define_foreground (GimpContext *context,
|
||||
gboolean defined);
|
||||
|
||||
/* background color */
|
||||
|
||||
void gimp_context_get_background (GimpContext *context,
|
||||
guchar background[3]);
|
||||
void gimp_context_set_background (GimpContext *context,
|
||||
guchar background[3]);
|
||||
gboolean gimp_context_background_defined (GimpContext *context);
|
||||
void gimp_context_define_background (GimpContext *context,
|
||||
gboolean defined);
|
||||
|
||||
/* opacity */
|
||||
|
||||
gdouble gimp_context_get_opacity (GimpContext *context);
|
||||
void gimp_context_set_opacity (GimpContext *context,
|
||||
gdouble opacity);
|
||||
gboolean gimp_context_opacity_defined (GimpContext *context);
|
||||
void gimp_context_define_opacity (GimpContext *context,
|
||||
gboolean defined);
|
||||
|
||||
/* paint mode */
|
||||
|
||||
LayerModeEffects gimp_context_get_paint_mode (GimpContext *context);
|
||||
void gimp_context_set_paint_mode (GimpContext *context,
|
||||
LayerModeEffects paint_mode);
|
||||
gboolean gimp_context_paint_mode_defined (GimpContext *context);
|
||||
void gimp_context_define_paint_mode (GimpContext *context,
|
||||
gboolean defined);
|
||||
|
||||
/* brush */
|
||||
|
||||
GimpBrush * gimp_context_get_brush (GimpContext *context);
|
||||
void gimp_context_set_brush (GimpContext *context,
|
||||
GimpBrush *brush);
|
||||
gboolean gimp_context_brush_defined (GimpContext *context);
|
||||
void gimp_context_define_brush (GimpContext *context,
|
||||
gboolean defined);
|
||||
|
||||
/* pattern */
|
||||
|
||||
GPattern * gimp_context_get_pattern (GimpContext *context);
|
||||
void gimp_context_set_pattern (GimpContext *context,
|
||||
GPattern *pattern);
|
||||
gboolean gimp_context_pattern_defined (GimpContext *context);
|
||||
void gimp_context_define_pattern (GimpContext *context,
|
||||
gboolean defined);
|
||||
|
||||
/* gradient */
|
||||
|
||||
gradient_t * gimp_context_get_gradient (GimpContext *context);
|
||||
void gimp_context_set_gradient (GimpContext *context,
|
||||
gradient_t *gradient);
|
||||
gboolean gimp_context_gradient_defined (GimpContext *context);
|
||||
void gimp_context_define_gradient (GimpContext *context,
|
||||
gboolean defined);
|
||||
|
||||
#endif /* __GIMP_CONTEXT_H__ */
|
||||
|
|
Loading…
Reference in New Issue