[gimp] app: tag the symmetry properties as pixel-coordinate/pixel-distance
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: tag the symmetry properties as pixel-coordinate/pixel-distance
- Date: Wed, 6 Jul 2016 10:38:45 +0000 (UTC)
commit eae2261f167c5f276c2172ac457a50d4b8b29eab
Author: Michael Natterer <mitch gimp org>
Date: Wed Jul 6 12:37:10 2016 +0200
app: tag the symmetry properties as pixel-coordinate/pixel-distance
so they get the proper soft limits in the generated GUI. Also rename
some properties for consisency, and add some blank lines for better
readability.
app/core/gimpsymmetry-mandala.c | 33 +++++++++++++-----
app/core/gimpsymmetry-mirror.c | 45 ++++++++++++++++++------
app/core/gimpsymmetry-tiling.c | 71 +++++++++++++++++++++++---------------
3 files changed, 100 insertions(+), 49 deletions(-)
---
diff --git a/app/core/gimpsymmetry-mandala.c b/app/core/gimpsymmetry-mandala.c
index 3f7d0a4..6ff6b91 100644
--- a/app/core/gimpsymmetry-mandala.c
+++ b/app/core/gimpsymmetry-mandala.c
@@ -103,6 +103,7 @@ gimp_mandala_class_init (GimpMandalaClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GimpSymmetryClass *symmetry_class = GIMP_SYMMETRY_CLASS (klass);
+ GParamSpec *pspec;
object_class->constructed = gimp_mandala_constructed;
object_class->finalize = gimp_mandala_finalize;
@@ -122,6 +123,10 @@ gimp_mandala_class_init (GimpMandalaClass *klass)
GIMP_PARAM_STATIC_STRINGS |
GIMP_SYMMETRY_PARAM_GUI);
+ pspec = g_object_class_find_property (object_class, "center-x");
+ gegl_param_spec_set_property_key (pspec, "unit", "pixel-coordinate");
+ gegl_param_spec_set_property_key (pspec, "axis", "x");
+
GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_CENTER_Y,
"center-y",
_("Center ordinate"),
@@ -130,6 +135,10 @@ gimp_mandala_class_init (GimpMandalaClass *klass)
GIMP_PARAM_STATIC_STRINGS |
GIMP_SYMMETRY_PARAM_GUI);
+ pspec = g_object_class_find_property (object_class, "center-y");
+ gegl_param_spec_set_property_key (pspec, "unit", "pixel-coordinate");
+ gegl_param_spec_set_property_key (pspec, "axis", "y");
+
GIMP_CONFIG_PROP_INT (object_class, PROP_SIZE,
"size",
_("Number of points"),
@@ -157,10 +166,6 @@ gimp_mandala_constructed (GObject *object)
{
GimpSymmetry *sym = GIMP_SYMMETRY (object);
- /* TODO:
- * - "center-x" property should be soft-limited by the width;
- * - "center-y" property should be soft-limited by the height.
- */
g_signal_connect_object (sym->image, "size-changed-detailed",
G_CALLBACK (gimp_mandala_image_size_changed_cb),
sym, 0);
@@ -188,6 +193,7 @@ gimp_mandala_finalize (GObject *object)
if (iter->data)
g_object_unref (G_OBJECT (iter->data));
}
+
g_list_free (mandala->ops);
mandala->ops = NULL;
}
@@ -211,6 +217,7 @@ gimp_mandala_set_property (GObject *object,
g_value_get_double (value) < (gdouble) gimp_image_get_width (image))
{
mandala->center_x = g_value_get_double (value);
+
if (mandala->vertical_guide)
{
g_signal_handlers_block_by_func (mandala->vertical_guide,
@@ -225,11 +232,13 @@ gimp_mandala_set_property (GObject *object,
}
}
break;
+
case PROP_CENTER_Y:
if (g_value_get_double (value) > 0.0 &&
g_value_get_double (value) < (gdouble) gimp_image_get_height (image))
{
mandala->center_y = g_value_get_double (value);
+
if (mandala->horizontal_guide)
{
g_signal_handlers_block_by_func (mandala->horizontal_guide,
@@ -244,12 +253,15 @@ gimp_mandala_set_property (GObject *object,
}
}
break;
+
case PROP_SIZE:
mandala->size = g_value_get_int (value);
break;
+
case PROP_DISABLE_TRANSFORMATION:
mandala->disable_transformation = g_value_get_boolean (value);
break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -258,9 +270,9 @@ gimp_mandala_set_property (GObject *object,
static void
gimp_mandala_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
{
GimpMandala *mandala = GIMP_MANDALA (object);
@@ -293,6 +305,7 @@ gimp_mandala_active_changed (GimpSymmetry *sym)
{
if (! mandala->horizontal_guide)
gimp_mandala_add_guide (mandala, GIMP_ORIENTATION_HORIZONTAL);
+
if (! mandala->vertical_guide)
gimp_mandala_add_guide (mandala, GIMP_ORIENTATION_VERTICAL);
}
@@ -300,6 +313,7 @@ gimp_mandala_active_changed (GimpSymmetry *sym)
{
if (mandala->horizontal_guide)
gimp_mandala_remove_guide (mandala, GIMP_ORIENTATION_HORIZONTAL);
+
if (mandala->vertical_guide)
gimp_mandala_remove_guide (mandala, GIMP_ORIENTATION_VERTICAL);
}
@@ -329,6 +343,7 @@ gimp_mandala_add_guide (GimpMandala *mandala,
/* Mandala guide position at first activation is at canvas middle. */
if (mandala->center_y < 1.0)
mandala->center_y = (gdouble) gimp_image_get_height (image) / 2.0;
+
position = (gint) mandala->center_y;
}
else
@@ -338,8 +353,10 @@ gimp_mandala_add_guide (GimpMandala *mandala,
/* Mandala guide position at first activation is at canvas middle. */
if (mandala->center_x < 1.0)
mandala->center_x = (gdouble) gimp_image_get_width (image) / 2.0;
+
position = (gint) mandala->center_x;
}
+
g_signal_connect (guide, "removed",
G_CALLBACK (gimp_mandala_guide_removed_cb),
mandala);
@@ -550,8 +567,6 @@ gimp_mandala_image_size_changed_cb (GimpImage *image,
if (previous_width != gimp_image_get_width (image) ||
previous_height != gimp_image_get_height (image))
{
- /* TODO: change soft limits of "center-x" and "center-y"
- * properties. */
g_signal_emit_by_name (sym, "gui-param-changed", sym->image);
}
}
diff --git a/app/core/gimpsymmetry-mirror.c b/app/core/gimpsymmetry-mirror.c
index 2c4d36c..4177dee 100644
--- a/app/core/gimpsymmetry-mirror.c
+++ b/app/core/gimpsymmetry-mirror.c
@@ -113,6 +113,7 @@ gimp_mirror_class_init (GimpMirrorClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GimpSymmetryClass *symmetry_class = GIMP_SYMMETRY_CLASS (klass);
+ GParamSpec *pspec;
object_class->constructed = gimp_mirror_constructed;
object_class->finalize = gimp_mirror_finalize;
@@ -164,6 +165,10 @@ gimp_mirror_class_init (GimpMirrorClass *klass)
GIMP_PARAM_STATIC_STRINGS |
GIMP_SYMMETRY_PARAM_GUI);
+ pspec = g_object_class_find_property (object_class, "horizontal-position");
+ gegl_param_spec_set_property_key (pspec, "unit", "pixel-coordinate");
+ gegl_param_spec_set_property_key (pspec, "axis", "y");
+
GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_VERTICAL_POSITION,
"vertical-position",
_("Vertical axis position"),
@@ -171,6 +176,10 @@ gimp_mirror_class_init (GimpMirrorClass *klass)
0.0, G_MAXDOUBLE, 0.0,
GIMP_PARAM_STATIC_STRINGS |
GIMP_SYMMETRY_PARAM_GUI);
+
+ pspec = g_object_class_find_property (object_class, "vertical-position");
+ gegl_param_spec_set_property_key (pspec, "unit", "pixel-coordinate");
+ gegl_param_spec_set_property_key (pspec, "axis", "x");
}
static void
@@ -183,11 +192,6 @@ gimp_mirror_constructed (GObject *object)
{
GimpSymmetry *sym = GIMP_SYMMETRY (object);
- /* TODO:
- * - "horizontal-position" property should be soft-limited by the height;
- * - "vertical-position" property should be soft-limited by the width.
- */
-
g_signal_connect_object (sym->image, "size-changed-detailed",
G_CALLBACK (gimp_mirror_image_size_changed_cb),
sym, 0);
@@ -236,22 +240,27 @@ gimp_mirror_set_property (GObject *object,
gimp_mirror_set_horizontal_symmetry (mirror,
g_value_get_boolean (value));
break;
+
case PROP_VERTICAL_SYMMETRY:
gimp_mirror_set_vertical_symmetry (mirror,
g_value_get_boolean (value));
break;
+
case PROP_POINT_SYMMETRY:
gimp_mirror_set_point_symmetry (mirror,
g_value_get_boolean (value));
break;
+
case PROP_DISABLE_TRANSFORMATION:
mirror->disable_transformation = g_value_get_boolean (value);
break;
+
case PROP_HORIZONTAL_POSITION:
if (g_value_get_double (value) > 0.0 &&
g_value_get_double (value) < (gdouble) gimp_image_get_height (image))
{
mirror->horizontal_position = g_value_get_double (value);
+
if (mirror->horizontal_guide)
{
g_signal_handlers_block_by_func (mirror->horizontal_guide,
@@ -266,11 +275,13 @@ gimp_mirror_set_property (GObject *object,
}
}
break;
+
case PROP_VERTICAL_POSITION:
if (g_value_get_double (value) > 0.0 &&
g_value_get_double (value) < (gdouble) gimp_image_get_width (image))
{
mirror->vertical_position = g_value_get_double (value);
+
if (mirror->vertical_guide)
{
g_signal_handlers_block_by_func (mirror->vertical_guide,
@@ -285,6 +296,7 @@ gimp_mirror_set_property (GObject *object,
}
}
break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -365,9 +377,10 @@ gimp_mirror_update_strokes (GimpSymmetry *sym,
g_signal_emit_by_name (sym, "strokes-updated", sym->image);
}
-static void gimp_mirror_prepare_operations (GimpMirror *mirror,
- gint paint_width,
- gint paint_height)
+static void
+gimp_mirror_prepare_operations (GimpMirror *mirror,
+ gint paint_width,
+ gint paint_height)
{
if (paint_width == mirror->last_paint_width &&
paint_height == mirror->last_paint_height)
@@ -526,6 +539,7 @@ gimp_mirror_remove_guide (GimpMirror *mirror,
g_signal_handlers_disconnect_by_func (G_OBJECT (guide),
gimp_mirror_guide_position_cb,
mirror);
+
gimp_image_remove_guide (image, guide, FALSE);
g_object_unref (guide);
@@ -568,6 +582,7 @@ gimp_mirror_guide_removed_cb (GObject *object,
g_signal_handlers_disconnect_by_func (G_OBJECT (mirror->vertical_guide),
gimp_mirror_guide_position_cb,
mirror);
+
gimp_image_remove_guide (symmetry->image,
mirror->vertical_guide,
FALSE);
@@ -594,6 +609,7 @@ gimp_mirror_guide_removed_cb (GObject *object,
g_signal_handlers_disconnect_by_func (G_OBJECT (mirror->horizontal_guide),
gimp_mirror_guide_position_cb,
mirror);
+
gimp_image_remove_guide (symmetry->image,
mirror->horizontal_guide,
FALSE);
@@ -646,6 +662,7 @@ gimp_mirror_active_changed (GimpSymmetry *sym)
if ((mirror->horizontal_mirror || mirror->point_symmetry) &&
! mirror->horizontal_guide)
gimp_mirror_add_guide (mirror, GIMP_ORIENTATION_HORIZONTAL);
+
if ((mirror->vertical_mirror || mirror->point_symmetry) &&
! mirror->vertical_guide)
gimp_mirror_add_guide (mirror, GIMP_ORIENTATION_VERTICAL);
@@ -654,6 +671,7 @@ gimp_mirror_active_changed (GimpSymmetry *sym)
{
if (mirror->horizontal_guide)
gimp_mirror_remove_guide (mirror, GIMP_ORIENTATION_HORIZONTAL);
+
if (mirror->vertical_guide)
gimp_mirror_remove_guide (mirror, GIMP_ORIENTATION_VERTICAL);
}
@@ -674,7 +692,9 @@ gimp_mirror_set_horizontal_symmetry (GimpMirror *mirror,
gimp_mirror_add_guide (mirror, GIMP_ORIENTATION_HORIZONTAL);
}
else if (! mirror->point_symmetry)
- gimp_mirror_remove_guide (mirror, GIMP_ORIENTATION_HORIZONTAL);
+ {
+ gimp_mirror_remove_guide (mirror, GIMP_ORIENTATION_HORIZONTAL);
+ }
gimp_mirror_reset (mirror);
}
@@ -694,7 +714,9 @@ gimp_mirror_set_vertical_symmetry (GimpMirror *mirror,
gimp_mirror_add_guide (mirror, GIMP_ORIENTATION_VERTICAL);
}
else if (! mirror->point_symmetry)
- gimp_mirror_remove_guide (mirror, GIMP_ORIENTATION_VERTICAL);
+ {
+ gimp_mirror_remove_guide (mirror, GIMP_ORIENTATION_VERTICAL);
+ }
gimp_mirror_reset (mirror);
}
@@ -723,6 +745,7 @@ gimp_mirror_set_point_symmetry (GimpMirror *mirror,
/* Remove the horizontal guide unless needed by horizontal mirror */
if (! mirror->horizontal_mirror)
gimp_mirror_remove_guide (mirror, GIMP_ORIENTATION_HORIZONTAL);
+
/* Remove the vertical guide unless needed by vertical mirror */
if (! mirror->vertical_mirror)
gimp_mirror_remove_guide (mirror, GIMP_ORIENTATION_VERTICAL);
@@ -742,8 +765,6 @@ gimp_mirror_image_size_changed_cb (GimpImage *image,
if (previous_width != gimp_image_get_width (image) ||
previous_height != gimp_image_get_height (image))
{
- /* TODO: change soft limits of "vertical-position" and
- * "horizontal-position" properties. */
g_signal_emit_by_name (sym, "gui-param-changed", sym->image);
}
}
diff --git a/app/core/gimpsymmetry-tiling.c b/app/core/gimpsymmetry-tiling.c
index 331a763..44dd7fd 100644
--- a/app/core/gimpsymmetry-tiling.c
+++ b/app/core/gimpsymmetry-tiling.c
@@ -45,11 +45,11 @@ enum
{
PROP_0,
- PROP_X_INTERVAL,
- PROP_Y_INTERVAL,
+ PROP_INTERVAL_X,
+ PROP_INTERVAL_Y,
PROP_SHIFT,
- PROP_X_MAX,
- PROP_Y_MAX
+ PROP_MAX_X,
+ PROP_MAX_Y
};
@@ -91,6 +91,7 @@ gimp_tiling_class_init (GimpTilingClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GimpSymmetryClass *symmetry_class = GIMP_SYMMETRY_CLASS (klass);
+ GParamSpec *pspec;
object_class->constructed = gimp_tiling_constructed;
object_class->finalize = gimp_tiling_finalize;
@@ -101,22 +102,30 @@ gimp_tiling_class_init (GimpTilingClass *klass)
symmetry_class->update_strokes = gimp_tiling_update_strokes;
symmetry_class->get_operation = gimp_tiling_get_operation;
- GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_X_INTERVAL,
- "x-interval",
+ GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_INTERVAL_X,
+ "interval-x",
_("Interval X"),
_("Interval on the X axis (pixels)"),
0.0, G_MAXDOUBLE, 0.0,
GIMP_PARAM_STATIC_STRINGS |
GIMP_SYMMETRY_PARAM_GUI);
- GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_Y_INTERVAL,
- "y-interval",
+ pspec = g_object_class_find_property (object_class, "interval-x");
+ gegl_param_spec_set_property_key (pspec, "unit", "pixel-distance");
+ gegl_param_spec_set_property_key (pspec, "axis", "x");
+
+ GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_INTERVAL_Y,
+ "interval-y",
_("Interval Y"),
_("Interval on the Y axis (pixels)"),
0.0, G_MAXDOUBLE, 0.0,
GIMP_PARAM_STATIC_STRINGS |
GIMP_SYMMETRY_PARAM_GUI);
+ pspec = g_object_class_find_property (object_class, "interval-y");
+ gegl_param_spec_set_property_key (pspec, "unit", "pixel-distance");
+ gegl_param_spec_set_property_key (pspec, "axis", "y");
+
GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_SHIFT,
"shift",
_("Shift"),
@@ -125,16 +134,16 @@ gimp_tiling_class_init (GimpTilingClass *klass)
GIMP_PARAM_STATIC_STRINGS |
GIMP_SYMMETRY_PARAM_GUI);
- GIMP_CONFIG_PROP_INT (object_class, PROP_X_MAX,
- "x-max",
+ GIMP_CONFIG_PROP_INT (object_class, PROP_MAX_X,
+ "max-x",
_("Max strokes X"),
_("Maximum number of strokes on the X axis"),
0, 100, 0,
GIMP_PARAM_STATIC_STRINGS |
GIMP_SYMMETRY_PARAM_GUI);
- GIMP_CONFIG_PROP_INT (object_class, PROP_Y_MAX,
- "y-max",
+ GIMP_CONFIG_PROP_INT (object_class, PROP_MAX_Y,
+ "max-y",
_("Max strokes Y"),
_("Maximum number of strokes on the Y axis"),
0, 100, 0,
@@ -153,11 +162,6 @@ gimp_tiling_constructed (GObject *object)
GimpSymmetry *sym = GIMP_SYMMETRY (object);
GimpTiling *tiling = GIMP_TILING (object);
- /* TODO:
- * - "x-interval" property should be soft-limited by the image width;
- * - "shift" property should be soft-limited by the width;
- * - "y-interval" property should be soft-limited by the height.
- */
g_signal_connect_object (sym->image, "size-changed-detailed",
G_CALLBACK (gimp_tiling_image_size_changed_cb),
sym, 0);
@@ -184,7 +188,7 @@ gimp_tiling_set_property (GObject *object,
switch (property_id)
{
- case PROP_X_INTERVAL:
+ case PROP_INTERVAL_X:
if (sym->image)
{
gdouble new_x = g_value_get_double (value);
@@ -206,7 +210,8 @@ gimp_tiling_set_property (GObject *object,
}
}
break;
- case PROP_Y_INTERVAL:
+
+ case PROP_INTERVAL_Y:
{
gdouble new_y = g_value_get_double (value);
@@ -227,6 +232,7 @@ gimp_tiling_set_property (GObject *object,
}
}
break;
+
case PROP_SHIFT:
{
gdouble new_shift = g_value_get_double (value);
@@ -240,16 +246,19 @@ gimp_tiling_set_property (GObject *object,
}
}
break;
- case PROP_X_MAX:
+
+ case PROP_MAX_X:
tiling->max_x = g_value_get_int (value);
if (sym->drawable)
gimp_tiling_update_strokes (sym, sym->drawable, sym->origin);
break;
- case PROP_Y_MAX:
+
+ case PROP_MAX_Y:
tiling->max_y = g_value_get_int (value);
if (sym->drawable)
gimp_tiling_update_strokes (sym, sym->drawable, sym->origin);
break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -266,19 +275,19 @@ gimp_tiling_get_property (GObject *object,
switch (property_id)
{
- case PROP_X_INTERVAL:
+ case PROP_INTERVAL_X:
g_value_set_double (value, tiling->interval_x);
break;
- case PROP_Y_INTERVAL:
+ case PROP_INTERVAL_Y:
g_value_set_double (value, tiling->interval_y);
break;
case PROP_SHIFT:
g_value_set_double (value, tiling->shift);
break;
- case PROP_X_MAX:
+ case PROP_MAX_X:
g_value_set_int (value, tiling->max_x);
break;
- case PROP_Y_MAX:
+ case PROP_MAX_Y:
g_value_set_int (value, tiling->max_y);
break;
default:
@@ -312,33 +321,41 @@ gimp_tiling_update_strokes (GimpSymmetry *sym,
if (origin->x > 0 && tiling->max_x == 0)
startx = origin->x - tiling->interval_x * (gint) (origin->x / tiling->interval_x + 1);
+
if (origin->y > 0 && tiling->max_y == 0)
{
starty = origin->y - tiling->interval_y * (gint) (origin->y / tiling->interval_y + 1);
+
if (tiling->shift > 0.0)
startx -= tiling->shift * (gint) (origin->y / tiling->interval_y + 1);
}
+
for (y_count = 0, y = starty; y < height + tiling->interval_y;
y_count++, y += tiling->interval_y)
{
if (tiling->max_y && y_count >= (gint) tiling->max_y)
break;
+
for (x_count = 0, x = startx; x < width + tiling->interval_x;
x_count++, x += tiling->interval_x)
{
if (tiling->max_x && x_count >= (gint) tiling->max_x)
break;
+
coords = g_memdup (origin, sizeof (GimpCoords));
coords->x = x;
coords->y = y;
strokes = g_list_prepend (strokes, coords);
+
if (tiling->interval_x < 1.0)
break;
}
+
if (tiling->max_x || startx + tiling->shift <= 0.0)
startx = startx + tiling->shift;
else
startx = startx - tiling->interval_x + tiling->shift;
+
if (tiling->interval_y < 1.0)
break;
}
@@ -366,11 +383,9 @@ gimp_tiling_image_size_changed_cb (GimpImage *image,
gint previous_height,
GimpSymmetry *sym)
{
- if (previous_width != gimp_image_get_width (image) ||
+ if (previous_width != gimp_image_get_width (image) ||
previous_height != gimp_image_get_height (image))
{
- /* TODO: change soft limits of "x-interval", "y-interval" and
- * "shift" properties. */
g_signal_emit_by_name (sym, "gui-param-changed", sym->image);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]