[gimp/multi-stroke: 16/31] App: do not keep mirror guides around. Just straight add/remove them.
- From: Jehan Pagès <jehanp src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/multi-stroke: 16/31] App: do not keep mirror guides around. Just straight add/remove them.
- Date: Sat, 1 Aug 2015 17:05:54 +0000 (UTC)
commit 7319670b037234626166b6841efc59e8b3d2bed7
Author: Jehan <jehan girinstud io>
Date: Sun Mar 22 12:28:10 2015 +0100
App: do not keep mirror guides around. Just straight add/remove them.
app/core/gimpsymmetry-mirror.c | 104 +++++++++++++++++++++-------------------
1 files changed, 54 insertions(+), 50 deletions(-)
---
diff --git a/app/core/gimpsymmetry-mirror.c b/app/core/gimpsymmetry-mirror.c
index 2a3b01a..02fb777 100644
--- a/app/core/gimpsymmetry-mirror.c
+++ b/app/core/gimpsymmetry-mirror.c
@@ -520,21 +520,19 @@ gimp_mirror_set_horizontal_symmetry (GimpMirror *mirror,
mirror->horizontal_mirror = active;
- if (active)
+ if (active && ! mirror->horizontal_guide)
{
- if (! mirror->horizontal_guide)
- {
- /* Create a new mirror guide. */
- Gimp *gimp = GIMP (image->gimp);
- GimpMirrorGuide *guide;
-
- /* Mirror guide position at first activation is at canvas middle. */
- mirror->horizontal_position = (gdouble) gimp_image_get_height (image) / 2.0;
- guide = gimp_mirror_guide_new (gimp,
- GIMP_ORIENTATION_HORIZONTAL,
- gimp->next_guide_ID++);
- mirror->horizontal_guide = guide;
- } /* Else reuse existing guide at same position. */
+ /* Create a new mirror guide. */
+ Gimp *gimp = GIMP (image->gimp);
+ GimpMirrorGuide *guide;
+
+ /* Mirror guide position at first activation is at canvas middle. */
+ if (mirror->horizontal_position < 1.0)
+ mirror->horizontal_position = (gdouble) gimp_image_get_height (image) / 2.0;
+ guide = gimp_mirror_guide_new (gimp,
+ GIMP_ORIENTATION_HORIZONTAL,
+ gimp->next_guide_ID++);
+ mirror->horizontal_guide = guide;
g_signal_connect (G_OBJECT (mirror->horizontal_guide), "removed",
G_CALLBACK (gimp_mirror_guide_removed_cb),
@@ -545,10 +543,8 @@ gimp_mirror_set_horizontal_symmetry (GimpMirror *mirror,
G_CALLBACK (gimp_mirror_guide_position_cb),
mirror);
}
- else if (! mirror->point_symmetry)
+ else if (! active && ! mirror->point_symmetry)
{
- /* We remove the guide but keep the reference,
- * so that when we reshow it, we can just reuse the same guide. */
g_signal_handlers_disconnect_by_func (G_OBJECT (mirror->horizontal_guide),
gimp_mirror_guide_removed_cb,
mirror);
@@ -557,6 +553,8 @@ gimp_mirror_set_horizontal_symmetry (GimpMirror *mirror,
mirror);
gimp_image_remove_guide (image, GIMP_GUIDE (mirror->horizontal_guide),
FALSE);
+ g_object_unref (mirror->horizontal_guide);
+ mirror->horizontal_guide = NULL;
}
gimp_mirror_reset (mirror);
@@ -588,26 +586,25 @@ gimp_mirror_set_vertical_symmetry (GimpMirror *mirror,
GimpMirrorGuide *guide;
/* Mirror guide position at first activation is at canvas middle. */
- mirror->vertical_position = (gdouble) gimp_image_get_width (image) / 2.0;
+ if (mirror->vertical_position < 1.0)
+ mirror->vertical_position = (gdouble) gimp_image_get_width (image) / 2.0;
guide = gimp_mirror_guide_new (gimp,
GIMP_ORIENTATION_VERTICAL,
gimp->next_guide_ID++);
mirror->vertical_guide = guide;
- } /* Else reuse existing guide at same position. */
- g_signal_connect (G_OBJECT (mirror->vertical_guide), "removed",
- G_CALLBACK (gimp_mirror_guide_removed_cb),
- mirror);
- gimp_image_add_guide (image, GIMP_GUIDE (mirror->vertical_guide),
- (gint) mirror->vertical_position);
- g_signal_connect (G_OBJECT (mirror->vertical_guide), "notify::position",
- G_CALLBACK (gimp_mirror_guide_position_cb),
- mirror);
+ g_signal_connect (G_OBJECT (mirror->vertical_guide), "removed",
+ G_CALLBACK (gimp_mirror_guide_removed_cb),
+ mirror);
+ gimp_image_add_guide (image, GIMP_GUIDE (mirror->vertical_guide),
+ (gint) mirror->vertical_position);
+ g_signal_connect (G_OBJECT (mirror->vertical_guide), "notify::position",
+ G_CALLBACK (gimp_mirror_guide_position_cb),
+ mirror);
+ }
}
else if (! mirror->point_symmetry)
{
- /* We remove the guide but keep the reference,
- * so that when we reshow it, we can just reuse the same guide. */
g_signal_handlers_disconnect_by_func (G_OBJECT (mirror->vertical_guide),
gimp_mirror_guide_removed_cb,
mirror);
@@ -616,6 +613,8 @@ gimp_mirror_set_vertical_symmetry (GimpMirror *mirror,
mirror);
gimp_image_remove_guide (image, GIMP_GUIDE (mirror->vertical_guide),
FALSE);
+ g_object_unref (mirror->vertical_guide);
+ mirror->vertical_guide = NULL;
}
gimp_mirror_reset (mirror);
@@ -650,22 +649,23 @@ gimp_mirror_set_point_symmetry (GimpMirror *mirror,
GimpMirrorGuide *guide;
/* Mirror guide position at first activation is at canvas middle. */
- mirror->horizontal_position = (gdouble) gimp_image_get_height (image) / 2.0;
+ if (mirror->horizontal_position < 1.0)
+ mirror->horizontal_position = (gdouble) gimp_image_get_height (image) / 2.0;
guide = gimp_mirror_guide_new (gimp,
GIMP_ORIENTATION_HORIZONTAL,
gimp->next_guide_ID++);
mirror->horizontal_guide = guide;
- } /* Else reuse existing guide at same position. */
- g_signal_connect (G_OBJECT (mirror->horizontal_guide), "removed",
- G_CALLBACK (gimp_mirror_guide_removed_cb),
- mirror);
- gimp_image_add_guide (image, GIMP_GUIDE (mirror->horizontal_guide),
- (gint) mirror->horizontal_position);
- g_signal_connect (G_OBJECT (mirror->horizontal_guide), "notify::position",
- G_CALLBACK (gimp_mirror_guide_position_cb),
- mirror);
+ g_signal_connect (G_OBJECT (mirror->horizontal_guide), "removed",
+ G_CALLBACK (gimp_mirror_guide_removed_cb),
+ mirror);
+ gimp_image_add_guide (image, GIMP_GUIDE (mirror->horizontal_guide),
+ (gint) mirror->horizontal_position);
+ g_signal_connect (G_OBJECT (mirror->horizontal_guide), "notify::position",
+ G_CALLBACK (gimp_mirror_guide_position_cb),
+ mirror);
+ }
}
/* Show the vertical guide unless already shown */
@@ -678,22 +678,22 @@ gimp_mirror_set_point_symmetry (GimpMirror *mirror,
GimpMirrorGuide *guide;
/* Mirror guide position at first activation is at canvas middle. */
- mirror->vertical_position = (gdouble) gimp_image_get_width (image) / 2.0;
+ if (mirror->vertical_position < 1.0)
+ mirror->vertical_position = (gdouble) gimp_image_get_width (image) / 2.0;
guide = gimp_mirror_guide_new (gimp,
GIMP_ORIENTATION_VERTICAL,
gimp->next_guide_ID++);
mirror->vertical_guide = guide;
- } /* Else reuse existing guide at same position. */
-
- g_signal_connect (G_OBJECT (mirror->vertical_guide), "removed",
- G_CALLBACK (gimp_mirror_guide_removed_cb),
- mirror);
- gimp_image_add_guide (image, GIMP_GUIDE (mirror->vertical_guide),
- (gint) mirror->vertical_position);
- g_signal_connect (G_OBJECT (mirror->vertical_guide), "notify::position",
- G_CALLBACK (gimp_mirror_guide_position_cb),
- mirror);
+ g_signal_connect (G_OBJECT (mirror->vertical_guide), "removed",
+ G_CALLBACK (gimp_mirror_guide_removed_cb),
+ mirror);
+ gimp_image_add_guide (image, GIMP_GUIDE (mirror->vertical_guide),
+ (gint) mirror->vertical_position);
+ g_signal_connect (G_OBJECT (mirror->vertical_guide), "notify::position",
+ G_CALLBACK (gimp_mirror_guide_position_cb),
+ mirror);
+ }
}
}
else
@@ -709,6 +709,8 @@ gimp_mirror_set_point_symmetry (GimpMirror *mirror,
mirror);
gimp_image_remove_guide (image, GIMP_GUIDE (mirror->horizontal_guide),
FALSE);
+ g_object_unref (mirror->horizontal_guide);
+ mirror->horizontal_guide = NULL;
}
/* Hide the vertical guide unless needed by vertical mirror */
if (! mirror->vertical_mirror)
@@ -721,6 +723,8 @@ gimp_mirror_set_point_symmetry (GimpMirror *mirror,
mirror);
gimp_image_remove_guide (image, GIMP_GUIDE (mirror->vertical_guide),
FALSE);
+ g_object_unref (mirror->vertical_guide);
+ mirror->vertical_guide = NULL;
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]