Finished the opaque-move stuff... hopefully. Float and selection-mask

Sat Apr 24 21:50:58 BST 1999 Adam D. Moss <adam@gimp.org>

	* app/edit_selection.c: Finished the opaque-move stuff...
	hopefully.  Float and selection-mask movement behaviour
	repaired, etc.
This commit is contained in:
BST 1999 Adam D. Moss 1999-04-24 20:58:55 +00:00 committed by Adam D. Moss
parent 107038e5dc
commit e247b49e5f
4 changed files with 123 additions and 18 deletions

View File

@ -1,3 +1,9 @@
Sat Apr 24 21:50:58 BST 1999 Adam D. Moss <adam@gimp.org>
* app/edit_selection.c: Finished the opaque-move stuff...
hopefully. Float and selection-mask movement behaviour
repaired, etc.
Sat Apr 24 13:28:13 PDT 1999 Manish Singh <yosh@gimp.org> Sat Apr 24 13:28:13 PDT 1999 Manish Singh <yosh@gimp.org>
* app/layer_cmds.[ch]: pdbgened, header file removed * app/layer_cmds.[ch]: pdbgened, header file removed

View File

@ -285,6 +285,25 @@ edit_selection_button_release (Tool *tool,
#else #else
if (edit_select.cumlx == 0 && edit_select.cumly == 0)
{
/* The user either didn't actually move the selection,
or moved it around and eventually just put it back in
exactly the same spot. */
if ((edit_select.edit_type == MaskTranslate) ||
(edit_select.edit_type == MaskToLayerTranslate))
gimage_mask_clear (gdisp->gimage);
/* if no movement occured and the type is LayerTranslate,
check if the layer is a floating selection. If so, anchor. */
else if (edit_select.edit_type == FloatingSelTranslate)
{
layer = gimage_get_active_layer (gdisp->gimage);
if (layer_is_floating_sel (layer))
floating_sel_anchor (layer);
}
}
undo_push_group_end (gdisp->gimage); undo_push_group_end (gdisp->gimage);
if (bevent->state & GDK_BUTTON2_MASK) /* OPERATION CANCELLED */ if (bevent->state & GDK_BUTTON2_MASK) /* OPERATION CANCELLED */
@ -351,11 +370,15 @@ edit_selection_motion (Tool *tool,
case MaskTranslate: case MaskTranslate:
/* translate the selection */ /* translate the selection */
gimage_mask_translate (gdisp->gimage, xoffset, yoffset); gimage_mask_translate (gdisp->gimage, xoffset, yoffset);
break; /*g_warning("%d,%d %d,%d %d,%d %d,%d %d,%d %d,%d",
edit_select.origx,edit_select.origy,
case MaskToLayerTranslate: edit_select.cumlx,edit_select.cumly,
gimage_mask_float (gdisp->gimage, gimage_active_drawable (gdisp->gimage), xoffset,yoffset,
xoffset, yoffset); x,y,
edit_select.x1,edit_select.y1,
edit_select.x2,edit_select.y2);*/
edit_select.origx = x;
edit_select.origy = y;
break; break;
case LayerTranslate: case LayerTranslate:
@ -379,6 +402,15 @@ edit_selection_motion (Tool *tool,
floating_sel_rigor (floating_layer, TRUE); floating_sel_rigor (floating_layer, TRUE);
break; break;
case MaskToLayerTranslate:
gimage_mask_float (gdisp->gimage, gimage_active_drawable (gdisp->gimage),
0, 0);
edit_select.edit_type = FloatingSelTranslate;
edit_select.origx -= edit_select.x1;
edit_select.origy -= edit_select.y1;
break;
case FloatingSelTranslate: case FloatingSelTranslate:
layer = gimage_get_active_layer (gdisp->gimage); layer = gimage_get_active_layer (gdisp->gimage);
@ -447,7 +479,8 @@ edit_selection_draw (Tool *tool)
gdisp = (GDisplay *) tool->gdisp_ptr; gdisp = (GDisplay *) tool->gdisp_ptr;
select = gdisp->select; select = gdisp->select;
if (edit_select.edit_type == FloatingSelTranslate) if (edit_select.edit_type == FloatingSelTranslate ||
edit_select.edit_type == MaskTranslate)
{ {
diff_x = SCALEX (gdisp, edit_select.cumlx); diff_x = SCALEX (gdisp, edit_select.cumlx);
diff_y = SCALEY (gdisp, edit_select.cumly); diff_y = SCALEY (gdisp, edit_select.cumly);

View File

@ -285,6 +285,25 @@ edit_selection_button_release (Tool *tool,
#else #else
if (edit_select.cumlx == 0 && edit_select.cumly == 0)
{
/* The user either didn't actually move the selection,
or moved it around and eventually just put it back in
exactly the same spot. */
if ((edit_select.edit_type == MaskTranslate) ||
(edit_select.edit_type == MaskToLayerTranslate))
gimage_mask_clear (gdisp->gimage);
/* if no movement occured and the type is LayerTranslate,
check if the layer is a floating selection. If so, anchor. */
else if (edit_select.edit_type == FloatingSelTranslate)
{
layer = gimage_get_active_layer (gdisp->gimage);
if (layer_is_floating_sel (layer))
floating_sel_anchor (layer);
}
}
undo_push_group_end (gdisp->gimage); undo_push_group_end (gdisp->gimage);
if (bevent->state & GDK_BUTTON2_MASK) /* OPERATION CANCELLED */ if (bevent->state & GDK_BUTTON2_MASK) /* OPERATION CANCELLED */
@ -351,11 +370,15 @@ edit_selection_motion (Tool *tool,
case MaskTranslate: case MaskTranslate:
/* translate the selection */ /* translate the selection */
gimage_mask_translate (gdisp->gimage, xoffset, yoffset); gimage_mask_translate (gdisp->gimage, xoffset, yoffset);
break; /*g_warning("%d,%d %d,%d %d,%d %d,%d %d,%d %d,%d",
edit_select.origx,edit_select.origy,
case MaskToLayerTranslate: edit_select.cumlx,edit_select.cumly,
gimage_mask_float (gdisp->gimage, gimage_active_drawable (gdisp->gimage), xoffset,yoffset,
xoffset, yoffset); x,y,
edit_select.x1,edit_select.y1,
edit_select.x2,edit_select.y2);*/
edit_select.origx = x;
edit_select.origy = y;
break; break;
case LayerTranslate: case LayerTranslate:
@ -379,6 +402,15 @@ edit_selection_motion (Tool *tool,
floating_sel_rigor (floating_layer, TRUE); floating_sel_rigor (floating_layer, TRUE);
break; break;
case MaskToLayerTranslate:
gimage_mask_float (gdisp->gimage, gimage_active_drawable (gdisp->gimage),
0, 0);
edit_select.edit_type = FloatingSelTranslate;
edit_select.origx -= edit_select.x1;
edit_select.origy -= edit_select.y1;
break;
case FloatingSelTranslate: case FloatingSelTranslate:
layer = gimage_get_active_layer (gdisp->gimage); layer = gimage_get_active_layer (gdisp->gimage);
@ -447,7 +479,8 @@ edit_selection_draw (Tool *tool)
gdisp = (GDisplay *) tool->gdisp_ptr; gdisp = (GDisplay *) tool->gdisp_ptr;
select = gdisp->select; select = gdisp->select;
if (edit_select.edit_type == FloatingSelTranslate) if (edit_select.edit_type == FloatingSelTranslate ||
edit_select.edit_type == MaskTranslate)
{ {
diff_x = SCALEX (gdisp, edit_select.cumlx); diff_x = SCALEX (gdisp, edit_select.cumlx);
diff_y = SCALEY (gdisp, edit_select.cumly); diff_y = SCALEY (gdisp, edit_select.cumly);

View File

@ -285,6 +285,25 @@ edit_selection_button_release (Tool *tool,
#else #else
if (edit_select.cumlx == 0 && edit_select.cumly == 0)
{
/* The user either didn't actually move the selection,
or moved it around and eventually just put it back in
exactly the same spot. */
if ((edit_select.edit_type == MaskTranslate) ||
(edit_select.edit_type == MaskToLayerTranslate))
gimage_mask_clear (gdisp->gimage);
/* if no movement occured and the type is LayerTranslate,
check if the layer is a floating selection. If so, anchor. */
else if (edit_select.edit_type == FloatingSelTranslate)
{
layer = gimage_get_active_layer (gdisp->gimage);
if (layer_is_floating_sel (layer))
floating_sel_anchor (layer);
}
}
undo_push_group_end (gdisp->gimage); undo_push_group_end (gdisp->gimage);
if (bevent->state & GDK_BUTTON2_MASK) /* OPERATION CANCELLED */ if (bevent->state & GDK_BUTTON2_MASK) /* OPERATION CANCELLED */
@ -351,11 +370,15 @@ edit_selection_motion (Tool *tool,
case MaskTranslate: case MaskTranslate:
/* translate the selection */ /* translate the selection */
gimage_mask_translate (gdisp->gimage, xoffset, yoffset); gimage_mask_translate (gdisp->gimage, xoffset, yoffset);
break; /*g_warning("%d,%d %d,%d %d,%d %d,%d %d,%d %d,%d",
edit_select.origx,edit_select.origy,
case MaskToLayerTranslate: edit_select.cumlx,edit_select.cumly,
gimage_mask_float (gdisp->gimage, gimage_active_drawable (gdisp->gimage), xoffset,yoffset,
xoffset, yoffset); x,y,
edit_select.x1,edit_select.y1,
edit_select.x2,edit_select.y2);*/
edit_select.origx = x;
edit_select.origy = y;
break; break;
case LayerTranslate: case LayerTranslate:
@ -379,6 +402,15 @@ edit_selection_motion (Tool *tool,
floating_sel_rigor (floating_layer, TRUE); floating_sel_rigor (floating_layer, TRUE);
break; break;
case MaskToLayerTranslate:
gimage_mask_float (gdisp->gimage, gimage_active_drawable (gdisp->gimage),
0, 0);
edit_select.edit_type = FloatingSelTranslate;
edit_select.origx -= edit_select.x1;
edit_select.origy -= edit_select.y1;
break;
case FloatingSelTranslate: case FloatingSelTranslate:
layer = gimage_get_active_layer (gdisp->gimage); layer = gimage_get_active_layer (gdisp->gimage);
@ -447,7 +479,8 @@ edit_selection_draw (Tool *tool)
gdisp = (GDisplay *) tool->gdisp_ptr; gdisp = (GDisplay *) tool->gdisp_ptr;
select = gdisp->select; select = gdisp->select;
if (edit_select.edit_type == FloatingSelTranslate) if (edit_select.edit_type == FloatingSelTranslate ||
edit_select.edit_type == MaskTranslate)
{ {
diff_x = SCALEX (gdisp, edit_select.cumlx); diff_x = SCALEX (gdisp, edit_select.cumlx);
diff_y = SCALEY (gdisp, edit_select.cumly); diff_y = SCALEY (gdisp, edit_select.cumly);