diff --git a/app/display/gimptoolcompass.c b/app/display/gimptoolcompass.c index 9d47d8bd5d..3d9045b9ee 100644 --- a/app/display/gimptoolcompass.c +++ b/app/display/gimptoolcompass.c @@ -185,19 +185,21 @@ gimp_tool_compass_class_init (GimpToolCompassClass *klass) GObjectClass *object_class = G_OBJECT_CLASS (klass); GimpToolWidgetClass *widget_class = GIMP_TOOL_WIDGET_CLASS (klass); - object_class->constructed = gimp_tool_compass_constructed; - object_class->set_property = gimp_tool_compass_set_property; - object_class->get_property = gimp_tool_compass_get_property; + object_class->constructed = gimp_tool_compass_constructed; + object_class->set_property = gimp_tool_compass_set_property; + object_class->get_property = gimp_tool_compass_get_property; - widget_class->changed = gimp_tool_compass_changed; - widget_class->button_press = gimp_tool_compass_button_press; - widget_class->button_release = gimp_tool_compass_button_release; - widget_class->motion = gimp_tool_compass_motion; - widget_class->hit = gimp_tool_compass_hit; - widget_class->hover = gimp_tool_compass_hover; - widget_class->leave_notify = gimp_tool_compass_leave_notify; - widget_class->motion_modifier = gimp_tool_compass_motion_modifier; - widget_class->get_cursor = gimp_tool_compass_get_cursor; + widget_class->changed = gimp_tool_compass_changed; + widget_class->button_press = gimp_tool_compass_button_press; + widget_class->button_release = gimp_tool_compass_button_release; + widget_class->motion = gimp_tool_compass_motion; + widget_class->hit = gimp_tool_compass_hit; + widget_class->hover = gimp_tool_compass_hover; + widget_class->leave_notify = gimp_tool_compass_leave_notify; + widget_class->motion_modifier = gimp_tool_compass_motion_modifier; + widget_class->get_cursor = gimp_tool_compass_get_cursor; + widget_class->update_on_scale = TRUE; + widget_class->update_on_rotate = TRUE; compass_signals[CREATE_GUIDES] = g_signal_new ("create-guides", diff --git a/app/display/gimptoolfocus.c b/app/display/gimptoolfocus.c index 4f98b7c686..a607f0691f 100644 --- a/app/display/gimptoolfocus.c +++ b/app/display/gimptoolfocus.c @@ -224,6 +224,7 @@ gimp_tool_focus_class_init (GimpToolFocusClass *klass) widget_class->motion_modifier = gimp_tool_focus_motion_modifier; widget_class->hover_modifier = gimp_tool_focus_hover_modifier; widget_class->get_cursor = gimp_tool_focus_get_cursor; + widget_class->update_on_scale = TRUE; g_object_class_install_property (object_class, PROP_TYPE, g_param_spec_enum ("type", NULL, NULL, diff --git a/app/display/gimptoolrectangle.c b/app/display/gimptoolrectangle.c index f39d1a5d3a..c1192db11a 100644 --- a/app/display/gimptoolrectangle.c +++ b/app/display/gimptoolrectangle.c @@ -463,6 +463,7 @@ gimp_tool_rectangle_class_init (GimpToolRectangleClass *klass) widget_class->key_press = gimp_tool_rectangle_key_press; widget_class->motion_modifier = gimp_tool_rectangle_motion_modifier; widget_class->get_cursor = gimp_tool_rectangle_get_cursor; + widget_class->update_on_scale = TRUE; rectangle_signals[CHANGE_COMPLETE] = g_signal_new ("change-complete", diff --git a/app/display/gimptooltransformgrid.c b/app/display/gimptooltransformgrid.c index ffbd66b84d..b186b91c33 100644 --- a/app/display/gimptooltransformgrid.c +++ b/app/display/gimptooltransformgrid.c @@ -232,6 +232,7 @@ gimp_tool_transform_grid_class_init (GimpToolTransformGridClass *klass) widget_class->leave_notify = gimp_tool_transform_grid_leave_notify; widget_class->hover_modifier = gimp_tool_transform_grid_hover_modifier; widget_class->get_cursor = gimp_tool_transform_grid_get_cursor; + widget_class->update_on_scale = TRUE; g_object_class_install_property (object_class, PROP_TRANSFORM, gimp_param_spec_matrix3 ("transform", diff --git a/app/display/gimptoolwidget.c b/app/display/gimptoolwidget.c index 2f9c321c86..516f36655a 100644 --- a/app/display/gimptoolwidget.c +++ b/app/display/gimptoolwidget.c @@ -224,6 +224,7 @@ gimp_tool_widget_constructed (GObject *object) { GimpToolWidget *widget = GIMP_TOOL_WIDGET (object); GimpToolWidgetPrivate *private = widget->private; + GimpToolWidgetClass *klass = GIMP_TOOL_WIDGET_GET_CLASS (widget); G_OBJECT_CLASS (parent_class)->constructed (object); @@ -232,6 +233,33 @@ gimp_tool_widget_constructed (GObject *object) private->item = gimp_canvas_group_new (private->shell); gimp_canvas_item_set_visible (private->item, private->visible); + + if (klass->changed) + { + if (klass->update_on_scale) + { + g_signal_connect_object (private->shell, "scaled", + G_CALLBACK (klass->changed), + widget, + G_CONNECT_SWAPPED); + } + + if (klass->update_on_scroll) + { + g_signal_connect_object (private->shell, "scrolled", + G_CALLBACK (klass->changed), + widget, + G_CONNECT_SWAPPED); + } + + if (klass->update_on_rotate) + { + g_signal_connect_object (private->shell, "rotated", + G_CALLBACK (klass->changed), + widget, + G_CONNECT_SWAPPED); + } + } } static void diff --git a/app/display/gimptoolwidget.h b/app/display/gimptoolwidget.h index f1010ea9b8..742aa2aa2d 100644 --- a/app/display/gimptoolwidget.h +++ b/app/display/gimptoolwidget.h @@ -119,6 +119,10 @@ struct _GimpToolWidgetClass GimpCursorType *cursor, GimpToolCursorType *tool_cursor, GimpCursorModifier *modifier); + + gboolean update_on_scale; + gboolean update_on_scroll; + gboolean update_on_rotate; }; diff --git a/app/tools/gimpdrawtool.c b/app/tools/gimpdrawtool.c index de6f7d7799..b97e30a052 100644 --- a/app/tools/gimpdrawtool.c +++ b/app/tools/gimpdrawtool.c @@ -217,11 +217,7 @@ gimp_draw_tool_control (GimpTool *tool, switch (action) { case GIMP_TOOL_ACTION_PAUSE: - break; - case GIMP_TOOL_ACTION_RESUME: - if (draw_tool->widget) - gimp_tool_widget_changed (draw_tool->widget); break; case GIMP_TOOL_ACTION_HALT: