mirror of https://github.com/GNOME/gimp.git
app: add gimp_transform_tool_set_type()
... which temporarily changes the transform-type of the tool, restoring the original type once it's halted. To be used when activating a transform tool through an action for a specific transform type.
This commit is contained in:
parent
e4990bee7b
commit
f651db52fb
|
@ -64,6 +64,10 @@
|
||||||
|
|
||||||
/* local function prototypes */
|
/* local function prototypes */
|
||||||
|
|
||||||
|
static void gimp_transform_tool_control (GimpTool *tool,
|
||||||
|
GimpToolAction action,
|
||||||
|
GimpDisplay *display);
|
||||||
|
|
||||||
static gchar * gimp_transform_tool_real_get_undo_desc (GimpTransformTool *tr_tool);
|
static gchar * gimp_transform_tool_real_get_undo_desc (GimpTransformTool *tr_tool);
|
||||||
static GimpTransformDirection gimp_transform_tool_real_get_direction (GimpTransformTool *tr_tool);
|
static GimpTransformDirection gimp_transform_tool_real_get_direction (GimpTransformTool *tr_tool);
|
||||||
static GeglBuffer * gimp_transform_tool_real_transform (GimpTransformTool *tr_tool,
|
static GeglBuffer * gimp_transform_tool_real_transform (GimpTransformTool *tr_tool,
|
||||||
|
@ -75,6 +79,8 @@ static GeglBuffer * gimp_transform_tool_real_transform (GimpTran
|
||||||
gint *new_offset_x,
|
gint *new_offset_x,
|
||||||
gint *new_offset_y);
|
gint *new_offset_y);
|
||||||
|
|
||||||
|
static void gimp_transform_tool_halt (GimpTransformTool *tr_tool);
|
||||||
|
|
||||||
static gboolean gimp_transform_tool_confirm (GimpTransformTool *tr_tool,
|
static gboolean gimp_transform_tool_confirm (GimpTransformTool *tr_tool,
|
||||||
GimpDisplay *display);
|
GimpDisplay *display);
|
||||||
|
|
||||||
|
@ -90,6 +96,10 @@ G_DEFINE_TYPE (GimpTransformTool, gimp_transform_tool, GIMP_TYPE_DRAW_TOOL)
|
||||||
static void
|
static void
|
||||||
gimp_transform_tool_class_init (GimpTransformToolClass *klass)
|
gimp_transform_tool_class_init (GimpTransformToolClass *klass)
|
||||||
{
|
{
|
||||||
|
GimpToolClass *tool_class = GIMP_TOOL_CLASS (klass);
|
||||||
|
|
||||||
|
tool_class->control = gimp_transform_tool_control;
|
||||||
|
|
||||||
klass->recalc_matrix = NULL;
|
klass->recalc_matrix = NULL;
|
||||||
klass->get_undo_desc = gimp_transform_tool_real_get_undo_desc;
|
klass->get_undo_desc = gimp_transform_tool_real_get_undo_desc;
|
||||||
klass->get_direction = gimp_transform_tool_real_get_direction;
|
klass->get_direction = gimp_transform_tool_real_get_direction;
|
||||||
|
@ -104,6 +114,34 @@ gimp_transform_tool_init (GimpTransformTool *tr_tool)
|
||||||
{
|
{
|
||||||
gimp_matrix3_identity (&tr_tool->transform);
|
gimp_matrix3_identity (&tr_tool->transform);
|
||||||
tr_tool->transform_valid = TRUE;
|
tr_tool->transform_valid = TRUE;
|
||||||
|
|
||||||
|
tr_tool->restore_type = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gimp_transform_tool_control (GimpTool *tool,
|
||||||
|
GimpToolAction action,
|
||||||
|
GimpDisplay *display)
|
||||||
|
{
|
||||||
|
GimpTransformTool *tr_tool = GIMP_TRANSFORM_TOOL (tool);
|
||||||
|
|
||||||
|
switch (action)
|
||||||
|
{
|
||||||
|
case GIMP_TOOL_ACTION_PAUSE:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GIMP_TOOL_ACTION_RESUME:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GIMP_TOOL_ACTION_HALT:
|
||||||
|
gimp_transform_tool_halt (tr_tool);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GIMP_TOOL_ACTION_COMMIT:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
GIMP_TOOL_CLASS (parent_class)->control (tool, action, display);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gchar *
|
static gchar *
|
||||||
|
@ -216,6 +254,21 @@ gimp_transform_tool_real_transform (GimpTransformTool *tr_tool,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gimp_transform_tool_halt (GimpTransformTool *tr_tool)
|
||||||
|
{
|
||||||
|
GimpTransformOptions *options = GIMP_TRANSFORM_TOOL_GET_OPTIONS (tr_tool);
|
||||||
|
|
||||||
|
if (tr_tool->restore_type)
|
||||||
|
{
|
||||||
|
g_object_set (options,
|
||||||
|
"type", tr_tool->saved_type,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
tr_tool->restore_type = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gimp_transform_tool_confirm (GimpTransformTool *tr_tool,
|
gimp_transform_tool_confirm (GimpTransformTool *tr_tool,
|
||||||
GimpDisplay *display)
|
GimpDisplay *display)
|
||||||
|
@ -830,3 +883,25 @@ gimp_transform_tool_transform (GimpTransformTool *tr_tool,
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gimp_transform_tool_set_type (GimpTransformTool *tr_tool,
|
||||||
|
GimpTransformType type)
|
||||||
|
{
|
||||||
|
GimpTransformOptions *options;
|
||||||
|
|
||||||
|
g_return_if_fail (GIMP_IS_TRANSFORM_TOOL (tr_tool));
|
||||||
|
|
||||||
|
options = GIMP_TRANSFORM_TOOL_GET_OPTIONS (tr_tool);
|
||||||
|
|
||||||
|
if (! tr_tool->restore_type)
|
||||||
|
tr_tool->saved_type = options->type;
|
||||||
|
|
||||||
|
tr_tool->restore_type = FALSE;
|
||||||
|
|
||||||
|
g_object_set (options,
|
||||||
|
"type", type,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
tr_tool->restore_type = TRUE;
|
||||||
|
}
|
||||||
|
|
|
@ -45,15 +45,18 @@ typedef struct _GimpTransformToolClass GimpTransformToolClass;
|
||||||
|
|
||||||
struct _GimpTransformTool
|
struct _GimpTransformTool
|
||||||
{
|
{
|
||||||
GimpDrawTool parent_instance;
|
GimpDrawTool parent_instance;
|
||||||
|
|
||||||
GimpObject *object;
|
GimpObject *object;
|
||||||
|
|
||||||
gint x1, y1; /* upper left hand coordinate */
|
gint x1, y1; /* upper left hand coordinate */
|
||||||
gint x2, y2; /* lower right hand coords */
|
gint x2, y2; /* lower right hand coords */
|
||||||
|
|
||||||
GimpMatrix3 transform; /* transformation matrix */
|
GimpMatrix3 transform; /* transformation matrix */
|
||||||
gboolean transform_valid; /* whether the matrix is valid */
|
gboolean transform_valid; /* whether the matrix is valid */
|
||||||
|
|
||||||
|
gboolean restore_type;
|
||||||
|
GimpTransformType saved_type;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GimpTransformToolClass
|
struct _GimpTransformToolClass
|
||||||
|
@ -94,5 +97,8 @@ void gimp_transform_tool_recalc_matrix (GimpTransformTool *tr_too
|
||||||
gboolean gimp_transform_tool_transform (GimpTransformTool *tr_tool,
|
gboolean gimp_transform_tool_transform (GimpTransformTool *tr_tool,
|
||||||
GimpDisplay *display);
|
GimpDisplay *display);
|
||||||
|
|
||||||
|
void gimp_transform_tool_set_type (GimpTransformTool *tr_tool,
|
||||||
|
GimpTransformType type);
|
||||||
|
|
||||||
|
|
||||||
#endif /* __GIMP_TRANSFORM_TOOL_H__ */
|
#endif /* __GIMP_TRANSFORM_TOOL_H__ */
|
||||||
|
|
Loading…
Reference in New Issue