[gimp] app: update tool widgets on display-shell changes more granularly
- From: Ell <ell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: update tool widgets on display-shell changes more granularly
- Date: Tue, 26 May 2020 07:47:19 +0000 (UTC)
commit afda774f44654f8f0c9fd385eb1eb8c9b16bde49
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.
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 3a275c1959..21f5149176 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 28f6f5075f..dba2a91ac6 100644
--- a/app/display/gimptoolwidget.c
+++ b/app/display/gimptoolwidget.c
@@ -221,6 +221,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);
@@ -229,6 +230,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 ceb1a2a1cc..638284b4b6 100644
--- a/app/display/gimptoolwidget.h
+++ b/app/display/gimptoolwidget.h
@@ -125,6 +125,10 @@ struct _GimpToolWidgetClass
const GimpCoords *coords,
GdkModifierType state,
const gchar **ui_path);
+
+ 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 35ea89f80b..129f9293d8 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]