Commit ae729718 authored by Michael Natterer's avatar Michael Natterer 😴

app: pass the orig_tiles and their offset to GimpTransformTool::transform()

instead of keeping them around as members. This is another artifact
from ancient times. Also get rid of some more legacy junk
code. Disable more code in GimpTransformToolUndo but keep it around
even though it does nothing at the moment.
parent 88ee23aa
......@@ -59,6 +59,9 @@ static void gimp_flip_tool_cursor_update (GimpTool *tool,
static TileManager * gimp_flip_tool_transform (GimpTransformTool *tool,
GimpItem *item,
GimpDisplay *display,
TileManager *orig_tiles,
gint orig_offset_x,
gint orig_offset_y,
gint *new_offset_x,
gint *new_offset_y);
......@@ -178,6 +181,9 @@ static TileManager *
gimp_flip_tool_transform (GimpTransformTool *trans_tool,
GimpItem *active_item,
GimpDisplay *display,
TileManager *orig_tiles,
gint orig_offset_x,
gint orig_offset_y,
gint *new_offset_x,
gint *new_offset_y)
{
......@@ -206,7 +212,7 @@ gimp_flip_tool_transform (GimpTransformTool *trans_tool,
gimp_item_linked_flip (active_item, context, options->flip_type, axis,
FALSE);
if (trans_tool->original)
if (orig_tiles)
{
/* this happens when transforming a normal drawable or the
* selection
......@@ -214,9 +220,9 @@ gimp_flip_tool_transform (GimpTransformTool *trans_tool,
ret = gimp_drawable_transform_tiles_flip (GIMP_DRAWABLE (active_item),
context,
trans_tool->original,
trans_tool->original_offset_x,
trans_tool->original_offset_y,
orig_tiles,
orig_offset_x,
orig_offset_y,
options->flip_type, axis,
FALSE,
new_offset_x,
......
......@@ -125,6 +125,9 @@ static TileManager *
gimp_transform_tool_real_transform (GimpTransformTool *tr_tool,
GimpItem *item,
GimpDisplay *display,
TileManager *orig_tiles,
gint orig_offset_x,
gint orig_offset_y,
gint *new_offset_x,
gint *new_offset_y);
......@@ -204,7 +207,6 @@ gimp_transform_tool_init (GimpTransformTool *tr_tool)
GIMP_CURSOR_PRECISION_SUBPIXEL);
tr_tool->function = TRANSFORM_CREATING;
tr_tool->original = NULL;
for (i = 0; i < TRANS_INFO_SIZE; i++)
{
......@@ -259,12 +261,6 @@ gimp_transform_tool_finalize (GObject *object)
{
GimpTransformTool *tr_tool = GIMP_TRANSFORM_TOOL (object);
if (tr_tool->original)
{
tile_manager_unref (tr_tool->original);
tr_tool->original = NULL;
}
if (tr_tool->dialog)
{
gtk_widget_destroy (tr_tool->dialog);
......@@ -1143,6 +1139,9 @@ static TileManager *
gimp_transform_tool_real_transform (GimpTransformTool *tr_tool,
GimpItem *active_item,
GimpDisplay *display,
TileManager *orig_tiles,
gint orig_offset_x,
gint orig_offset_y,
gint *new_offset_x,
gint *new_offset_y)
{
......@@ -1164,7 +1163,7 @@ gimp_transform_tool_real_transform (GimpTransformTool *tr_tool,
options->clip,
progress);
if (tr_tool->original)
if (orig_tiles)
{
/* this happens when transforming a normal drawable or the
* selection
......@@ -1176,14 +1175,14 @@ gimp_transform_tool_real_transform (GimpTransformTool *tr_tool,
* so they keep their size
*/
if (GIMP_IS_CHANNEL (active_item) &&
tile_manager_bpp (tr_tool->original) == 1)
tile_manager_bpp (orig_tiles) == 1)
clip_result = GIMP_TRANSFORM_RESIZE_CLIP;
ret = gimp_drawable_transform_tiles_affine (GIMP_DRAWABLE (active_item),
context,
tr_tool->original,
tr_tool->original_offset_x,
tr_tool->original_offset_y,
orig_tiles,
orig_offset_x,
orig_offset_y,
&tr_tool->transform,
options->direction,
options->interpolation,
......@@ -1221,6 +1220,9 @@ gimp_transform_tool_transform (GimpTransformTool *tr_tool,
GimpContext *context = GIMP_CONTEXT (options);
GimpImage *image = gimp_display_get_image (display);
GimpItem *active_item = NULL;
TileManager *orig_tiles;
gint orig_offset_x;
gint orig_offset_y;
TileManager *new_tiles;
gint new_offset_x;
gint new_offset_y;
......@@ -1275,19 +1277,9 @@ gimp_transform_tool_transform (GimpTransformTool *tr_tool,
/* We're going to dirty this image, but we want to keep the tool around */
gimp_tool_control_set_preserve (tool->control, TRUE);
/* Start a transform undo group */
gimp_image_undo_group_start (image, GIMP_UNDO_GROUP_TRANSFORM,
tr_tool->undo_desc);
/* With the old UI, if original is NULL, then this is the
* first transformation. In the new UI, it is always so, right?
*/
g_assert (tr_tool->original == NULL);
/* Copy the current selection to the transform tool's private
* selection pointer, so that the original source can be repeatedly
* modified.
*/
tool->drawable = gimp_image_get_active_drawable (image);
switch (options->type)
......@@ -1296,16 +1288,18 @@ gimp_transform_tool_transform (GimpTransformTool *tr_tool,
if (! gimp_viewable_get_children (GIMP_VIEWABLE (tool->drawable)) &&
! gimp_channel_is_empty (gimp_image_get_mask (image)))
{
tr_tool->original = gimp_drawable_transform_cut (tool->drawable,
context,
&tr_tool->original_offset_x,
&tr_tool->original_offset_y,
&new_layer);
orig_tiles = gimp_drawable_transform_cut (tool->drawable,
context,
&orig_offset_x,
&orig_offset_y,
&new_layer);
}
break;
case GIMP_TRANSFORM_TYPE_SELECTION:
tr_tool->original = tile_manager_ref (gimp_drawable_get_tiles (GIMP_DRAWABLE (active_item)));
orig_tiles = tile_manager_ref (gimp_drawable_get_tiles (GIMP_DRAWABLE (active_item)));
orig_offset_x = 0;
orig_offset_y = 0;
break;
case GIMP_TRANSFORM_TYPE_PATH:
......@@ -1317,9 +1311,14 @@ gimp_transform_tool_transform (GimpTransformTool *tr_tool,
new_tiles = GIMP_TRANSFORM_TOOL_GET_CLASS (tr_tool)->transform (tr_tool,
active_item,
display,
orig_tiles,
orig_offset_x,
orig_offset_y,
&new_offset_x,
&new_offset_y);
tile_manager_unref (orig_tiles);
switch (options->type)
{
case GIMP_TRANSFORM_TYPE_LAYER:
......@@ -1346,9 +1345,6 @@ gimp_transform_tool_transform (GimpTransformTool *tr_tool,
gimp_drawable_type (GIMP_DRAWABLE (active_item)));
tile_manager_unref (new_tiles);
}
tile_manager_unref (tr_tool->original);
tr_tool->original = NULL;
break;
case GIMP_TRANSFORM_TYPE_PATH:
......@@ -1362,7 +1358,6 @@ gimp_transform_tool_transform (GimpTransformTool *tr_tool,
"transform-tool", tr_tool,
NULL);
/* push the undo group end */
gimp_image_undo_group_end (image);
/* We're done dirtying the image, and would like to be restarted
......@@ -1524,12 +1519,6 @@ gimp_transform_tool_halt (GimpTransformTool *tr_tool)
gimp_draw_tool_stop (GIMP_DRAW_TOOL (tr_tool));
}
if (tr_tool->original)
{
tile_manager_unref (tr_tool->original);
tr_tool->original = NULL;
}
/* inactivate the tool */
tr_tool->function = TRANSFORM_CREATING;
......@@ -1548,44 +1537,34 @@ gimp_transform_tool_bounds (GimpTransformTool *tr_tool,
GimpImage *image = gimp_display_get_image (display);
/* find the boundaries */
if (tr_tool->original)
{
tr_tool->x1 = tr_tool->original_offset_x;
tr_tool->y1 = tr_tool->original_offset_y;
tr_tool->x2 = tr_tool->x1 + tile_manager_width (tr_tool->original);
tr_tool->y2 = tr_tool->y1 + tile_manager_height (tr_tool->original);
}
else
switch (options->type)
{
switch (options->type)
{
case GIMP_TRANSFORM_TYPE_LAYER:
{
GimpDrawable *drawable;
gint offset_x;
gint offset_y;
drawable = gimp_image_get_active_drawable (image);
case GIMP_TRANSFORM_TYPE_LAYER:
{
GimpDrawable *drawable;
gint offset_x;
gint offset_y;
gimp_item_get_offset (GIMP_ITEM (drawable), &offset_x, &offset_y);
drawable = gimp_image_get_active_drawable (image);
gimp_item_mask_bounds (GIMP_ITEM (drawable),
&tr_tool->x1, &tr_tool->y1,
&tr_tool->x2, &tr_tool->y2);
tr_tool->x1 += offset_x;
tr_tool->y1 += offset_y;
tr_tool->x2 += offset_x;
tr_tool->y2 += offset_y;
}
break;
gimp_item_get_offset (GIMP_ITEM (drawable), &offset_x, &offset_y);
case GIMP_TRANSFORM_TYPE_SELECTION:
case GIMP_TRANSFORM_TYPE_PATH:
gimp_channel_bounds (gimp_image_get_mask (image),
gimp_item_mask_bounds (GIMP_ITEM (drawable),
&tr_tool->x1, &tr_tool->y1,
&tr_tool->x2, &tr_tool->y2);
break;
}
tr_tool->x1 += offset_x;
tr_tool->y1 += offset_y;
tr_tool->x2 += offset_x;
tr_tool->y2 += offset_y;
}
break;
case GIMP_TRANSFORM_TYPE_SELECTION:
case GIMP_TRANSFORM_TYPE_PATH:
gimp_channel_bounds (gimp_image_get_mask (image),
&tr_tool->x1, &tr_tool->y1,
&tr_tool->x2, &tr_tool->y2);
break;
}
tr_tool->cx = (gdouble) (tr_tool->x1 + tr_tool->x2) / 2.0;
......
......@@ -72,10 +72,6 @@ struct _GimpTransformTool
TransInfo old_trans_info; /* for resetting everything */
TransInfo prev_trans_info; /* for cancelling a drag operation */
TileManager *original; /* pointer to original tiles */
gint original_offset_x;
gint original_offset_y;
TransformAction function; /* current tool activity */
gboolean use_grid; /* does the tool use the grid */
......@@ -120,6 +116,9 @@ struct _GimpTransformToolClass
TileManager * (* transform) (GimpTransformTool *tool,
GimpItem *item,
GimpDisplay *display,
TileManager *orig_tiles,
gint orig_offset_x,
gint orig_offset_y,
gint *new_offset_x,
gint *new_offset_y);
};
......
......@@ -95,7 +95,7 @@ gimp_transform_tool_undo_constructed (GObject *object)
g_assert (GIMP_IS_TRANSFORM_TOOL (transform_tool_undo->transform_tool));
transform_tool = GIMP_TRANSFORM_TOOL (transform_tool_undo->transform_tool);
transform_tool = transform_tool_undo->transform_tool;
for (i = 0; i < TRANS_INFO_SIZE; i++)
transform_tool_undo->trans_info[i] = transform_tool->old_trans_info[i];
......@@ -161,7 +161,9 @@ gimp_transform_tool_undo_pop (GimpUndo *undo,
if (transform_tool_undo->transform_tool)
{
GimpTransformTool *transform_tool;
#if 0
TileManager *temp;
#endif
gdouble d;
gint i;
......@@ -175,12 +177,15 @@ gimp_transform_tool_undo_pop (GimpUndo *undo,
transform_tool->trans_info[i] = d;
}
#if 0
/* swap the original buffer--the source buffer for repeated transforms
*/
temp = transform_tool_undo->original;
transform_tool_undo->original = transform_tool->original;
transform_tool->original = temp;
#endif
#if 0
/* If we're re-implementing the first transform, reactivate tool */
if (undo_mode == GIMP_UNDO_MODE_REDO && transform_tool->original)
{
......@@ -188,6 +193,7 @@ gimp_transform_tool_undo_pop (GimpUndo *undo,
gimp_draw_tool_resume (GIMP_DRAW_TOOL (transform_tool));
}
#endif
}
}
......@@ -204,11 +210,13 @@ gimp_transform_tool_undo_free (GimpUndo *undo,
transform_tool_undo->transform_tool = NULL;
}
#if 0
if (transform_tool_undo->original)
{
tile_manager_unref (transform_tool_undo->original);
transform_tool_undo->original = NULL;
}
#endif
GIMP_UNDO_CLASS (parent_class)->free (undo, undo_mode);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment