[gimp/gimp-2-10] app: in Unified Transform tool, avoid moving pivot when locked
- From: Ell <ell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/gimp-2-10] app: in Unified Transform tool, avoid moving pivot when locked
- Date: Mon, 27 Apr 2020 13:56:43 +0000 (UTC)
commit 916d8bb66d5d5e9d94b0739eaef87fcb3ca160b3
Author: Ell <ell_se yahoo com>
Date: Mon Apr 27 16:49:13 2020 +0300
app: in Unified Transform tool, avoid moving pivot when locked
In GimpUnifiedTransfomTool, avoid moving the pivot when
readjusting, and when the transform directions are linked, if the
pivot is locked.
(cherry picked from commit d7c995153dc7a06ec2f86d3eac1130ae1c2948d6)
app/tools/gimpunifiedtransformtool.c | 75 +++++++++++++++++++++++++++---------
1 file changed, 56 insertions(+), 19 deletions(-)
---
diff --git a/app/tools/gimpunifiedtransformtool.c b/app/tools/gimpunifiedtransformtool.c
index 9957f4ccb3..85682bbc38 100644
--- a/app/tools/gimpunifiedtransformtool.c
+++ b/app/tools/gimpunifiedtransformtool.c
@@ -60,6 +60,8 @@ enum
static void gimp_unified_transform_tool_matrix_to_info (GimpTransformGridTool *tg_tool,
const GimpMatrix3 *transform);
+static void gimp_unified_transform_tool_apply_info (GimpTransformGridTool *tg_tool,
+ const TransInfo info);
static void gimp_unified_transform_tool_prepare (GimpTransformGridTool *tg_tool);
static void gimp_unified_transform_tool_readjust (GimpTransformGridTool *tg_tool);
static GimpToolWidget * gimp_unified_transform_tool_get_widget (GimpTransformGridTool *tg_tool);
@@ -101,6 +103,7 @@ gimp_unified_transform_tool_class_init (GimpUnifiedTransformToolClass *klass)
GimpGenericTransformToolClass *generic_class = GIMP_GENERIC_TRANSFORM_TOOL_CLASS (klass);
tg_class->matrix_to_info = gimp_unified_transform_tool_matrix_to_info;
+ tg_class->apply_info = gimp_unified_transform_tool_apply_info;
tg_class->prepare = gimp_unified_transform_tool_prepare;
tg_class->readjust = gimp_unified_transform_tool_readjust;
tg_class->get_widget = gimp_unified_transform_tool_get_widget;
@@ -122,18 +125,23 @@ static void
gimp_unified_transform_tool_matrix_to_info (GimpTransformGridTool *tg_tool,
const GimpMatrix3 *transform)
{
- GimpTransformTool *tr_tool = GIMP_TRANSFORM_TOOL (tg_tool);
- GimpMatrix3 transfer;
+ GimpTransformTool *tr_tool = GIMP_TRANSFORM_TOOL (tg_tool);
+ GimpTransformGridOptions *tg_options = GIMP_TRANSFORM_GRID_TOOL_GET_OPTIONS (tg_tool);
+
+ if (! tg_options->fixedpivot)
+ {
+ GimpMatrix3 transfer;
- gimp_transform_grid_tool_info_to_matrix (tg_tool, &transfer);
- gimp_matrix3_invert (&transfer);
- gimp_matrix3_mult (transform, &transfer);
+ gimp_transform_grid_tool_info_to_matrix (tg_tool, &transfer);
+ gimp_matrix3_invert (&transfer);
+ gimp_matrix3_mult (transform, &transfer);
- gimp_matrix3_transform_point (&transfer,
- tg_tool->trans_info[PIVOT_X],
- tg_tool->trans_info[PIVOT_Y],
- &tg_tool->trans_info[PIVOT_X],
- &tg_tool->trans_info[PIVOT_Y]);
+ gimp_matrix3_transform_point (&transfer,
+ tg_tool->trans_info[PIVOT_X],
+ tg_tool->trans_info[PIVOT_Y],
+ &tg_tool->trans_info[PIVOT_X],
+ &tg_tool->trans_info[PIVOT_Y]);
+ }
gimp_matrix3_transform_point (transform,
tr_tool->x1,
@@ -157,6 +165,31 @@ gimp_unified_transform_tool_matrix_to_info (GimpTransformGridTool *tg_tool,
&tg_tool->trans_info[Y3]);
}
+static void
+gimp_unified_transform_tool_apply_info (GimpTransformGridTool *tg_tool,
+ const TransInfo info)
+{
+ GimpTransformGridOptions *tg_options = GIMP_TRANSFORM_GRID_TOOL_GET_OPTIONS (tg_tool);
+
+ tg_tool->trans_info[X0] = info[X0];
+ tg_tool->trans_info[Y0] = info[Y0];
+
+ tg_tool->trans_info[X1] = info[X1];
+ tg_tool->trans_info[Y1] = info[Y1];
+
+ tg_tool->trans_info[X2] = info[X2];
+ tg_tool->trans_info[Y2] = info[Y2];
+
+ tg_tool->trans_info[X3] = info[X3];
+ tg_tool->trans_info[Y3] = info[Y3];
+
+ if (! tg_options->fixedpivot)
+ {
+ tg_tool->trans_info[PIVOT_X] = info[PIVOT_X];
+ tg_tool->trans_info[PIVOT_Y] = info[PIVOT_Y];
+ }
+}
+
static void
gimp_unified_transform_tool_prepare (GimpTransformGridTool *tg_tool)
{
@@ -180,11 +213,12 @@ gimp_unified_transform_tool_prepare (GimpTransformGridTool *tg_tool)
static void
gimp_unified_transform_tool_readjust (GimpTransformGridTool *tg_tool)
{
- GimpTool *tool = GIMP_TOOL (tg_tool);
- GimpDisplayShell *shell = gimp_display_get_shell (tool->display);
- gdouble x;
- gdouble y;
- gdouble r;
+ GimpTool *tool = GIMP_TOOL (tg_tool);
+ GimpTransformGridOptions *tg_options = GIMP_TRANSFORM_GRID_TOOL_GET_OPTIONS (tg_tool);
+ GimpDisplayShell *shell = gimp_display_get_shell (tool->display);
+ gdouble x;
+ gdouble y;
+ gdouble r;
x = shell->disp_width / 2.0;
y = shell->disp_height / 2.0;
@@ -192,10 +226,13 @@ gimp_unified_transform_tool_readjust (GimpTransformGridTool *tg_tool)
GIMP_TOOL_TRANSFORM_GRID_MAX_HANDLE_SIZE / 2.0,
GIMP_TOOL_TRANSFORM_GRID_MAX_HANDLE_SIZE / 2.0);
- gimp_display_shell_untransform_xy_f (shell,
- x, y,
- &tg_tool->trans_info[PIVOT_X],
- &tg_tool->trans_info[PIVOT_Y]);
+ if (! tg_options->fixedpivot)
+ {
+ gimp_display_shell_untransform_xy_f (shell,
+ x, y,
+ &tg_tool->trans_info[PIVOT_X],
+ &tg_tool->trans_info[PIVOT_Y]);
+ }
gimp_display_shell_untransform_xy_f (shell,
x - r, y - r,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]