[gimp/soc-2012-unified-transformation: 43/52] transformtool: Add the bunch of 8 separate options for 3 things
- From: Mikael Magnusson <mikachu src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/soc-2012-unified-transformation: 43/52] transformtool: Add the bunch of 8 separate options for 3 things
- Date: Sat, 18 Aug 2012 17:31:12 +0000 (UTC)
commit 3b0696e6b5670a69bd620b2f6bb5b9282450a4e7
Author: Mikael Magnusson <mikachu src gnome org>
Date: Sat Aug 11 14:42:39 2012 +0200
transformtool: Add the bunch of 8 separate options for 3 things
app/tools/gimprotatetool.c | 2 +-
app/tools/gimpscaletool.c | 10 +-
app/tools/gimptransformoptions.c | 166 +++++++++++++++++++++++-----------
app/tools/gimptransformoptions.h | 12 ++-
app/tools/gimptransformtool.c | 26 +++++-
app/tools/gimpunifiedtransformtool.c | 31 +++----
6 files changed, 163 insertions(+), 84 deletions(-)
---
diff --git a/app/tools/gimprotatetool.c b/app/tools/gimprotatetool.c
index 2d2f704..36d6c73 100644
--- a/app/tools/gimprotatetool.c
+++ b/app/tools/gimprotatetool.c
@@ -342,7 +342,7 @@ gimp_rotate_tool_motion (GimpTransformTool *tr_tool)
}
/* constrain the angle to 15-degree multiples if ctrl is held down */
- if (options->constrain)
+ if (options->constrain_rotate)
{
tr_tool->trans_info[ANGLE] =
FIFTEEN_DEG * (gint) ((tr_tool->trans_info[REAL_ANGLE] +
diff --git a/app/tools/gimpscaletool.c b/app/tools/gimpscaletool.c
index 66be2b2..ba61ed8 100644
--- a/app/tools/gimpscaletool.c
+++ b/app/tools/gimpscaletool.c
@@ -139,7 +139,7 @@ gimp_scale_tool_dialog_update (GimpTransformTool *tr_tool)
g_object_set (GIMP_SCALE_TOOL (tr_tool)->box,
"width", width,
"height", height,
- "keep-aspect", options->constrain,
+ "keep-aspect", options->constrain_scale,
NULL);
}
@@ -175,7 +175,7 @@ gimp_scale_tool_prepare (GimpTransformTool *tr_tool)
g_object_new (GIMP_TYPE_SIZE_BOX,
"width", tr_tool->x2 - tr_tool->x1,
"height", tr_tool->y2 - tr_tool->y1,
- "keep-aspect", options->constrain,
+ "keep-aspect", options->constrain_scale,
"unit", gimp_display_get_shell (display)->unit,
"xresolution", xres,
"yresolution", yres,
@@ -267,7 +267,7 @@ gimp_scale_tool_motion (GimpTransformTool *tr_tool)
*y1 += diff_y;
/* if control is being held, constrain the aspect ratio */
- if (options->constrain)
+ if (options->constrain_scale)
{
/* FIXME: improve this */
gdouble h = tr_tool->trans_info[Y1] - tr_tool->trans_info[Y0];
@@ -384,7 +384,7 @@ gimp_scale_tool_size_notify (GtkWidget *box,
"keep-aspect", &constrain,
NULL);
- if (constrain != options->constrain)
+ if (constrain != options->constrain_scale)
{
gint width;
gint height;
@@ -400,7 +400,7 @@ gimp_scale_tool_size_notify (GtkWidget *box,
tr_tool->aspect = (gdouble) width / (gdouble) height;
g_object_set (options,
- "constrain", constrain,
+ "constrain-scale", constrain,
NULL);
}
}
diff --git a/app/tools/gimptransformoptions.c b/app/tools/gimptransformoptions.c
index cefdbe6..6c74311 100644
--- a/app/tools/gimptransformoptions.c
+++ b/app/tools/gimptransformoptions.c
@@ -53,10 +53,14 @@ enum
PROP_PREVIEW_OPACITY,
PROP_GRID_TYPE,
PROP_GRID_SIZE,
- PROP_CONSTRAIN,
- PROP_KEEPASPECT,
- PROP_FROMPIVOT,
- PROP_FREESHEAR,
+ PROP_CONSTRAIN_MOVE,
+ PROP_CONSTRAIN_SCALE,
+ PROP_CONSTRAIN_ROTATE,
+ PROP_CONSTRAIN_SHEAR,
+ PROP_CONSTRAIN_PERSPECTIVE,
+ PROP_FROMPIVOT_SCALE,
+ PROP_FROMPIVOT_SHEAR,
+ PROP_FROMPIVOT_PERSPECTIVE,
PROP_CORNERSNAP,
PROP_FIXEDPIVOT,
};
@@ -140,23 +144,43 @@ gimp_transform_options_class_init (GimpTransformOptionsClass *klass)
N_("Size of a grid cell for variable number of composition guides"),
1, 128, 15,
GIMP_PARAM_STATIC_STRINGS);
- GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_CONSTRAIN,
- "constrain",
+ GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_CONSTRAIN_MOVE,
+ "constrain-move",
NULL,
FALSE,
GIMP_PARAM_STATIC_STRINGS);
- GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_KEEPASPECT,
- "keepaspect",
+ GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_CONSTRAIN_SCALE,
+ "constrain-scale",
NULL,
FALSE,
GIMP_PARAM_STATIC_STRINGS);
- GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_FROMPIVOT,
- "frompivot",
+ GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_CONSTRAIN_ROTATE,
+ "constrain-rotate",
NULL,
FALSE,
GIMP_PARAM_STATIC_STRINGS);
- GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_FREESHEAR,
- "freeshear",
+ GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_CONSTRAIN_SHEAR,
+ "constrain-shear",
+ NULL,
+ TRUE,
+ GIMP_PARAM_STATIC_STRINGS);
+ GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_CONSTRAIN_PERSPECTIVE,
+ "constrain-perspective",
+ NULL,
+ FALSE,
+ GIMP_PARAM_STATIC_STRINGS);
+ GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_FROMPIVOT_SCALE,
+ "frompivot-scale",
+ NULL,
+ FALSE,
+ GIMP_PARAM_STATIC_STRINGS);
+ GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_FROMPIVOT_SHEAR,
+ "frompivot-shear",
+ NULL,
+ FALSE,
+ GIMP_PARAM_STATIC_STRINGS);
+ GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_FROMPIVOT_PERSPECTIVE,
+ "frompivot-perspective",
NULL,
FALSE,
GIMP_PARAM_STATIC_STRINGS);
@@ -212,17 +236,29 @@ gimp_transform_options_set_property (GObject *object,
case PROP_GRID_SIZE:
options->grid_size = g_value_get_int (value);
break;
- case PROP_CONSTRAIN:
- options->constrain = g_value_get_boolean (value);
+ case PROP_CONSTRAIN_MOVE:
+ options->constrain_move = g_value_get_boolean (value);
+ break;
+ case PROP_CONSTRAIN_SCALE:
+ options->constrain_scale = g_value_get_boolean (value);
+ break;
+ case PROP_CONSTRAIN_ROTATE:
+ options->constrain_rotate = g_value_get_boolean (value);
break;
- case PROP_KEEPASPECT:
- options->keepaspect = g_value_get_boolean (value);
+ case PROP_CONSTRAIN_SHEAR:
+ options->constrain_shear = g_value_get_boolean (value);
break;
- case PROP_FROMPIVOT:
- options->frompivot = g_value_get_boolean (value);
+ case PROP_CONSTRAIN_PERSPECTIVE:
+ options->constrain_perspective = g_value_get_boolean (value);
break;
- case PROP_FREESHEAR:
- options->freeshear = g_value_get_boolean (value);
+ case PROP_FROMPIVOT_SCALE:
+ options->frompivot_scale = g_value_get_boolean (value);
+ break;
+ case PROP_FROMPIVOT_SHEAR:
+ options->frompivot_shear = g_value_get_boolean (value);
+ break;
+ case PROP_FROMPIVOT_PERSPECTIVE:
+ options->frompivot_perspective = g_value_get_boolean (value);
break;
case PROP_CORNERSNAP:
options->cornersnap = g_value_get_boolean (value);
@@ -270,17 +306,29 @@ gimp_transform_options_get_property (GObject *object,
case PROP_GRID_SIZE:
g_value_set_int (value, options->grid_size);
break;
- case PROP_CONSTRAIN:
- g_value_set_boolean (value, options->constrain);
+ case PROP_CONSTRAIN_MOVE:
+ g_value_set_boolean (value, options->constrain_move);
+ break;
+ case PROP_CONSTRAIN_SCALE:
+ g_value_set_boolean (value, options->constrain_scale);
break;
- case PROP_KEEPASPECT:
- g_value_set_boolean (value, options->keepaspect);
+ case PROP_CONSTRAIN_ROTATE:
+ g_value_set_boolean (value, options->constrain_rotate);
break;
- case PROP_FROMPIVOT:
- g_value_set_boolean (value, options->frompivot);
+ case PROP_CONSTRAIN_SHEAR:
+ g_value_set_boolean (value, options->constrain_shear);
break;
- case PROP_FREESHEAR:
- g_value_set_boolean (value, options->freeshear);
+ case PROP_CONSTRAIN_PERSPECTIVE:
+ g_value_set_boolean (value, options->constrain_perspective);
+ break;
+ case PROP_FROMPIVOT_SCALE:
+ g_value_set_boolean (value, options->frompivot_scale);
+ break;
+ case PROP_FROMPIVOT_SHEAR:
+ g_value_set_boolean (value, options->frompivot_shear);
+ break;
+ case PROP_FROMPIVOT_PERSPECTIVE:
+ g_value_set_boolean (value, options->frompivot_perspective);
break;
case PROP_CORNERSNAP:
g_value_set_boolean (value, options->cornersnap);
@@ -329,6 +377,7 @@ gimp_transform_options_gui (GimpToolOptions *tool_options)
GtkWidget *combo;
GtkWidget *scale;
GtkWidget *grid_box;
+ const gchar *constrain_name = NULL;
const gchar *constrain_label = NULL;
const gchar *constrain_tip = NULL;
@@ -405,26 +454,17 @@ gimp_transform_options_gui (GimpToolOptions *tool_options)
if (tool_options->tool_info->tool_type == GIMP_TYPE_ROTATE_TOOL)
{
+ constrain_name = "constrain-rotate";
constrain_label = _("15 degrees (%s)");
constrain_tip = _("Limit rotation steps to 15 degrees");
}
else if (tool_options->tool_info->tool_type == GIMP_TYPE_SCALE_TOOL)
{
+ constrain_name = "constrain-scale";
constrain_label = _("Keep aspect (%s)");
constrain_tip = _("Keep the original aspect ratio");
}
- /* The constrain behaviour is not what is in the spec, it would make the help labels essays */
- /* spec:
- * constrain move,rotate,perspective = ctrl
- * from centre scale,shear = ctrl
- * centre/corner rotate = ctrl
- * keep aspect scale = shift
- * free shear = shift
- * real life:
- * constrain move,rotate,perspective,scale(aspect),shear,rotation axis = ctrl
- * from centre scale, shear = shift
- */
//TODO: check that the selection tools use the gimp_get_*_mask() functions for constrain/etc or change to what they use
else if (tool_options->tool_info->tool_type == GIMP_TYPE_UNIFIED_TRANSFORM_TOOL)
{
@@ -434,27 +474,51 @@ gimp_transform_options_gui (GimpToolOptions *tool_options)
GdkModifierType mod;
gchar *name;
gchar *desc;
+ gchar *tip;
} opt_list[] = {
- { shift, "constrain", "Constrain movement (%s)" },
- { shift, "keepaspect", "Keep aspect (%s)" },
- { ctrl, "frompivot", "Scale from pivot / Symmetric shearing (%s)" },
- { shift, "freeshear", "Move edge freely in shearing (%s)" },
- { shift, "cornersnap", "Snap pivot point to corners/center (%s)" },
- { 0, "fixedpivot", "Lock pivot to canvas" },
+ { shift, NULL, "Constrain (%s)" },
+ { shift, "constrain-move", "Move", "Constrain movement to 45 degree angles from center (%s)" },
+ { shift, "constrain-scale", "Scale", "Maintain aspect ratio when scaling (%s)" },
+ { shift, "constrain-rotate", "Rotate", "Constrain rotation to 15 degree increments (%s)" },
+ { shift, "constrain-shear", "Shear", "Shear along edge direction only (%s)" },
+ { shift, "constrain-perspective", "Perspective", "Constrain perspective handles to move along edges and diagonal (%s)" },
+
+ { ctrl, NULL, "From pivot (%s)" },
+ { ctrl, "frompivot-scale", "Scale", "Scale from pivot point (%s)" },
+ { ctrl, "frompivot-shear", "Shear", "Shear opposite edge by same amount (%s)" },
+ { ctrl, "frompivot-perspective", "Perspective", "Maintain position of pivot while changing perspective (%s)" },
+
+ { 0, NULL, "Pivot" },
+ { shift, "cornersnap", "Snap (%s)", "Snap pivot to corners and center (%s)" },
+ { 0, "fixedpivot", "Lock", "Lock pivot position to canvas" },
};
GtkWidget *button;
gchar *label;
gint i;
- for (i = 0; i < 6; i++)
+ for (i = 0; i < 13; i++)
{
label = g_strdup_printf (opt_list[i].desc,
gimp_get_mod_string (opt_list[i].mod));
- button = gimp_prop_check_button_new (config, opt_list[i].name, label);
- gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
- gtk_widget_show (button);
+ if (opt_list[i].name)
+ {
+ button = gimp_prop_check_button_new (config, opt_list[i].name, label);
+ gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
+ gtk_widget_show (button);
+
+ label = g_strdup_printf (opt_list[i].tip,
+ gimp_get_mod_string (opt_list[i].mod));
+
+ gimp_help_set_help_data (button, label, NULL);
+ }
+ else
+ {
+ button = gtk_label_new (label);
+ gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
+ gtk_widget_show (button);
+ }
g_free (label);
}
@@ -466,12 +530,12 @@ gimp_transform_options_gui (GimpToolOptions *tool_options)
gchar *label;
GdkModifierType constrain_mask;
- constrain_mask = gimp_get_constrain_behavior_mask ();
+ constrain_mask = gimp_get_extend_selection_mask ();
label = g_strdup_printf (constrain_label,
gimp_get_mod_string (constrain_mask));
- button = gimp_prop_check_button_new (config, "constrain", label);
+ button = gimp_prop_check_button_new (config, constrain_name, label);
gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
gtk_widget_show (button);
diff --git a/app/tools/gimptransformoptions.h b/app/tools/gimptransformoptions.h
index df3060e..0f92347 100644
--- a/app/tools/gimptransformoptions.h
+++ b/app/tools/gimptransformoptions.h
@@ -46,10 +46,14 @@ struct _GimpTransformOptions
gdouble preview_opacity;
GimpGuidesType grid_type;
gint grid_size;
- gboolean constrain;
- gboolean keepaspect;
- gboolean frompivot;
- gboolean freeshear;
+ gboolean constrain_move;
+ gboolean constrain_scale;
+ gboolean constrain_rotate;
+ gboolean constrain_shear;
+ gboolean constrain_perspective;
+ gboolean frompivot_scale;
+ gboolean frompivot_shear;
+ gboolean frompivot_perspective;
gboolean cornersnap;
gboolean fixedpivot;
};
diff --git a/app/tools/gimptransformtool.c b/app/tools/gimptransformtool.c
index 88d61ed..38b9bd9 100644
--- a/app/tools/gimptransformtool.c
+++ b/app/tools/gimptransformtool.c
@@ -492,7 +492,13 @@ gimp_transform_tool_modifier_key (GimpTool *tool,
if (key == gimp_get_constrain_behavior_mask ())
{
g_object_set (options,
- "frompivot", ! options->frompivot,
+ "frompivot-scale", ! options->frompivot_scale,
+ NULL);
+ g_object_set (options,
+ "frompivot-shear", ! options->frompivot_shear,
+ NULL);
+ g_object_set (options,
+ "frompivot-perspective", ! options->frompivot_perspective,
NULL);
}
@@ -501,14 +507,21 @@ gimp_transform_tool_modifier_key (GimpTool *tool,
g_object_set (options,
"cornersnap", ! options->cornersnap,
NULL);
+
+ g_object_set (options,
+ "constrain-move", ! options->constrain_move,
+ NULL);
+ g_object_set (options,
+ "constrain-scale", ! options->constrain_scale,
+ NULL);
g_object_set (options,
- "constrain", ! options->constrain,
+ "constrain-rotate", ! options->constrain_rotate,
NULL);
g_object_set (options,
- "keepaspect", ! options->keepaspect,
+ "constrain-shear", ! options->constrain_shear,
NULL);
g_object_set (options,
- "freeshear", ! options->freeshear,
+ "constrain-perspective", ! options->constrain_perspective,
NULL);
}
}
@@ -742,7 +755,10 @@ gimp_transform_tool_options_notify (GimpTool *tool,
gimp_draw_tool_resume (GIMP_DRAW_TOOL (tr_tool));
}
- if (! strcmp (pspec->name, "constrain") || ! strcmp (pspec->name, "alternate"))
+ if (g_str_has_prefix (pspec->name, "constrain-") ||
+ g_str_has_prefix (pspec->name, "frompivot-") ||
+ ! strcmp (pspec->name, "fixedpivot") ||
+ ! strcmp (pspec->name, "cornersnap"))
{
gimp_transform_tool_dialog_update (tr_tool);
}
diff --git a/app/tools/gimpunifiedtransformtool.c b/app/tools/gimpunifiedtransformtool.c
index 44fa635..1edbd3e 100644
--- a/app/tools/gimpunifiedtransformtool.c
+++ b/app/tools/gimpunifiedtransformtool.c
@@ -585,11 +585,6 @@ gimp_unified_transform_tool_motion (GimpTransformTool *transform_tool)
GimpTransformOptions *options = GIMP_TRANSFORM_TOOL_GET_OPTIONS (transform_tool);
- gboolean constrain = options->constrain;
- gboolean keepaspect = options->keepaspect;
- gboolean frompivot = options->frompivot;
- gboolean freeshear = options->freeshear;
- gboolean cornersnap = options->cornersnap;
gboolean fixedpivot = options->fixedpivot;
TransformAction function = transform_tool->function;
@@ -617,7 +612,7 @@ gimp_unified_transform_tool_motion (GimpTransformTool *transform_tool)
/* move */
if (function == TRANSFORM_HANDLE_CENTER)
{
- if (constrain)
+ if (options->constrain_move)
{
/* snap to 45 degree vectors from starting point */
gdouble angle = 16. * calcangle ((GimpVector2){1., 0.}, d) / (2.*G_PI);
@@ -653,7 +648,7 @@ gimp_unified_transform_tool_motion (GimpTransformTool *transform_tool)
if (function == TRANSFORM_HANDLE_ROTATION)
{
gdouble angle = calcangle (vectorsubtract (cur, pivot), vectorsubtract (mouse, pivot));
- if (constrain)
+ if (options->constrain_rotate)
{
/* round to 15 degree multiple */
angle /= 2*G_PI/24.;
@@ -671,7 +666,7 @@ gimp_unified_transform_tool_motion (GimpTransformTool *transform_tool)
{
gint screenx, screeny;
- if (cornersnap)
+ if (options->cornersnap)
{
/* snap to corner points and center */
gint closest = 0;
@@ -726,7 +721,7 @@ gimp_unified_transform_tool_motion (GimpTransformTool *transform_tool)
/* when the keep aspect transformation constraint is enabled, the
* translation shall only be along the diagonal that runs trough
* this corner point. */
- if (keepaspect)
+ if (options->constrain_scale)
{
/* restrict to movement along the diagonal */
GimpVector2 diag = vectorsubtract (oldpos[this], oldpos[opposite]);
@@ -779,7 +774,7 @@ gimp_unified_transform_tool_motion (GimpTransformTool *transform_tool)
*
*/
- if (frompivot && transform_is_convex (newpos))
+ if (options->frompivot_scale && transform_is_convex (newpos))
{
/* transform the pivot point before the interaction and after, and move everything by
* this difference */
@@ -821,12 +816,12 @@ gimp_unified_transform_tool_motion (GimpTransformTool *transform_tool)
/* restrict to movement along the midline */
d = vectorproject (d, midline);
- if (keepaspect)
+ if (options->constrain_scale)
{
GimpVector2 before, after, effective_pivot = pivot;
gdouble distance;
- if (!frompivot)
+ if (!options->frompivot_scale)
{
/* center of the opposite side is pivot */
effective_pivot = scalemult (vectoradd (oldpos[opp_l], oldpos[opp_r]), 0.5);
@@ -851,7 +846,7 @@ gimp_unified_transform_tool_motion (GimpTransformTool *transform_tool)
newpos[this_r] = vectoradd (oldpos[this_r], d);
}
- if (!keepaspect && frompivot && transform_is_convex (newpos))
+ if (!options->constrain_scale && options->frompivot_scale && transform_is_convex (newpos))
{
GimpVector2 delta = getpivotdelta (transform_tool, oldpos, newpos, pivot);
for (i = 0; i < 4; i++)
@@ -884,12 +879,12 @@ gimp_unified_transform_tool_motion (GimpTransformTool *transform_tool)
opp_l = 3 - this_l;
opp_r = 3 - this_r;
- if (frompivot)
+ if (options->frompivot_shear)
po = vectorsubtract (zero, d);
else
po = zero;
- if (!freeshear)
+ if (options->constrain_shear)
{
/* restrict to movement along the side */
GimpVector2 side = vectorsubtract (oldpos[this_r], oldpos[this_l]);
@@ -897,7 +892,7 @@ gimp_unified_transform_tool_motion (GimpTransformTool *transform_tool)
d = vectorproject (d, side);
}
- if (!freeshear && frompivot)
+ if (options->constrain_shear && options->frompivot_shear)
{
/* restrict to movement along the opposite side */
GimpVector2 side = vectorsubtract (oldpos[opp_r], oldpos[opp_l]);
@@ -932,7 +927,7 @@ gimp_unified_transform_tool_motion (GimpTransformTool *transform_tool)
this = 3; left = 2; right = 1; opposite = 0;
} else g_assert_not_reached ();
- if (constrain)
+ if (options->constrain_perspective)
{ /* when the constrain transformation constraint is enabled, the
translation shall only be either along the side angles of the
two sides that run to this corner point, or along the
@@ -962,7 +957,7 @@ gimp_unified_transform_tool_motion (GimpTransformTool *transform_tool)
newpos[this] = vectoradd (oldpos[this], d);
- if (frompivot && transform_is_convex (newpos))
+ if (options->frompivot_perspective && transform_is_convex (newpos))
{
GimpVector2 delta = getpivotdelta (transform_tool, oldpos, newpos, pivot);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]