Commit ef9b04c5 authored by Michael Natterer's avatar Michael Natterer 😴 Committed by Michael Natterer

Fixed incomplete core/ui separation of paint tools and paint methods:

2005-12-27  Michael Natterer  <mitch@gimp.org>

	Fixed incomplete core/ui separation of paint tools and paint
	methods:

	* app/core/core-enums.h
	* app/core/gimpcontext.[ch]: added a "paint-info" property and API
	so the current paint method can be selected without the need for
	an active tool.

	(gimp_context_real_set_tool): set the paint-info to
	tool_info->paint_info so the paint method follows the active tool
	just as the active image follows the active display.

	* app/core/gimp.h (struct Gimp)
	* app/core/gimppaintinfo.[ch]: added "standard_paint_info" API
	and stuff to be consistent with other context object properties.

	* app/paint/gimp-paint.c: set the paintbrush as
	standard_paint_info.

	* app/core/gimpstrokedesc.c (gimp_stroke_desc_new): removed the
	hack of falling back to the paintbrush when there is no active
	tool and use the active paint method instead. Fall back to the
	standard paint method if there is no active one.
	(nothing in the core uses the active tool any more now).

	* app/widgets/gimpdeviceinfo.h: add the paint info to the
	properties which are saved in devicerc.

	Added identifiers (names) and stock-ids to GimpPaintInfo:

	* app/core/gimppaintinfo.[ch] (gimp_paint_info_new): added
	identifier and stock-id parameters.

	* app/core/gimptoolinfo.c (gimp_tool_info_new): removed the hack
	of setting the paint-info stock-id from the tool-info stock-id.

	* app/paint/paint-types.h
	* app/paint/gimp-paint.c: changed GimpPaintRegisterCallback
	accordingly.

	* app/tools/gimp-tools.c (gimp_tools_register): changed paint
	info names accordingly.

	* app/paint/*.c (gimp_*_register): pass identifier and stock-id
	accordingly.
parent d23fa327
2005-12-27 Michael Natterer <mitch@gimp.org>
Fixed incomplete core/ui separation of paint tools and paint
methods:
* app/core/core-enums.h
* app/core/gimpcontext.[ch]: added a "paint-info" property and API
so the current paint method can be selected without the need for
an active tool.
(gimp_context_real_set_tool): set the paint-info to
tool_info->paint_info so the paint method follows the active tool
just as the active image follows the active display.
* app/core/gimp.h (struct Gimp)
* app/core/gimppaintinfo.[ch]: added "standard_paint_info" API
and stuff to be consistent with other context object properties.
* app/paint/gimp-paint.c: set the paintbrush as
standard_paint_info.
* app/core/gimpstrokedesc.c (gimp_stroke_desc_new): removed the
hack of falling back to the paintbrush when there is no active
tool and use the active paint method instead. Fall back to the
standard paint method if there is no active one.
(nothing in the core uses the active tool any more now).
* app/widgets/gimpdeviceinfo.h: add the paint info to the
properties which are saved in devicerc.
Added identifiers (names) and stock-ids to GimpPaintInfo:
* app/core/gimppaintinfo.[ch] (gimp_paint_info_new): added
identifier and stock-id parameters.
* app/core/gimptoolinfo.c (gimp_tool_info_new): removed the hack
of setting the paint-info stock-id from the tool-info stock-id.
* app/paint/paint-types.h
* app/paint/gimp-paint.c: changed GimpPaintRegisterCallback
accordingly.
* app/tools/gimp-tools.c (gimp_tools_register): changed paint
info names accordingly.
* app/paint/*.c (gimp_*_register): pass identifier and stock-id
accordingly.
2005-12-27 Sven Neumann <sven@gimp.org>
* plug-ins/common/unsharp.c (query): fixed type of threshold
......
......@@ -449,18 +449,19 @@ typedef enum /*< pdb-skip, skip >*/
GIMP_CONTEXT_PROP_IMAGE = GIMP_CONTEXT_FIRST_PROP,
GIMP_CONTEXT_PROP_DISPLAY = 3,
GIMP_CONTEXT_PROP_TOOL = 4,
GIMP_CONTEXT_PROP_FOREGROUND = 5,
GIMP_CONTEXT_PROP_BACKGROUND = 6,
GIMP_CONTEXT_PROP_OPACITY = 7,
GIMP_CONTEXT_PROP_PAINT_MODE = 8,
GIMP_CONTEXT_PROP_BRUSH = 9,
GIMP_CONTEXT_PROP_PATTERN = 10,
GIMP_CONTEXT_PROP_GRADIENT = 11,
GIMP_CONTEXT_PROP_PALETTE = 12,
GIMP_CONTEXT_PROP_FONT = 13,
GIMP_CONTEXT_PROP_BUFFER = 14,
GIMP_CONTEXT_PROP_IMAGEFILE = 15,
GIMP_CONTEXT_PROP_TEMPLATE = 16,
GIMP_CONTEXT_PROP_PAINT_INFO = 5,
GIMP_CONTEXT_PROP_FOREGROUND = 6,
GIMP_CONTEXT_PROP_BACKGROUND = 7,
GIMP_CONTEXT_PROP_OPACITY = 8,
GIMP_CONTEXT_PROP_PAINT_MODE = 9,
GIMP_CONTEXT_PROP_BRUSH = 10,
GIMP_CONTEXT_PROP_PATTERN = 11,
GIMP_CONTEXT_PROP_GRADIENT = 12,
GIMP_CONTEXT_PROP_PALETTE = 13,
GIMP_CONTEXT_PROP_FONT = 14,
GIMP_CONTEXT_PROP_BUFFER = 15,
GIMP_CONTEXT_PROP_IMAGEFILE = 16,
GIMP_CONTEXT_PROP_TEMPLATE = 17,
GIMP_CONTEXT_LAST_PROP = GIMP_CONTEXT_PROP_TEMPLATE
} GimpContextPropType;
......@@ -470,18 +471,19 @@ typedef enum /*< pdb-skip, skip >*/
GIMP_CONTEXT_IMAGE_MASK = 1 << 2,
GIMP_CONTEXT_DISPLAY_MASK = 1 << 3,
GIMP_CONTEXT_TOOL_MASK = 1 << 4,
GIMP_CONTEXT_FOREGROUND_MASK = 1 << 5,
GIMP_CONTEXT_BACKGROUND_MASK = 1 << 6,
GIMP_CONTEXT_OPACITY_MASK = 1 << 7,
GIMP_CONTEXT_PAINT_MODE_MASK = 1 << 8,
GIMP_CONTEXT_BRUSH_MASK = 1 << 9,
GIMP_CONTEXT_PATTERN_MASK = 1 << 10,
GIMP_CONTEXT_GRADIENT_MASK = 1 << 11,
GIMP_CONTEXT_PALETTE_MASK = 1 << 12,
GIMP_CONTEXT_FONT_MASK = 1 << 13,
GIMP_CONTEXT_BUFFER_MASK = 1 << 14,
GIMP_CONTEXT_IMAGEFILE_MASK = 1 << 15,
GIMP_CONTEXT_TEMPLATE_MASK = 1 << 16,
GIMP_CONTEXT_PAINT_INFO_MASK = 1 << 5,
GIMP_CONTEXT_FOREGROUND_MASK = 1 << 6,
GIMP_CONTEXT_BACKGROUND_MASK = 1 << 7,
GIMP_CONTEXT_OPACITY_MASK = 1 << 8,
GIMP_CONTEXT_PAINT_MODE_MASK = 1 << 9,
GIMP_CONTEXT_BRUSH_MASK = 1 << 10,
GIMP_CONTEXT_PATTERN_MASK = 1 << 11,
GIMP_CONTEXT_GRADIENT_MASK = 1 << 12,
GIMP_CONTEXT_PALETTE_MASK = 1 << 13,
GIMP_CONTEXT_FONT_MASK = 1 << 14,
GIMP_CONTEXT_BUFFER_MASK = 1 << 15,
GIMP_CONTEXT_IMAGEFILE_MASK = 1 << 16,
GIMP_CONTEXT_TEMPLATE_MASK = 1 << 17,
/* aliases */
GIMP_CONTEXT_PAINT_PROPS_MASK = (GIMP_CONTEXT_FOREGROUND_MASK |
......@@ -494,6 +496,7 @@ typedef enum /*< pdb-skip, skip >*/
GIMP_CONTEXT_ALL_PROPS_MASK = (GIMP_CONTEXT_IMAGE_MASK |
GIMP_CONTEXT_DISPLAY_MASK |
GIMP_CONTEXT_TOOL_MASK |
GIMP_CONTEXT_PAINT_INFO_MASK |
GIMP_CONTEXT_PALETTE_MASK |
GIMP_CONTEXT_FONT_MASK |
GIMP_CONTEXT_BUFFER_MASK |
......
......@@ -64,6 +64,7 @@ struct _Gimp
GimpParasiteList *parasites;
GimpContainer *paint_info_list;
GimpPaintInfo *standard_paint_info;
GimpModuleDB *module_db;
gboolean write_modulerc;
......
......@@ -43,6 +43,7 @@
#include "gimpgradient.h"
#include "gimpimage.h"
#include "gimpmarshal.h"
#include "gimppaintinfo.h"
#include "gimppalette.h"
#include "gimppattern.h"
#include "gimptemplate.h"
......@@ -122,6 +123,17 @@ static void gimp_context_tool_list_thaw (GimpContainer *container,
static void gimp_context_real_set_tool (GimpContext *context,
GimpToolInfo *tool_info);
/* paint info */
static void gimp_context_paint_info_dirty (GimpPaintInfo *paint_info,
GimpContext *context);
static void gimp_context_paint_info_removed (GimpContainer *container,
GimpPaintInfo *paint_info,
GimpContext *context);
static void gimp_context_paint_info_list_thaw(GimpContainer *container,
GimpContext *context);
static void gimp_context_real_set_paint_info (GimpContext *context,
GimpPaintInfo *paint_info);
/* foreground */
static void gimp_context_real_set_foreground (GimpContext *context,
const GimpRGB *color);
......@@ -251,6 +263,7 @@ enum
IMAGE_CHANGED,
DISPLAY_CHANGED,
TOOL_CHANGED,
PAINT_INFO_CHANGED,
FOREGROUND_CHANGED,
BACKGROUND_CHANGED,
OPACITY_CHANGED,
......@@ -273,6 +286,7 @@ static gchar *gimp_context_prop_names[] =
"image",
"display",
"tool",
"paint-info",
"foreground",
"background",
"opacity",
......@@ -294,6 +308,7 @@ static GType gimp_context_prop_types[] =
0,
G_TYPE_NONE,
0,
0,
G_TYPE_NONE,
G_TYPE_NONE,
G_TYPE_NONE,
......@@ -317,12 +332,13 @@ G_DEFINE_TYPE_WITH_CODE (GimpContext, gimp_context, GIMP_TYPE_OBJECT,
static guint gimp_context_signals[LAST_SIGNAL] = { 0 };
static GimpToolInfo *standard_tool_info = NULL;
static GimpBrush *standard_brush = NULL;
static GimpPattern *standard_pattern = NULL;
static GimpGradient *standard_gradient = NULL;
static GimpPalette *standard_palette = NULL;
static GimpFont *standard_font = NULL;
static GimpToolInfo *standard_tool_info = NULL;
static GimpPaintInfo *standard_paint_info = NULL;
static GimpBrush *standard_brush = NULL;
static GimpPattern *standard_pattern = NULL;
static GimpGradient *standard_gradient = NULL;
static GimpPalette *standard_palette = NULL;
static GimpFont *standard_font = NULL;
static void
......@@ -366,6 +382,16 @@ gimp_context_class_init (GimpContextClass *klass)
G_TYPE_NONE, 1,
GIMP_TYPE_TOOL_INFO);
gimp_context_signals[PAINT_INFO_CHANGED] =
g_signal_new ("paint-info-changed",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpContextClass, paint_info_changed),
NULL, NULL,
gimp_marshal_VOID__OBJECT,
G_TYPE_NONE, 1,
GIMP_TYPE_PAINT_INFO);
gimp_context_signals[FOREGROUND_CHANGED] =
g_signal_new ("foreground-changed",
G_TYPE_FROM_CLASS (klass),
......@@ -497,6 +523,7 @@ gimp_context_class_init (GimpContextClass *klass)
klass->image_changed = NULL;
klass->display_changed = NULL;
klass->tool_changed = NULL;
klass->paint_info_changed = NULL;
klass->foreground_changed = NULL;
klass->background_changed = NULL;
klass->opacity_changed = NULL;
......@@ -510,16 +537,17 @@ gimp_context_class_init (GimpContextClass *klass)
klass->imagefile_changed = NULL;
klass->template_changed = NULL;
gimp_context_prop_types[GIMP_CONTEXT_PROP_IMAGE] = GIMP_TYPE_IMAGE;
gimp_context_prop_types[GIMP_CONTEXT_PROP_TOOL] = GIMP_TYPE_TOOL_INFO;
gimp_context_prop_types[GIMP_CONTEXT_PROP_BRUSH] = GIMP_TYPE_BRUSH;
gimp_context_prop_types[GIMP_CONTEXT_PROP_PATTERN] = GIMP_TYPE_PATTERN;
gimp_context_prop_types[GIMP_CONTEXT_PROP_GRADIENT] = GIMP_TYPE_GRADIENT;
gimp_context_prop_types[GIMP_CONTEXT_PROP_PALETTE] = GIMP_TYPE_PALETTE;
gimp_context_prop_types[GIMP_CONTEXT_PROP_FONT] = GIMP_TYPE_FONT;
gimp_context_prop_types[GIMP_CONTEXT_PROP_BUFFER] = GIMP_TYPE_BUFFER;
gimp_context_prop_types[GIMP_CONTEXT_PROP_IMAGEFILE] = GIMP_TYPE_IMAGEFILE;
gimp_context_prop_types[GIMP_CONTEXT_PROP_TEMPLATE] = GIMP_TYPE_TEMPLATE;
gimp_context_prop_types[GIMP_CONTEXT_PROP_IMAGE] = GIMP_TYPE_IMAGE;
gimp_context_prop_types[GIMP_CONTEXT_PROP_TOOL] = GIMP_TYPE_TOOL_INFO;
gimp_context_prop_types[GIMP_CONTEXT_PROP_PAINT_INFO] = GIMP_TYPE_PAINT_INFO;
gimp_context_prop_types[GIMP_CONTEXT_PROP_BRUSH] = GIMP_TYPE_BRUSH;
gimp_context_prop_types[GIMP_CONTEXT_PROP_PATTERN] = GIMP_TYPE_PATTERN;
gimp_context_prop_types[GIMP_CONTEXT_PROP_GRADIENT] = GIMP_TYPE_GRADIENT;
gimp_context_prop_types[GIMP_CONTEXT_PROP_PALETTE] = GIMP_TYPE_PALETTE;
gimp_context_prop_types[GIMP_CONTEXT_PROP_FONT] = GIMP_TYPE_FONT;
gimp_context_prop_types[GIMP_CONTEXT_PROP_BUFFER] = GIMP_TYPE_BUFFER;
gimp_context_prop_types[GIMP_CONTEXT_PROP_IMAGEFILE] = GIMP_TYPE_IMAGEFILE;
gimp_context_prop_types[GIMP_CONTEXT_PROP_TEMPLATE] = GIMP_TYPE_TEMPLATE;
g_object_class_install_property (object_class, GIMP_CONTEXT_PROP_GIMP,
g_param_spec_object ("gimp",
......@@ -545,6 +573,11 @@ gimp_context_class_init (GimpContextClass *klass)
GIMP_TYPE_TOOL_INFO,
0);
GIMP_CONFIG_INSTALL_PROP_OBJECT (object_class, GIMP_CONTEXT_PROP_PAINT_INFO,
gimp_context_prop_names[GIMP_CONTEXT_PROP_PAINT_INFO], NULL,
GIMP_TYPE_PAINT_INFO,
0);
GIMP_CONFIG_INSTALL_PROP_RGB (object_class, GIMP_CONTEXT_PROP_FOREGROUND,
gimp_context_prop_names[GIMP_CONTEXT_PROP_FOREGROUND],
NULL,
......@@ -637,6 +670,9 @@ gimp_context_init (GimpContext *context)
context->tool_info = NULL;
context->tool_name = NULL;
context->paint_info = NULL;
context->paint_name = NULL;
context->brush = NULL;
context->brush_name = NULL;
......@@ -700,6 +736,13 @@ gimp_context_constructor (GType type,
G_CALLBACK (gimp_context_tool_list_thaw),
object, 0);
g_signal_connect_object (gimp->paint_info_list, "remove",
G_CALLBACK (gimp_context_paint_info_removed),
object, 0);
g_signal_connect_object (gimp->paint_info_list, "thaw",
G_CALLBACK (gimp_context_paint_info_list_thaw),
object, 0);
g_signal_connect_object (gimp->brush_factory->container, "remove",
G_CALLBACK (gimp_context_brush_removed),
object, 0);
......@@ -794,6 +837,17 @@ gimp_context_finalize (GObject *object)
context->tool_name = NULL;
}
if (context->paint_info)
{
g_object_unref (context->paint_info);
context->paint_info = NULL;
}
if (context->paint_name)
{
g_free (context->paint_name);
context->paint_name = NULL;
}
if (context->brush)
{
g_object_unref (context->brush);
......@@ -907,6 +961,9 @@ gimp_context_set_property (GObject *object,
case GIMP_CONTEXT_PROP_TOOL:
gimp_context_set_tool (context, g_value_get_object (value));
break;
case GIMP_CONTEXT_PROP_PAINT_INFO:
gimp_context_set_paint_info (context, g_value_get_object (value));
break;
case GIMP_CONTEXT_PROP_FOREGROUND:
gimp_context_set_foreground (context, g_value_get_boxed (value));
break;
......@@ -971,6 +1028,9 @@ gimp_context_get_property (GObject *object,
case GIMP_CONTEXT_PROP_TOOL:
g_value_set_object (value, gimp_context_get_tool (context));
break;
case GIMP_CONTEXT_PROP_PAINT_INFO:
g_value_set_object (value, gimp_context_get_paint_info (context));
break;
case GIMP_CONTEXT_PROP_FOREGROUND:
{
GimpRGB color;
......@@ -1033,6 +1093,9 @@ gimp_context_get_memsize (GimpObject *object,
if (context->tool_name)
memsize += strlen (context->tool_name) + 1;
if (context->paint_name)
memsize += strlen (context->paint_name) + 1;
if (context->brush_name)
memsize += strlen (context->brush_name) + 1;
......@@ -1083,6 +1146,7 @@ gimp_context_serialize_property (GimpConfig *config,
switch (property_id)
{
case GIMP_CONTEXT_PROP_TOOL:
case GIMP_CONTEXT_PROP_PAINT_INFO:
case GIMP_CONTEXT_PROP_BRUSH:
case GIMP_CONTEXT_PROP_PATTERN:
case GIMP_CONTEXT_PROP_GRADIENT:
......@@ -1131,6 +1195,13 @@ gimp_context_deserialize_property (GimpConfig *object,
no_data = TRUE;
break;
case GIMP_CONTEXT_PROP_PAINT_INFO:
container = context->gimp->paint_info_list;
current = (GimpObject *) context->paint_info;
name_loc = &context->paint_name;
no_data = TRUE;
break;
case GIMP_CONTEXT_PROP_BRUSH:
container = context->gimp->brush_factory->container;
current = (GimpObject *) context->brush;
......@@ -1425,6 +1496,14 @@ gimp_context_copy_property (GimpContext *src,
dest_name_loc = &dest->tool_name;
break;
case GIMP_CONTEXT_PROP_PAINT_INFO:
gimp_context_real_set_paint_info (dest, src->paint_info);
object = src->paint_info;
standard_object = standard_paint_info;
src_name = src->paint_name;
dest_name_loc = &dest->paint_name;
break;
case GIMP_CONTEXT_PROP_FOREGROUND:
gimp_context_real_set_foreground (dest, &src->foreground);
break;
......@@ -1862,6 +1941,9 @@ gimp_context_real_set_tool (GimpContext *context,
if (tool_info != standard_tool_info)
context->tool_name = g_strdup (GIMP_OBJECT (tool_info)->name);
if (tool_info->paint_info)
gimp_context_real_set_paint_info (context, tool_info->paint_info);
}
g_object_notify (G_OBJECT (context), "tool");
......@@ -1869,6 +1951,129 @@ gimp_context_real_set_tool (GimpContext *context,
}
/*****************************************************************************/
/* paint info **************************************************************/
GimpPaintInfo *
gimp_context_get_paint_info (GimpContext *context)
{
g_return_val_if_fail (GIMP_IS_CONTEXT (context), NULL);
return context->paint_info;
}
void
gimp_context_set_paint_info (GimpContext *context,
GimpPaintInfo *paint_info)
{
g_return_if_fail (GIMP_IS_CONTEXT (context));
g_return_if_fail (! paint_info || GIMP_IS_PAINT_INFO (paint_info));
context_find_defined (context, GIMP_CONTEXT_PROP_PAINT_INFO);
gimp_context_real_set_paint_info (context, paint_info);
}
void
gimp_context_paint_info_changed (GimpContext *context)
{
g_return_if_fail (GIMP_IS_CONTEXT (context));
g_signal_emit (context,
gimp_context_signals[PAINT_INFO_CHANGED], 0,
context->paint_info);
}
/* the active paint info was modified */
static void
gimp_context_paint_info_dirty (GimpPaintInfo *paint_info,
GimpContext *context)
{
g_free (context->paint_name);
context->paint_name = g_strdup (GIMP_OBJECT (paint_info)->name);
}
/* the global paint info list is there again after refresh */
static void
gimp_context_paint_info_list_thaw (GimpContainer *container,
GimpContext *context)
{
GimpPaintInfo *paint_info;
if (! context->paint_name)
context->paint_name = g_strdup ("GimpPaintbrush");
paint_info = gimp_context_find_object (context, container,
context->paint_name,
gimp_paint_info_get_standard (context->gimp));
gimp_context_real_set_paint_info (context, paint_info);
}
/* the active paint info disappeared */
static void
gimp_context_paint_info_removed (GimpContainer *container,
GimpPaintInfo *paint_info,
GimpContext *context)
{
if (paint_info == context->paint_info)
{
context->paint_info = NULL;
g_signal_handlers_disconnect_by_func (paint_info,
gimp_context_paint_info_dirty,
context);
g_object_unref (paint_info);
if (! gimp_container_frozen (container))
gimp_context_paint_info_list_thaw (container, context);
}
}
static void
gimp_context_real_set_paint_info (GimpContext *context,
GimpPaintInfo *paint_info)
{
if (! standard_paint_info)
standard_paint_info = gimp_paint_info_get_standard (context->gimp);
if (context->paint_info == paint_info)
return;
if (context->paint_name && paint_info != standard_paint_info)
{
g_free (context->paint_name);
context->paint_name = NULL;
}
/* disconnect from the old paint info's signals */
if (context->paint_info)
{
g_signal_handlers_disconnect_by_func (context->paint_info,
gimp_context_paint_info_dirty,
context);
g_object_unref (context->paint_info);
}
context->paint_info = paint_info;
if (paint_info)
{
g_object_ref (paint_info);
g_signal_connect_object (paint_info, "name-changed",
G_CALLBACK (gimp_context_paint_info_dirty),
context,
0);
if (paint_info != standard_paint_info)
context->paint_name = g_strdup (GIMP_OBJECT (paint_info)->name);
}
g_object_notify (G_OBJECT (context), "paint-info");
gimp_context_paint_info_changed (context);
}
/*****************************************************************************/
/* foreground color ********************************************************/
......
......@@ -53,6 +53,9 @@ struct _GimpContext
GimpToolInfo *tool_info;
gchar *tool_name;
GimpPaintInfo *paint_info;
gchar *paint_name;
GimpRGB foreground;
GimpRGB background;
......@@ -95,6 +98,8 @@ struct _GimpContextClass
void (* tool_changed) (GimpContext *context,
GimpToolInfo *tool_info);
void (* paint_info_changed) (GimpContext *context,
GimpPaintInfo *paint_info);
void (* foreground_changed) (GimpContext *context,
GimpRGB *color);
......@@ -208,6 +213,13 @@ void gimp_context_set_tool (GimpContext *context,
void gimp_context_tool_changed (GimpContext *context);
/* paint info */
GimpPaintInfo * gimp_context_get_paint_info (GimpContext *context);
void gimp_context_set_paint_info (GimpContext *context,
GimpPaintInfo *paint_info);
void gimp_context_paint_info_changed (GimpContext *context);
/* foreground color */
void gimp_context_get_foreground (GimpContext *context,
GimpRGB *color);
......
......@@ -91,15 +91,20 @@ GimpPaintInfo *
gimp_paint_info_new (Gimp *gimp,
GType paint_type,
GType paint_options_type,
const gchar *blurb)
const gchar *identifier,
const gchar *blurb,
const gchar *stock_id)
{
GimpPaintInfo *paint_info;
g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
g_return_val_if_fail (identifier != NULL, NULL);
g_return_val_if_fail (blurb != NULL, NULL);
g_return_val_if_fail (stock_id != NULL, NULL);
paint_info = g_object_new (GIMP_TYPE_PAINT_INFO,
"name", g_type_name (paint_type),
"name", identifier,
"stock-id", stock_id,
NULL);
paint_info->gimp = gimp;
......@@ -111,3 +116,30 @@ gimp_paint_info_new (Gimp *gimp,
return paint_info;
}
void
gimp_paint_info_set_standard (Gimp *gimp,
GimpPaintInfo *paint_info)
{
g_return_if_fail (GIMP_IS_GIMP (gimp));
g_return_if_fail (! paint_info || GIMP_IS_PAINT_INFO (paint_info));
if (paint_info != gimp->standard_paint_info)
{
if (gimp->standard_paint_info)
g_object_unref (gimp->standard_paint_info);
gimp->standard_paint_info = paint_info;
if (gimp->standard_paint_info)
g_object_ref (gimp->standard_paint_info);
}
}
GimpPaintInfo *
gimp_paint_info_get_standard (Gimp *gimp)
{
g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
return gimp->standard_paint_info;
}
......@@ -53,12 +53,18 @@ struct _GimpPaintInfoClass
};
GType gimp_paint_info_get_type (void) G_GNUC_CONST;
GimpPaintInfo * gimp_paint_info_new (Gimp *gimp,
GType paint_type,
GType paint_options_type,
const gchar *blurb);
GType gimp_paint_info_get_type (void) G_GNUC_CONST;
GimpPaintInfo * gimp_paint_info_new (Gimp *gimp,
GType paint_type,
GType paint_options_type,
const gchar *identifier,
const gchar *blurb,
const gchar *stock_id);
void gimp_paint_info_set_standard (Gimp *gimp,
GimpPaintInfo *paint_info);
GimpPaintInfo * gimp_paint_info_get_standard (Gimp *gimp);
#endif /* __GIMP_PAINT_INFO_H__ */
......@@ -30,11 +30,9 @@
#include "config/gimpcoreconfig.h"
#include "core/gimp.h"
#include "core/gimpcontainer.h"
#include "core/gimpcontext.h"
#include "core/gimptoolinfo.h"
#include "gimp.h"
#include "gimpcontainer.h"
#include "gimpcontext.h"
#include "gimppaintinfo.h"
#include "gimpstrokedesc.h"
#include "gimpstrokeoptions.h"
......@@ -247,15 +245,10 @@ gimp_stroke_desc_new (Gimp *gimp,
if (context)
{
GimpToolInfo *tool_info = gimp_context_get_tool (context);
if (tool_info)
paint_info = tool_info->paint_info;
paint_info = gimp_context_get_paint_info (context);
if (! paint_info)
paint_info = (GimpPaintInfo *)
gimp_container_get_child_by_name (gimp->paint_info_list,
"GimpPaintbrush");
paint_info = gimp_paint_info_get_standard (gimp);
}