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 d7c995153d)
This commit is contained in:
Ell
2020-04-27 16:49:13 +03:00
parent 7746da33de
commit 916d8bb66d

View File

@ -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;
@ -123,6 +126,10 @@ gimp_unified_transform_tool_matrix_to_info (GimpTransformGridTool *tg_tool,
const GimpMatrix3 *transform)
{
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);
@ -134,6 +141,7 @@ gimp_unified_transform_tool_matrix_to_info (GimpTransformGridTool *tg_tool,
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)
{
@ -181,6 +214,7 @@ static void
gimp_unified_transform_tool_readjust (GimpTransformGridTool *tg_tool)
{
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;
@ -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);
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,