[gimp/gimp-2-10] app: update tool widgets on display-shell changes more granularly
- From: Ell <ell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/gimp-2-10] app: update tool widgets on display-shell changes more granularly
- Date: Tue, 26 May 2020 07:47:09 +0000 (UTC)
commit 0c4e6f1ef3b2d8881427ee0f58f5b9dfe63450f9
Author: Ell <ell_se yahoo com>
Date: Tue May 26 10:36:58 2020 +0300
app: update tool widgets on display-shell changes more granularly
Partially revert commit c73710e410b663edee14bbfb1a0b96b7fbeb9047,
avoiding updating tool widgets unconditionally on tool resume in
GimpDrawTool -- it's too expensive in general.
Instead, handle display-shell changes in GimpToolWidget, by adding
GimpToolWidget::update_on_{scale,scroll,rotate} flags, which
subclasses can use to request an update on any of these events.
Set the flags as necessary for the affected widgets.
(cherry picked from commit afda774f44654f8f0c9fd385eb1eb8c9b16bde49)
app/display/gimptoolcompass.c | 28 +++++++++++++++-------------
app/display/gimptoolfocus.c | 1 +
app/display/gimptoolrectangle.c | 1 +
app/display/gimptooltransformgrid.c | 1 +
app/display/gimptoolwidget.c | 28 ++++++++++++++++++++++++++++
app/display/gimptoolwidget.h | 4 ++++
app/tools/gimpdrawtool.c | 4 ----
7 files changed, 50 insertions(+), 17 deletions(-)
---
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;
-
- 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;
+ 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->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:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]