From 9ceb205cecac1f24c9f0e418d4aac36fb086b908 Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Tue, 20 Nov 2001 14:20:17 +0000 Subject: [PATCH] app/tools/gimpdrawtool.[ch] app/tools/gimppainttool.[ch] 2001-11-20 Michael Natterer * app/tools/gimpdrawtool.[ch] * app/tools/gimppainttool.[ch] * app/tools/gimprectselecttool.[ch] * app/tools/gimptool.[ch] * app/tools/gimptransformtool.[ch]: use simple virtual functions instead of signals for all tools because they are much faster and don't need to be signals at all. --- ChangeLog | 10 +++ app/paint/gimppaintcore.c | 27 +----- app/paint/gimppaintcore.h | 2 + app/tools/gimpbrushtool.c | 27 +----- app/tools/gimpbrushtool.h | 2 + app/tools/gimpdrawtool.c | 28 ++---- app/tools/gimpdrawtool.h | 2 + app/tools/gimppainttool.c | 27 +----- app/tools/gimppainttool.h | 2 + app/tools/gimprectselecttool.c | 26 +----- app/tools/gimprectselecttool.h | 2 + app/tools/gimptool.c | 152 ++------------------------------- app/tools/gimptool.h | 2 + app/tools/gimptransformtool.c | 26 +----- app/tools/gimptransformtool.h | 2 + 15 files changed, 51 insertions(+), 286 deletions(-) diff --git a/ChangeLog b/ChangeLog index a757b5d05d..39969df7e0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2001-11-20 Michael Natterer + + * app/tools/gimpdrawtool.[ch] + * app/tools/gimppainttool.[ch] + * app/tools/gimprectselecttool.[ch] + * app/tools/gimptool.[ch] + * app/tools/gimptransformtool.[ch]: use simple virtual functions + instead of signals for all tools because they are much faster and + don't need to be signals at all. + 2001-11-20 Michael Natterer * app/core/gimp.c: put a g_object_ref() on a different line. diff --git a/app/paint/gimppaintcore.c b/app/paint/gimppaintcore.c index eb8ca2305d..2941b1de1b 100644 --- a/app/paint/gimppaintcore.c +++ b/app/paint/gimppaintcore.c @@ -72,14 +72,8 @@ #define STATUSBAR_SIZE 128 -enum -{ - PAINT, - LAST_SIGNAL -}; - - /* local function prototypes */ + static void gimp_paint_tool_class_init (GimpPaintToolClass *klass); static void gimp_paint_tool_init (GimpPaintTool *paint_tool); @@ -209,9 +203,6 @@ static MaskBuf *kernel_brushes[SUBSAMPLE + 1][SUBSAMPLE + 1]; static MaskBuf *last_brush_mask = NULL; static gboolean cache_invalid = FALSE; - -static guint gimp_paint_tool_signals[LAST_SIGNAL] = { 0 }; - static GimpDrawToolClass *parent_class = NULL; @@ -254,17 +245,6 @@ gimp_paint_tool_class_init (GimpPaintToolClass *klass) parent_class = g_type_class_peek_parent (klass); - gimp_paint_tool_signals[PAINT] = - g_signal_new ("paint", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GimpPaintToolClass, paint), - NULL, NULL, - gimp_cclosure_marshal_VOID__POINTER_INT, - G_TYPE_NONE, 2, - G_TYPE_POINTER, - G_TYPE_INT); - tool_class->control = gimp_paint_tool_control; tool_class->button_press = gimp_paint_tool_button_press; tool_class->button_release = gimp_paint_tool_button_release; @@ -853,12 +833,11 @@ gimp_paint_tool_sample_color (GimpDrawable *drawable, } void -gimp_paint_tool_paint (GimpPaintTool *tool, +gimp_paint_tool_paint (GimpPaintTool *paint_tool, GimpDrawable *drawable, PaintState state) { - g_signal_emit (G_OBJECT(tool), gimp_paint_tool_signals[PAINT], 0, - drawable, state); + GIMP_PAINT_TOOL_GET_CLASS (paint_tool)->paint (paint_tool, drawable, state); } gboolean diff --git a/app/paint/gimppaintcore.h b/app/paint/gimppaintcore.h index d5b8948b88..954cacbcc8 100644 --- a/app/paint/gimppaintcore.h +++ b/app/paint/gimppaintcore.h @@ -91,6 +91,8 @@ struct _GimpPaintToolClass { GimpDrawToolClass parent_class; + /* virtual function */ + void (* paint) (GimpPaintTool *tool, GimpDrawable *drawable, PaintState paint_state); diff --git a/app/tools/gimpbrushtool.c b/app/tools/gimpbrushtool.c index eb8ca2305d..2941b1de1b 100644 --- a/app/tools/gimpbrushtool.c +++ b/app/tools/gimpbrushtool.c @@ -72,14 +72,8 @@ #define STATUSBAR_SIZE 128 -enum -{ - PAINT, - LAST_SIGNAL -}; - - /* local function prototypes */ + static void gimp_paint_tool_class_init (GimpPaintToolClass *klass); static void gimp_paint_tool_init (GimpPaintTool *paint_tool); @@ -209,9 +203,6 @@ static MaskBuf *kernel_brushes[SUBSAMPLE + 1][SUBSAMPLE + 1]; static MaskBuf *last_brush_mask = NULL; static gboolean cache_invalid = FALSE; - -static guint gimp_paint_tool_signals[LAST_SIGNAL] = { 0 }; - static GimpDrawToolClass *parent_class = NULL; @@ -254,17 +245,6 @@ gimp_paint_tool_class_init (GimpPaintToolClass *klass) parent_class = g_type_class_peek_parent (klass); - gimp_paint_tool_signals[PAINT] = - g_signal_new ("paint", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GimpPaintToolClass, paint), - NULL, NULL, - gimp_cclosure_marshal_VOID__POINTER_INT, - G_TYPE_NONE, 2, - G_TYPE_POINTER, - G_TYPE_INT); - tool_class->control = gimp_paint_tool_control; tool_class->button_press = gimp_paint_tool_button_press; tool_class->button_release = gimp_paint_tool_button_release; @@ -853,12 +833,11 @@ gimp_paint_tool_sample_color (GimpDrawable *drawable, } void -gimp_paint_tool_paint (GimpPaintTool *tool, +gimp_paint_tool_paint (GimpPaintTool *paint_tool, GimpDrawable *drawable, PaintState state) { - g_signal_emit (G_OBJECT(tool), gimp_paint_tool_signals[PAINT], 0, - drawable, state); + GIMP_PAINT_TOOL_GET_CLASS (paint_tool)->paint (paint_tool, drawable, state); } gboolean diff --git a/app/tools/gimpbrushtool.h b/app/tools/gimpbrushtool.h index d5b8948b88..954cacbcc8 100644 --- a/app/tools/gimpbrushtool.h +++ b/app/tools/gimpbrushtool.h @@ -91,6 +91,8 @@ struct _GimpPaintToolClass { GimpDrawToolClass parent_class; + /* virtual function */ + void (* paint) (GimpPaintTool *tool, GimpDrawable *drawable, PaintState paint_state); diff --git a/app/tools/gimpdrawtool.c b/app/tools/gimpdrawtool.c index 91dffa13c3..9d7261470a 100644 --- a/app/tools/gimpdrawtool.c +++ b/app/tools/gimpdrawtool.c @@ -30,12 +30,6 @@ #include "gimpdrawtool.h" -enum -{ - DRAW, - LAST_SIGNAL -}; - static void gimp_draw_tool_class_init (GimpDrawToolClass *klass); static void gimp_draw_tool_init (GimpDrawTool *draw_tool); @@ -63,12 +57,9 @@ static inline void gimp_draw_tool_shift_to_center gdouble *shifted_y); -static guint gimp_draw_tool_signals[LAST_SIGNAL] = { 0 }; - static GimpToolClass *parent_class = NULL; - GType gimp_draw_tool_get_type (void) { @@ -108,18 +99,11 @@ gimp_draw_tool_class_init (GimpDrawToolClass *klass) parent_class = g_type_class_peek_parent (klass); - gimp_draw_tool_signals[DRAW] = - g_signal_new ("draw", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GimpDrawToolClass, draw), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - object_class->finalize = gimp_draw_tool_finalize; tool_class->control = gimp_draw_tool_control; + + klass->draw = NULL; } static void @@ -211,7 +195,7 @@ gimp_draw_tool_start (GimpDrawTool *draw_tool, draw_tool->cap_style, draw_tool->join_style); - g_signal_emit (G_OBJECT (draw_tool), gimp_draw_tool_signals[DRAW], 0); + GIMP_DRAW_TOOL_GET_CLASS (draw_tool)->draw (draw_tool); draw_tool->draw_state = GIMP_DRAW_TOOL_STATE_VISIBLE; } @@ -224,7 +208,7 @@ gimp_draw_tool_stop (GimpDrawTool *draw_tool) if (draw_tool->draw_state == GIMP_DRAW_TOOL_STATE_INVISIBLE) return; - g_signal_emit (G_OBJECT (draw_tool), gimp_draw_tool_signals[DRAW], 0); + GIMP_DRAW_TOOL_GET_CLASS (draw_tool)->draw (draw_tool); draw_tool->draw_state = GIMP_DRAW_TOOL_STATE_INVISIBLE; } @@ -236,7 +220,7 @@ gimp_draw_tool_pause (GimpDrawTool *draw_tool) { draw_tool->draw_state = GIMP_DRAW_TOOL_STATE_INVISIBLE; - g_signal_emit (G_OBJECT (draw_tool), gimp_draw_tool_signals[DRAW], 0); + GIMP_DRAW_TOOL_GET_CLASS (draw_tool)->draw (draw_tool); } draw_tool->paused_count++; @@ -254,7 +238,7 @@ gimp_draw_tool_resume (GimpDrawTool *draw_tool) { draw_tool->draw_state = GIMP_DRAW_TOOL_STATE_VISIBLE; - g_signal_emit (G_OBJECT (draw_tool), gimp_draw_tool_signals[DRAW], 0); + GIMP_DRAW_TOOL_GET_CLASS (draw_tool)->draw (draw_tool); } } diff --git a/app/tools/gimpdrawtool.h b/app/tools/gimpdrawtool.h index 5b3a6ec18f..c1eabb8789 100644 --- a/app/tools/gimpdrawtool.h +++ b/app/tools/gimpdrawtool.h @@ -70,6 +70,8 @@ struct _GimpDrawToolClass { GimpToolClass parent_class; + /* virtual function */ + void (* draw) (GimpDrawTool *draw_tool); }; diff --git a/app/tools/gimppainttool.c b/app/tools/gimppainttool.c index eb8ca2305d..2941b1de1b 100644 --- a/app/tools/gimppainttool.c +++ b/app/tools/gimppainttool.c @@ -72,14 +72,8 @@ #define STATUSBAR_SIZE 128 -enum -{ - PAINT, - LAST_SIGNAL -}; - - /* local function prototypes */ + static void gimp_paint_tool_class_init (GimpPaintToolClass *klass); static void gimp_paint_tool_init (GimpPaintTool *paint_tool); @@ -209,9 +203,6 @@ static MaskBuf *kernel_brushes[SUBSAMPLE + 1][SUBSAMPLE + 1]; static MaskBuf *last_brush_mask = NULL; static gboolean cache_invalid = FALSE; - -static guint gimp_paint_tool_signals[LAST_SIGNAL] = { 0 }; - static GimpDrawToolClass *parent_class = NULL; @@ -254,17 +245,6 @@ gimp_paint_tool_class_init (GimpPaintToolClass *klass) parent_class = g_type_class_peek_parent (klass); - gimp_paint_tool_signals[PAINT] = - g_signal_new ("paint", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GimpPaintToolClass, paint), - NULL, NULL, - gimp_cclosure_marshal_VOID__POINTER_INT, - G_TYPE_NONE, 2, - G_TYPE_POINTER, - G_TYPE_INT); - tool_class->control = gimp_paint_tool_control; tool_class->button_press = gimp_paint_tool_button_press; tool_class->button_release = gimp_paint_tool_button_release; @@ -853,12 +833,11 @@ gimp_paint_tool_sample_color (GimpDrawable *drawable, } void -gimp_paint_tool_paint (GimpPaintTool *tool, +gimp_paint_tool_paint (GimpPaintTool *paint_tool, GimpDrawable *drawable, PaintState state) { - g_signal_emit (G_OBJECT(tool), gimp_paint_tool_signals[PAINT], 0, - drawable, state); + GIMP_PAINT_TOOL_GET_CLASS (paint_tool)->paint (paint_tool, drawable, state); } gboolean diff --git a/app/tools/gimppainttool.h b/app/tools/gimppainttool.h index d5b8948b88..954cacbcc8 100644 --- a/app/tools/gimppainttool.h +++ b/app/tools/gimppainttool.h @@ -91,6 +91,8 @@ struct _GimpPaintToolClass { GimpDrawToolClass parent_class; + /* virtual function */ + void (* paint) (GimpPaintTool *tool, GimpDrawable *drawable, PaintState paint_state); diff --git a/app/tools/gimprectselecttool.c b/app/tools/gimprectselecttool.c index 46466d49ed..a918a7d3ee 100644 --- a/app/tools/gimprectselecttool.c +++ b/app/tools/gimprectselecttool.c @@ -53,13 +53,6 @@ #define STATUSBAR_SIZE 128 -enum -{ - RECT_SELECT, - LAST_SIGNAL -}; - - static void gimp_rect_select_tool_class_init (GimpRectSelectToolClass *klass); static void gimp_rect_select_tool_init (GimpRectSelectTool *rect_select); @@ -88,8 +81,6 @@ static void gimp_rect_select_tool_real_rect_select (GimpRectSelectTool *rect_t gint h); -static guint rect_select_signals[LAST_SIGNAL] = { 0 }; - static GimpSelectionToolClass *parent_class = NULL; static SelectionOptions *rect_options = NULL; @@ -153,19 +144,6 @@ gimp_rect_select_tool_class_init (GimpRectSelectToolClass *klass) parent_class = g_type_class_peek_parent (klass); - rect_select_signals[RECT_SELECT] = - g_signal_new ("rect_select", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GimpRectSelectToolClass, rect_select), - NULL, NULL, - gimp_cclosure_marshal_VOID__INT_INT_INT_INT, - G_TYPE_NONE, 4, - G_TYPE_INT, - G_TYPE_INT, - G_TYPE_INT, - G_TYPE_INT); - tool_class->button_press = gimp_rect_select_tool_button_press; tool_class->button_release = gimp_rect_select_tool_button_release; tool_class->motion = gimp_rect_select_tool_motion; @@ -643,6 +621,6 @@ gimp_rect_select_tool_rect_select (GimpRectSelectTool *rect_tool, } } - g_signal_emit (G_OBJECT (rect_tool), rect_select_signals[RECT_SELECT], 0, - x, y, w, h); + GIMP_RECT_SELECT_TOOL_GET_CLASS (rect_tool)->rect_select (rect_tool, + x, y, w, h); } diff --git a/app/tools/gimprectselecttool.h b/app/tools/gimprectselecttool.h index 1e3f1a0bbe..791dd80e75 100644 --- a/app/tools/gimprectselecttool.h +++ b/app/tools/gimprectselecttool.h @@ -54,6 +54,8 @@ struct _GimpRectSelectToolClass { GimpSelectionToolClass parent_class; + /* virtual function */ + void (* rect_select) (GimpRectSelectTool *rect_tool, gint x, gint y, diff --git a/app/tools/gimptool.c b/app/tools/gimptool.c index 9ff6c3f366..8e6f1b2921 100644 --- a/app/tools/gimptool.c +++ b/app/tools/gimptool.c @@ -36,21 +36,6 @@ #include "libgimp/gimpintl.h" -enum -{ - INITIALIZE, - CONTROL, - BUTTON_PRESS, - BUTTON_RELEASE, - MOTION, - ARROW_KEY, - MODIFIER_KEY, - OPER_UPDATE, - CURSOR_UPDATE, - LAST_SIGNAL -}; - - static void gimp_tool_class_init (GimpToolClass *klass); static void gimp_tool_init (GimpTool *tool); @@ -92,8 +77,6 @@ static void gimp_tool_real_cursor_update (GimpTool *tool, GimpDisplay *gdisp); -static guint gimp_tool_signals[LAST_SIGNAL] = { 0 }; - static GimpObjectClass *parent_class = NULL; static gint global_tool_ID = 0; @@ -132,114 +115,6 @@ gimp_tool_class_init (GimpToolClass *klass) { parent_class = g_type_class_peek_parent (klass); - gimp_tool_signals[INITIALIZE] = - g_signal_new ("initialize", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GimpToolClass, initialize), - NULL, NULL, - g_cclosure_marshal_VOID__OBJECT, - G_TYPE_NONE, 1, - GIMP_TYPE_DISPLAY); - - gimp_tool_signals[CONTROL] = - g_signal_new ("control", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GimpToolClass, control), - NULL, NULL, - gimp_cclosure_marshal_VOID__INT_OBJECT, - G_TYPE_NONE, 2, - G_TYPE_INT, - GIMP_TYPE_DISPLAY); - - gimp_tool_signals[BUTTON_PRESS] = - g_signal_new ("button_press", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GimpToolClass, button_press), - NULL, NULL, - gimp_cclosure_marshal_VOID__POINTER_UINT_INT_OBJECT, - G_TYPE_NONE, 4, - G_TYPE_POINTER, - G_TYPE_UINT, - G_TYPE_INT, - GIMP_TYPE_DISPLAY); - - gimp_tool_signals[BUTTON_RELEASE] = - g_signal_new ("button_release", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GimpToolClass, button_release), - NULL, NULL, - gimp_cclosure_marshal_VOID__POINTER_UINT_INT_OBJECT, - G_TYPE_NONE, 4, - G_TYPE_POINTER, - G_TYPE_UINT, - G_TYPE_INT, - GIMP_TYPE_DISPLAY); - - gimp_tool_signals[MOTION] = - g_signal_new ("motion", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GimpToolClass, motion), - NULL, NULL, - gimp_cclosure_marshal_VOID__POINTER_UINT_INT_OBJECT, - G_TYPE_NONE, 4, - G_TYPE_POINTER, - G_TYPE_UINT, - G_TYPE_INT, - GIMP_TYPE_DISPLAY); - - gimp_tool_signals[ARROW_KEY] = - g_signal_new ("arrow_key", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GimpToolClass, arrow_key), - NULL, NULL, - gimp_cclosure_marshal_VOID__POINTER_OBJECT, - G_TYPE_NONE, 2, - G_TYPE_POINTER, - GIMP_TYPE_DISPLAY); - - gimp_tool_signals[MODIFIER_KEY] = - g_signal_new ("modifier_key", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GimpToolClass, modifier_key), - NULL, NULL, - gimp_cclosure_marshal_VOID__INT_BOOLEAN_INT_OBJECT, - G_TYPE_NONE, 4, - G_TYPE_INT, - G_TYPE_BOOLEAN, - G_TYPE_INT, - GIMP_TYPE_DISPLAY); - - gimp_tool_signals[OPER_UPDATE] = - g_signal_new ("oper_update", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GimpToolClass, oper_update), - NULL, NULL, - gimp_cclosure_marshal_VOID__POINTER_INT_OBJECT, - G_TYPE_NONE, 3, - G_TYPE_POINTER, - G_TYPE_INT, - GIMP_TYPE_DISPLAY); - - gimp_tool_signals[CURSOR_UPDATE] = - g_signal_new ("cursor_update", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GimpToolClass, cursor_update), - NULL, NULL, - gimp_cclosure_marshal_VOID__POINTER_INT_OBJECT, - G_TYPE_NONE, 3, - G_TYPE_POINTER, - G_TYPE_INT, - GIMP_TYPE_DISPLAY); - klass->initialize = gimp_tool_real_initialize; klass->control = gimp_tool_real_control; klass->button_press = gimp_tool_real_button_press; @@ -276,8 +151,7 @@ gimp_tool_initialize (GimpTool *tool, { g_return_if_fail (GIMP_IS_TOOL (tool)); - g_signal_emit (G_OBJECT (tool), gimp_tool_signals[INITIALIZE], 0, - gdisp); + GIMP_TOOL_GET_CLASS (tool)->initialize (tool, gdisp); } void @@ -287,8 +161,7 @@ gimp_tool_control (GimpTool *tool, { g_return_if_fail (GIMP_IS_TOOL (tool)); - g_signal_emit (G_OBJECT (tool), gimp_tool_signals[CONTROL], 0, - action, gdisp); + GIMP_TOOL_GET_CLASS (tool)->control (tool, action, gdisp); } void @@ -302,8 +175,7 @@ gimp_tool_button_press (GimpTool *tool, g_return_if_fail (coords != NULL); g_return_if_fail (GIMP_IS_DISPLAY (gdisp)); - g_signal_emit (G_OBJECT (tool), gimp_tool_signals[BUTTON_PRESS], 0, - coords, time, state, gdisp); + GIMP_TOOL_GET_CLASS (tool)->button_press (tool, coords, time, state, gdisp); } void @@ -317,8 +189,7 @@ gimp_tool_button_release (GimpTool *tool, g_return_if_fail (coords != NULL); g_return_if_fail (GIMP_IS_DISPLAY (gdisp)); - g_signal_emit (G_OBJECT (tool), gimp_tool_signals[BUTTON_RELEASE], 0, - coords, time, state, gdisp); + GIMP_TOOL_GET_CLASS (tool)->button_release (tool, coords, time, state, gdisp); } void @@ -332,8 +203,7 @@ gimp_tool_motion (GimpTool *tool, g_return_if_fail (coords != NULL); g_return_if_fail (GIMP_IS_DISPLAY (gdisp)); - g_signal_emit (G_OBJECT (tool), gimp_tool_signals[MOTION], 0, - coords, time, state, gdisp); + GIMP_TOOL_GET_CLASS (tool)->motion (tool, coords, time, state, gdisp); } void @@ -344,8 +214,7 @@ gimp_tool_arrow_key (GimpTool *tool, g_return_if_fail (GIMP_IS_TOOL (tool)); g_return_if_fail (GIMP_IS_DISPLAY (gdisp)); - g_signal_emit (G_OBJECT (tool), gimp_tool_signals[ARROW_KEY], 0, - kevent, gdisp); + GIMP_TOOL_GET_CLASS (tool)->arrow_key (tool, kevent, gdisp); } void @@ -358,8 +227,7 @@ gimp_tool_modifier_key (GimpTool *tool, g_return_if_fail (GIMP_IS_TOOL (tool)); g_return_if_fail (GIMP_IS_DISPLAY (gdisp)); - g_signal_emit (G_OBJECT (tool), gimp_tool_signals[MODIFIER_KEY], 0, - key, press, state, gdisp); + GIMP_TOOL_GET_CLASS (tool)->modifier_key (tool, key, press, state, gdisp); } void @@ -372,8 +240,7 @@ gimp_tool_oper_update (GimpTool *tool, g_return_if_fail (coords != NULL); g_return_if_fail (GIMP_IS_DISPLAY (gdisp)); - g_signal_emit (G_OBJECT (tool), gimp_tool_signals[OPER_UPDATE], 0, - coords, state, gdisp); + GIMP_TOOL_GET_CLASS (tool)->oper_update (tool, coords, state, gdisp); } void @@ -386,8 +253,7 @@ gimp_tool_cursor_update (GimpTool *tool, g_return_if_fail (coords != NULL); g_return_if_fail (GIMP_IS_DISPLAY (gdisp)); - g_signal_emit (G_OBJECT (tool), gimp_tool_signals[CURSOR_UPDATE], 0, - coords, state, gdisp); + GIMP_TOOL_GET_CLASS (tool)->cursor_update (tool, coords, state, gdisp); } diff --git a/app/tools/gimptool.h b/app/tools/gimptool.h index f529f2aedd..9ec25c880a 100644 --- a/app/tools/gimptool.h +++ b/app/tools/gimptool.h @@ -72,6 +72,8 @@ struct _GimpToolClass { GimpObjectClass parent_class; + /* virtual functions */ + void (* initialize) (GimpTool *tool, GimpDisplay *gdisp); void (* control) (GimpTool *tool, diff --git a/app/tools/gimptransformtool.c b/app/tools/gimptransformtool.c index 2c3c1a7a0f..c8458249d5 100644 --- a/app/tools/gimptransformtool.c +++ b/app/tools/gimptransformtool.c @@ -66,12 +66,6 @@ #define HANDLE 10 -enum -{ - TRANSFORM, - LAST_SIGNAL -}; - /* local function prototypes */ @@ -133,8 +127,6 @@ static gboolean transform_info_inited = FALSE; static GimpDrawToolClass *parent_class = NULL; -static guint gimp_transform_tool_signals[LAST_SIGNAL] = { 0 }; - GType gimp_transform_tool_get_type (void) @@ -177,17 +169,6 @@ gimp_transform_tool_class_init (GimpTransformToolClass *klass) parent_class = g_type_class_peek_parent (klass); - gimp_transform_tool_signals[TRANSFORM] = - g_signal_new ("transform", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GimpTransformToolClass, transform), - NULL, NULL, - gimp_cclosure_marshal_POINTER__POINTER_INT, - G_TYPE_POINTER, 2, - G_TYPE_POINTER, - G_TYPE_INT); - object_class->finalize = gimp_transform_tool_finalize; tool_class->control = gimp_transform_tool_control; @@ -708,14 +689,9 @@ gimp_transform_tool_transform (GimpTransformTool *tool, GimpDisplay *gdisp, TransformState state) { - TileManager *retval; - g_return_val_if_fail (GIMP_IS_TRANSFORM_TOOL (tool), NULL); - g_signal_emit (G_OBJECT (tool), gimp_transform_tool_signals[TRANSFORM], 0, - gdisp, state, &retval); - - return retval; + return GIMP_TRANSFORM_TOOL_GET_CLASS (tool)->transform (tool, gdisp, state); } static void diff --git a/app/tools/gimptransformtool.h b/app/tools/gimptransformtool.h index 7664995d2c..95ebc64abc 100644 --- a/app/tools/gimptransformtool.h +++ b/app/tools/gimptransformtool.h @@ -93,6 +93,8 @@ struct _GimpTransformToolClass { GimpDrawToolClass parent_class; + /* virtual function */ + TileManager * (* transform) (GimpTransformTool *tool, GimpDisplay *gdisp, TransformState state);