Separated tool_options creation from tool registration so we don't

2002-06-17  Michael Natterer  <mitch@gimp.org>

	Separated tool_options creation from tool registration so we
	don't implicitly create widgets before gui_init():

	* libgimptool/gimptooltypes.h: removed GimpToolOptionsNewFunc
	typedef here...

	* app/core/core-types.h: ...and added it here.

	* libgimpproxy/gimpproxytypes.h: regenerated.

	* app/core/gimptoolinfo.[ch]: added a GimpToolOptionsNewFunc
	pointer to remember the constructor. Fixed the finalize() method
	(bug was never noticed because we leaked all tool infos)

	* app/tools/tool_manager.[ch]: moved tool_options creation to the
	new function tool_manager_restore(). Unref the tool infos after
	adding them to their container. Added "brush" and "gradient" to
	the context properties which are defined for tool contexts.

	* app/app_procs.c: call tool_manager_restore() after gui_init().

	* app/gui/gui.c: removed the hack introduced recently and call
	render_setup() in gui_init() again, not in gui_themes_init().

	Use the correct contexts now that they are properly initialized
	at the time of tool_options creation:

	* app/tools/gimpblendtool.c: use tool_info->context, not
	gimp_get_user_context() to get/set the tool's gradient.

	* app/paint/gimppaintcore.[ch] (gimp_paint_core_start): added a
	GimpPaintOptions paramater and get the brush to use from
	paint_options->context (instead of gimp_get_current_context()).

	* app/paint/gimppaintcore-stroke.c
	* app/tools/gimppainttool.c: changed accordingly.

	* app/tools/paint_options.c: added a brush preview to the paint
	options.
This commit is contained in:
Michael Natterer 2002-06-17 10:34:28 +00:00 committed by Michael Natterer
parent 340b6acb20
commit a3f44d8b0f
18 changed files with 232 additions and 78 deletions

View File

@ -1,3 +1,45 @@
2002-06-17 Michael Natterer <mitch@gimp.org>
Separated tool_options creation from tool registration so we
don't implicitly create widgets before gui_init():
* libgimptool/gimptooltypes.h: removed GimpToolOptionsNewFunc
typedef here...
* app/core/core-types.h: ...and added it here.
* libgimpproxy/gimpproxytypes.h: regenerated.
* app/core/gimptoolinfo.[ch]: added a GimpToolOptionsNewFunc
pointer to remember the constructor. Fixed the finalize() method
(bug was never noticed because we leaked all tool infos)
* app/tools/tool_manager.[ch]: moved tool_options creation to the
new function tool_manager_restore(). Unref the tool infos after
adding them to their container. Added "brush" and "gradient" to
the context properties which are defined for tool contexts.
* app/app_procs.c: call tool_manager_restore() after gui_init().
* app/gui/gui.c: removed the hack introduced recently and call
render_setup() in gui_init() again, not in gui_themes_init().
Use the correct contexts now that they are properly initialized
at the time of tool_options creation:
* app/tools/gimpblendtool.c: use tool_info->context, not
gimp_get_user_context() to get/set the tool's gradient.
* app/paint/gimppaintcore.[ch] (gimp_paint_core_start): added a
GimpPaintOptions paramater and get the brush to use from
paint_options->context (instead of gimp_get_current_context()).
* app/paint/gimppaintcore-stroke.c
* app/tools/gimppainttool.c: changed accordingly.
* app/tools/paint_options.c: added a brush preview to the paint
options.
2002-06-16 Michael Natterer <mitch@gimp.org> 2002-06-16 Michael Natterer <mitch@gimp.org>
Fix for #85201: Fix for #85201:

View File

@ -157,6 +157,7 @@ app_init (gint gimp_argc,
if (! no_interface) if (! no_interface)
{ {
gui_init (the_gimp); gui_init (the_gimp);
tool_manager_restore (the_gimp);
} }
/* Initialize the plug-in structures /* Initialize the plug-in structures

View File

@ -188,6 +188,8 @@ typedef struct _PathList PathList;
typedef struct _GimpToolOptions GimpToolOptions; /*< proxy-include >*/ typedef struct _GimpToolOptions GimpToolOptions; /*< proxy-include >*/
typedef GimpToolOptions * (* GimpToolOptionsNewFunc) (GimpToolInfo *tool_info); /*< proxy-include >*/
/* functions */ /* functions */

View File

@ -154,7 +154,7 @@ gimp_tool_info_finalize (GObject *object)
if (tool_info->stock_id) if (tool_info->stock_id)
{ {
g_object_unref (G_OBJECT (tool_info->stock_id)); g_free (tool_info->stock_id);
tool_info->stock_id = NULL; tool_info->stock_id = NULL;
} }
if (tool_info->stock_pixbuf) if (tool_info->stock_pixbuf)
@ -273,11 +273,7 @@ gimp_tool_info_new (Gimp *gimp,
tool_info->paint_info = paint_info; tool_info->paint_info = paint_info;
if (tool_context) if (tool_context)
{ tool_info->context = gimp_context_new (gimp, identifier, context);
tool_info->context = gimp_context_new (gimp,
identifier,
context);
}
tool_info->gimp = gimp; tool_info->gimp = gimp;
tool_info->tool_type = tool_type; tool_info->tool_type = tool_type;
@ -308,16 +304,12 @@ gimp_tool_info_set_standard (Gimp *gimp,
g_return_if_fail (! tool_info || GIMP_IS_TOOL_INFO (tool_info)); g_return_if_fail (! tool_info || GIMP_IS_TOOL_INFO (tool_info));
if (gimp->standard_tool_info) if (gimp->standard_tool_info)
{ g_object_unref (G_OBJECT (gimp->standard_tool_info));
g_object_unref (G_OBJECT (gimp->standard_tool_info));
}
gimp->standard_tool_info = tool_info; gimp->standard_tool_info = tool_info;
if (gimp->standard_tool_info) if (gimp->standard_tool_info)
{ g_object_ref (G_OBJECT (gimp->standard_tool_info));
g_object_ref (G_OBJECT (gimp->standard_tool_info));
}
} }
GimpToolInfo * GimpToolInfo *

View File

@ -52,9 +52,12 @@ struct _GimpToolInfo
gchar *help_domain; gchar *help_domain;
gchar *help_data; gchar *help_data;
const gchar *stock_id; gchar *stock_id;
GdkPixbuf *stock_pixbuf; GdkPixbuf *stock_pixbuf;
/* temp_hack, will be a GType once tool_options are GimpContext derived */
GimpToolOptionsNewFunc options_new_func;
GimpContext *context; GimpContext *context;
GimpToolOptions *tool_options; GimpToolOptions *tool_options;
GimpPaintInfo *paint_info; GimpPaintInfo *paint_info;

View File

@ -184,8 +184,6 @@ gui_themes_init (Gimp *gimp)
gdk_rgb_set_install (gimprc.install_cmap); gdk_rgb_set_install (gimprc.install_cmap);
gtk_widget_set_default_colormap (gdk_rgb_get_colormap ()); gtk_widget_set_default_colormap (gdk_rgb_get_colormap ());
render_setup (gimprc.transparency_type, gimprc.transparency_size);
} }
const gchar * const gchar *
@ -230,11 +228,7 @@ gui_init (Gimp *gimp)
color_display_init (); color_display_init ();
/* temporatily moved to gui_themes_init() until the previews have their render_setup (gimprc.transparency_type, gimprc.transparency_size);
* own render buffers
*
* render_setup (gimprc.transparency_type, gimprc.transparency_size);
*/
dialogs_init (gimp); dialogs_init (gimp);

View File

@ -44,7 +44,7 @@ gimp_paint_core_stroke (GimpPaintCore *core,
g_return_val_if_fail (strokes != NULL, FALSE); g_return_val_if_fail (strokes != NULL, FALSE);
g_return_val_if_fail (n_strokes > 0, FALSE); g_return_val_if_fail (n_strokes > 0, FALSE);
if (gimp_paint_core_start (core, drawable, &strokes[0])) if (gimp_paint_core_start (core, drawable, paint_options, &strokes[0]))
{ {
gint i; gint i;
@ -108,7 +108,7 @@ gimp_paint_core_stroke_vectors (GimpPaintCore *core,
if (! coords) if (! coords)
return FALSE; return FALSE;
if (! gimp_paint_core_start (core, drawable, &coords[0])) if (! gimp_paint_core_start (core, drawable, paint_options, &coords[0]))
{ {
g_free (coords); g_free (coords);
return FALSE; return FALSE;

View File

@ -37,8 +37,7 @@
#include "paint-funcs/paint-funcs.h" #include "paint-funcs/paint-funcs.h"
#include "core/gimp.h" #include "core/gimpbrush.h"
#include "core/gimpbrushpipe.h"
#include "core/gimpcontext.h" #include "core/gimpcontext.h"
#include "core/gimpdrawable.h" #include "core/gimpdrawable.h"
#include "core/gimpgradient.h" #include "core/gimpgradient.h"
@ -48,6 +47,7 @@
#include "gimppaintcore.h" #include "gimppaintcore.h"
#include "gimppaintcore-kernels.h" #include "gimppaintcore-kernels.h"
#include "gimppaintoptions.h"
#include "app_procs.h" #include "app_procs.h"
#include "gimprc.h" #include "gimprc.h"
@ -340,23 +340,22 @@ gimp_paint_core_paint (GimpPaintCore *core,
} }
gboolean gboolean
gimp_paint_core_start (GimpPaintCore *core, gimp_paint_core_start (GimpPaintCore *core,
GimpDrawable *drawable, GimpDrawable *drawable,
GimpCoords *coords) GimpPaintOptions *paint_options,
GimpCoords *coords)
{ {
GimpContext *context; GimpImage *gimage;
GimpImage *gimage;
g_return_val_if_fail (GIMP_IS_PAINT_CORE (core), FALSE); g_return_val_if_fail (GIMP_IS_PAINT_CORE (core), FALSE);
g_return_val_if_fail (GIMP_IS_DRAWABLE (drawable), FALSE); g_return_val_if_fail (GIMP_IS_DRAWABLE (drawable), FALSE);
g_return_val_if_fail (paint_options != NULL, FALSE);
g_return_val_if_fail (coords != NULL, FALSE); g_return_val_if_fail (coords != NULL, FALSE);
gimage = gimp_item_get_image (GIMP_ITEM (drawable)); gimage = gimp_item_get_image (GIMP_ITEM (drawable));
g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE); g_return_val_if_fail (GIMP_IS_IMAGE (gimage), FALSE);
context = gimp_get_current_context (gimage->gimp);
core->cur_coords = *coords; core->cur_coords = *coords;
/* Each buffer is the same size as /* Each buffer is the same size as
@ -364,7 +363,7 @@ gimp_paint_core_start (GimpPaintCore *core,
*/ */
if (core->grr_brush && if (core->grr_brush &&
core->grr_brush != gimp_context_get_brush (context)) core->grr_brush != gimp_context_get_brush (paint_options->context))
{ {
g_signal_handlers_disconnect_by_func (G_OBJECT (core->grr_brush), g_signal_handlers_disconnect_by_func (G_OBJECT (core->grr_brush),
gimp_paint_core_invalidate_cache, gimp_paint_core_invalidate_cache,
@ -372,7 +371,7 @@ gimp_paint_core_start (GimpPaintCore *core,
g_object_unref (G_OBJECT (core->grr_brush)); g_object_unref (G_OBJECT (core->grr_brush));
} }
core->grr_brush = gimp_context_get_brush (context); core->grr_brush = gimp_context_get_brush (paint_options->context);
if (! core->grr_brush) if (! core->grr_brush)
{ {

View File

@ -146,6 +146,7 @@ void gimp_paint_core_paint (GimpPaintCore *core,
gboolean gimp_paint_core_start (GimpPaintCore *core, gboolean gimp_paint_core_start (GimpPaintCore *core,
GimpDrawable *drawable, GimpDrawable *drawable,
GimpPaintOptions *paint_options,
GimpCoords *coords); GimpCoords *coords);
void gimp_paint_core_finish (GimpPaintCore *core, void gimp_paint_core_finish (GimpPaintCore *core,
GimpDrawable *drawable); GimpDrawable *drawable);

View File

@ -443,13 +443,9 @@ static GimpToolOptions *
blend_options_new (GimpToolInfo *tool_info) blend_options_new (GimpToolInfo *tool_info)
{ {
BlendOptions *options; BlendOptions *options;
GimpContext *user_context;
GimpGradient *gradient;
GtkWidget *vbox; GtkWidget *vbox;
GtkWidget *table; GtkWidget *table;
GtkWidget *frame; GtkWidget *frame;
GtkWidget *button;
GtkWidget *preview;
/* the new blend tool options structure */ /* the new blend tool options structure */
options = g_new0 (BlendOptions, 1); options = g_new0 (BlendOptions, 1);
@ -481,7 +477,7 @@ blend_options_new (GimpToolInfo *tool_info)
gimp_dnd_viewable_dest_set (vbox, gimp_dnd_viewable_dest_set (vbox,
GIMP_TYPE_GRADIENT, GIMP_TYPE_GRADIENT,
blend_options_drop_gradient, blend_options_drop_gradient,
options); tool_info);
gimp_dnd_viewable_dest_set (vbox, gimp_dnd_viewable_dest_set (vbox,
GIMP_TYPE_TOOL_INFO, GIMP_TYPE_TOOL_INFO,
blend_options_drop_tool, blend_options_drop_tool,
@ -506,27 +502,32 @@ blend_options_new (GimpToolInfo *tool_info)
&options->offset); &options->offset);
/* the gradient preview */ /* the gradient preview */
user_context = gimp_get_user_context (tool_info->gimp); {
gradient = gimp_context_get_gradient (user_context); GimpGradient *gradient;
GtkWidget *button;
GtkWidget *preview;
button = gtk_button_new (); gradient = gimp_context_get_gradient (tool_info->context);
preview = gimp_preview_new_full (GIMP_VIEWABLE (gradient),
96, 16, 0,
FALSE, FALSE, TRUE);
gtk_container_add (GTK_CONTAINER (button), preview);
gtk_widget_show (preview);
gimp_table_attach_aligned (GTK_TABLE (table), 0, 1, button = gtk_button_new ();
_("Gradient:"), 1.0, 0.5, preview = gimp_preview_new_full (GIMP_VIEWABLE (gradient),
button, 2, TRUE); 96, 16, 0,
FALSE, FALSE, TRUE);
gtk_container_add (GTK_CONTAINER (button), preview);
gtk_widget_show (preview);
g_signal_connect_object (G_OBJECT (user_context), "gradient_changed", gimp_table_attach_aligned (GTK_TABLE (table), 0, 1,
G_CALLBACK (gimp_preview_set_viewable), _("Gradient:"), 1.0, 0.5,
G_OBJECT (preview), button, 2, TRUE);
G_CONNECT_SWAPPED);
g_signal_connect (G_OBJECT (button), "clicked", g_signal_connect_object (G_OBJECT (tool_info->context), "gradient_changed",
G_CALLBACK (blend_options_gradient_clicked), G_CALLBACK (gimp_preview_set_viewable),
NULL); G_OBJECT (preview),
G_CONNECT_SWAPPED);
g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (blend_options_gradient_clicked),
NULL);
}
/* the gradient type menu */ /* the gradient type menu */
options->gradient_type_w = options->gradient_type_w =
@ -677,14 +678,11 @@ blend_options_drop_gradient (GtkWidget *widget,
GimpViewable *viewable, GimpViewable *viewable,
gpointer data) gpointer data)
{ {
GimpToolOptions *tool_options; GimpToolInfo *tool_info;
GimpContext *context;
tool_options = (GimpToolOptions *) data; tool_info = GIMP_TOOL_INFO (data);
context = gimp_get_user_context (tool_options->tool_info->gimp); gimp_context_set_gradient (tool_info->context, GIMP_GRADIENT (viewable));
gimp_context_set_gradient (context, GIMP_GRADIENT (viewable));
} }
static void static void

View File

@ -299,7 +299,7 @@ gimp_paint_tool_button_press (GimpTool *tool,
core->use_pressure = TRUE; core->use_pressure = TRUE;
} }
if (! gimp_paint_core_start (core, drawable, &curr_coords)) if (! gimp_paint_core_start (core, drawable, paint_options, &curr_coords))
return; return;
if ((gdisp != tool->gdisp) || ! (state & GDK_SHIFT_MASK)) if ((gdisp != tool->gdisp) || ! (state & GDK_SHIFT_MASK))

View File

@ -31,7 +31,10 @@
#include "paint/gimppaintoptions.h" #include "paint/gimppaintoptions.h"
#include "widgets/gimpdialogfactory.h"
#include "widgets/gimpdock.h"
#include "widgets/gimpenummenu.h" #include "widgets/gimpenummenu.h"
#include "widgets/gimppreview.h"
#include "widgets/gimpwidgets-constructors.h" #include "widgets/gimpwidgets-constructors.h"
#include "widgets/gtkhwrapbox.h" #include "widgets/gtkhwrapbox.h"
@ -74,6 +77,8 @@ static void paint_options_paint_mode_update (GtkWidget *widget,
static void paint_options_paint_mode_changed (GimpContext *context, static void paint_options_paint_mode_changed (GimpContext *context,
GimpLayerModeEffects paint_mode, GimpLayerModeEffects paint_mode,
gpointer data); gpointer data);
static void paint_options_brush_clicked (GtkWidget *widget,
gpointer data);
static void paint_options_gradient_toggle_callback (GtkWidget *widget, static void paint_options_gradient_toggle_callback (GtkWidget *widget,
GimpPaintOptions *options); GimpPaintOptions *options);
@ -109,7 +114,7 @@ paint_options_init (GimpPaintOptions *options,
vbox = options->tool_options.main_vbox; vbox = options->tool_options.main_vbox;
/* the main table */ /* the main table */
table = gtk_table_new (2, 3, FALSE); table = gtk_table_new (3, 3, FALSE);
gtk_table_set_col_spacings (GTK_TABLE (table), 2); gtk_table_set_col_spacings (GTK_TABLE (table), 2);
gtk_table_set_row_spacings (GTK_TABLE (table), 2); gtk_table_set_row_spacings (GTK_TABLE (table), 2);
gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0);
@ -155,6 +160,37 @@ paint_options_init (GimpPaintOptions *options,
gtk_widget_set_sensitive (mode_label, FALSE); gtk_widget_set_sensitive (mode_label, FALSE);
} }
/* the brush preview */
if (tool_info->tool_type != GIMP_TYPE_BUCKET_FILL_TOOL &&
tool_info->tool_type != GIMP_TYPE_BLEND_TOOL &&
tool_info->tool_type != GIMP_TYPE_INK_TOOL)
{
GimpBrush *brush;
GtkWidget *button;
GtkWidget *preview;
brush = gimp_context_get_brush (options->context);
button = gtk_button_new ();
preview = gimp_preview_new_full (GIMP_VIEWABLE (brush),
24, 24, 0,
FALSE, TRUE, TRUE);
gtk_container_add (GTK_CONTAINER (button), preview);
gtk_widget_show (preview);
gimp_table_attach_aligned (GTK_TABLE (table), 0, 2,
_("Brush:"), 1.0, 0.5,
button, 2, TRUE);
g_signal_connect_object (G_OBJECT (options->context), "brush_changed",
G_CALLBACK (gimp_preview_set_viewable),
G_OBJECT (preview),
G_CONNECT_SWAPPED);
g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (paint_options_brush_clicked),
NULL);
}
/* a separator after the common paint options */ /* a separator after the common paint options */
if (tool_info->tool_type == GIMP_TYPE_BLEND_TOOL) if (tool_info->tool_type == GIMP_TYPE_BLEND_TOOL)
{ {
@ -647,6 +683,19 @@ paint_options_paint_mode_changed (GimpContext *context,
GINT_TO_POINTER (paint_mode)); GINT_TO_POINTER (paint_mode));
} }
static void
paint_options_brush_clicked (GtkWidget *widget,
gpointer data)
{
GtkWidget *toplevel;
toplevel = gtk_widget_get_toplevel (widget);
if (GIMP_IS_DOCK (toplevel))
gimp_dialog_factory_dialog_raise (GIMP_DOCK (toplevel)->dialog_factory,
"gimp-brush-grid", -1);
}
static void static void
paint_options_gradient_toggle_callback (GtkWidget *widget, paint_options_gradient_toggle_callback (GtkWidget *widget,
GimpPaintOptions *options) GimpPaintOptions *options)

View File

@ -299,7 +299,7 @@ gimp_paint_tool_button_press (GimpTool *tool,
core->use_pressure = TRUE; core->use_pressure = TRUE;
} }
if (! gimp_paint_core_start (core, drawable, &curr_coords)) if (! gimp_paint_core_start (core, drawable, paint_options, &curr_coords))
return; return;
if ((gdisp != tool->gdisp) || ! (state & GDK_SHIFT_MASK)) if ((gdisp != tool->gdisp) || ! (state & GDK_SHIFT_MASK))

View File

@ -31,7 +31,10 @@
#include "paint/gimppaintoptions.h" #include "paint/gimppaintoptions.h"
#include "widgets/gimpdialogfactory.h"
#include "widgets/gimpdock.h"
#include "widgets/gimpenummenu.h" #include "widgets/gimpenummenu.h"
#include "widgets/gimppreview.h"
#include "widgets/gimpwidgets-constructors.h" #include "widgets/gimpwidgets-constructors.h"
#include "widgets/gtkhwrapbox.h" #include "widgets/gtkhwrapbox.h"
@ -74,6 +77,8 @@ static void paint_options_paint_mode_update (GtkWidget *widget,
static void paint_options_paint_mode_changed (GimpContext *context, static void paint_options_paint_mode_changed (GimpContext *context,
GimpLayerModeEffects paint_mode, GimpLayerModeEffects paint_mode,
gpointer data); gpointer data);
static void paint_options_brush_clicked (GtkWidget *widget,
gpointer data);
static void paint_options_gradient_toggle_callback (GtkWidget *widget, static void paint_options_gradient_toggle_callback (GtkWidget *widget,
GimpPaintOptions *options); GimpPaintOptions *options);
@ -109,7 +114,7 @@ paint_options_init (GimpPaintOptions *options,
vbox = options->tool_options.main_vbox; vbox = options->tool_options.main_vbox;
/* the main table */ /* the main table */
table = gtk_table_new (2, 3, FALSE); table = gtk_table_new (3, 3, FALSE);
gtk_table_set_col_spacings (GTK_TABLE (table), 2); gtk_table_set_col_spacings (GTK_TABLE (table), 2);
gtk_table_set_row_spacings (GTK_TABLE (table), 2); gtk_table_set_row_spacings (GTK_TABLE (table), 2);
gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0);
@ -155,6 +160,37 @@ paint_options_init (GimpPaintOptions *options,
gtk_widget_set_sensitive (mode_label, FALSE); gtk_widget_set_sensitive (mode_label, FALSE);
} }
/* the brush preview */
if (tool_info->tool_type != GIMP_TYPE_BUCKET_FILL_TOOL &&
tool_info->tool_type != GIMP_TYPE_BLEND_TOOL &&
tool_info->tool_type != GIMP_TYPE_INK_TOOL)
{
GimpBrush *brush;
GtkWidget *button;
GtkWidget *preview;
brush = gimp_context_get_brush (options->context);
button = gtk_button_new ();
preview = gimp_preview_new_full (GIMP_VIEWABLE (brush),
24, 24, 0,
FALSE, TRUE, TRUE);
gtk_container_add (GTK_CONTAINER (button), preview);
gtk_widget_show (preview);
gimp_table_attach_aligned (GTK_TABLE (table), 0, 2,
_("Brush:"), 1.0, 0.5,
button, 2, TRUE);
g_signal_connect_object (G_OBJECT (options->context), "brush_changed",
G_CALLBACK (gimp_preview_set_viewable),
G_OBJECT (preview),
G_CONNECT_SWAPPED);
g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (paint_options_brush_clicked),
NULL);
}
/* a separator after the common paint options */ /* a separator after the common paint options */
if (tool_info->tool_type == GIMP_TYPE_BLEND_TOOL) if (tool_info->tool_type == GIMP_TYPE_BLEND_TOOL)
{ {
@ -647,6 +683,19 @@ paint_options_paint_mode_changed (GimpContext *context,
GINT_TO_POINTER (paint_mode)); GINT_TO_POINTER (paint_mode));
} }
static void
paint_options_brush_clicked (GtkWidget *widget,
gpointer data)
{
GtkWidget *toplevel;
toplevel = gtk_widget_get_toplevel (widget);
if (GIMP_IS_DOCK (toplevel))
gimp_dialog_factory_dialog_raise (GIMP_DOCK (toplevel)->dialog_factory,
"gimp-brush-grid", -1);
}
static void static void
paint_options_gradient_toggle_callback (GtkWidget *widget, paint_options_gradient_toggle_callback (GtkWidget *widget,
GimpPaintOptions *options) GimpPaintOptions *options)

View File

@ -59,8 +59,10 @@
#include "libgimp/gimpintl.h" #include "libgimp/gimpintl.h"
#define PAINT_OPTIONS_MASK GIMP_CONTEXT_OPACITY_MASK | \ #define PAINT_OPTIONS_MASK GIMP_CONTEXT_OPACITY_MASK | \
GIMP_CONTEXT_PAINT_MODE_MASK GIMP_CONTEXT_PAINT_MODE_MASK | \
GIMP_CONTEXT_BRUSH_MASK | \
GIMP_CONTEXT_GRADIENT_MASK
typedef struct _GimpToolManager GimpToolManager; typedef struct _GimpToolManager GimpToolManager;
@ -148,6 +150,34 @@ tool_manager_init (Gimp *gimp)
gimp_container_thaw (gimp->tool_info_list); gimp_container_thaw (gimp->tool_info_list);
} }
void
tool_manager_restore (Gimp *gimp)
{
GimpToolManager *tool_manager;
GimpToolInfo *tool_info;
GList *list;
g_return_if_fail (GIMP_IS_GIMP (gimp));
tool_manager = tool_manager_get (gimp);
for (list = GIMP_LIST (gimp->tool_info_list)->list;
list;
list = g_list_next (list))
{
tool_info = GIMP_TOOL_INFO (list->data);
if (tool_info->options_new_func)
{
tool_info->tool_options = tool_info->options_new_func (tool_info);
}
else
{
tool_info->tool_options = tool_options_new (tool_info);
}
}
}
void void
tool_manager_exit (Gimp *gimp) tool_manager_exit (Gimp *gimp)
{ {
@ -542,16 +572,10 @@ tool_manager_register_tool (GType tool_type,
g_object_unref (G_OBJECT (pixbuf)); g_object_unref (G_OBJECT (pixbuf));
if (options_new_func) tool_info->options_new_func = options_new_func;
{
tool_info->tool_options = options_new_func (tool_info);
}
else
{
tool_info->tool_options = tool_options_new (tool_info);
}
gimp_container_add (gimp->tool_info_list, GIMP_OBJECT (tool_info)); gimp_container_add (gimp->tool_info_list, GIMP_OBJECT (tool_info));
g_object_unref (G_OBJECT (tool_info));
} }
GimpToolInfo * GimpToolInfo *

View File

@ -21,6 +21,7 @@
void tool_manager_init (Gimp *gimp); void tool_manager_init (Gimp *gimp);
void tool_manager_restore (Gimp *gimp);
void tool_manager_exit (Gimp *gimp); void tool_manager_exit (Gimp *gimp);
GimpTool * tool_manager_get_active (Gimp *gimp); GimpTool * tool_manager_get_active (Gimp *gimp);

View File

@ -68,6 +68,7 @@ typedef struct _GimpImage GimpImage;
typedef struct _GimpCoords GimpCoords; /*< proxy-include >*/ typedef struct _GimpCoords GimpCoords; /*< proxy-include >*/
typedef struct _GimpToolOptions GimpToolOptions; /*< proxy-include >*/ typedef struct _GimpToolOptions GimpToolOptions; /*< proxy-include >*/
typedef GimpToolOptions * (* GimpToolOptionsNewFunc) (GimpToolInfo *tool_info); /*< proxy-include >*/
/* autogenerated from "./../app/widgets/widgets-enums.h" */ /* autogenerated from "./../app/widgets/widgets-enums.h" */
/* The GIMP -- an image manipulation program /* The GIMP -- an image manipulation program

View File

@ -39,8 +39,6 @@ typedef struct _GimpTransformTool GimpTransformTool;
/* functions */ /* functions */
typedef GimpToolOptions * (* GimpToolOptionsNewFunc) (GimpToolInfo *tool_info);
typedef void (* GimpToolOptionsResetFunc) (GimpToolOptions *tool_options); typedef void (* GimpToolOptionsResetFunc) (GimpToolOptions *tool_options);
typedef void (* GimpToolRegisterCallback) (GType tool_type, typedef void (* GimpToolRegisterCallback) (GType tool_type,