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.
This commit is contained in:
Michael Natterer 2011-03-26 18:45:58 +01:00
parent 88ee23aa29
commit ae72971866
4 changed files with 71 additions and 79 deletions

View File

@ -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,

View File

@ -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)
switch (options->type)
{
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)
{
case GIMP_TRANSFORM_TYPE_LAYER:
{
GimpDrawable *drawable;
gint offset_x;
gint offset_y;
case GIMP_TRANSFORM_TYPE_LAYER:
{
GimpDrawable *drawable;
gint offset_x;
gint offset_y;
drawable = gimp_image_get_active_drawable (image);
drawable = gimp_image_get_active_drawable (image);
gimp_item_get_offset (GIMP_ITEM (drawable), &offset_x, &offset_y);
gimp_item_get_offset (GIMP_ITEM (drawable), &offset_x, &offset_y);
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;
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;

View File

@ -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);
};

View File

@ -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);
}