From e247b49e5fbdc60d18292e91ed10b6a067642d5c Mon Sep 17 00:00:00 2001 From: "BST 1999 Adam D. Moss" Date: Sat, 24 Apr 1999 20:58:55 +0000 Subject: [PATCH] Finished the opaque-move stuff... hopefully. Float and selection-mask Sat Apr 24 21:50:58 BST 1999 Adam D. Moss * app/edit_selection.c: Finished the opaque-move stuff... hopefully. Float and selection-mask movement behaviour repaired, etc. --- ChangeLog | 6 +++++ app/edit_selection.c | 45 ++++++++++++++++++++++++++----- app/tools/edit_selection.c | 45 ++++++++++++++++++++++++++----- app/tools/gimpeditselectiontool.c | 45 ++++++++++++++++++++++++++----- 4 files changed, 123 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index 273a79da96..2609bb3bb3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Sat Apr 24 21:50:58 BST 1999 Adam D. Moss + + * 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 * app/layer_cmds.[ch]: pdbgened, header file removed diff --git a/app/edit_selection.c b/app/edit_selection.c index f0dc7c9113..88758fffc5 100644 --- a/app/edit_selection.c +++ b/app/edit_selection.c @@ -285,6 +285,25 @@ edit_selection_button_release (Tool *tool, #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); if (bevent->state & GDK_BUTTON2_MASK) /* OPERATION CANCELLED */ @@ -351,11 +370,15 @@ edit_selection_motion (Tool *tool, case MaskTranslate: /* translate the selection */ gimage_mask_translate (gdisp->gimage, xoffset, yoffset); - break; - - case MaskToLayerTranslate: - gimage_mask_float (gdisp->gimage, gimage_active_drawable (gdisp->gimage), - xoffset, yoffset); + /*g_warning("%d,%d %d,%d %d,%d %d,%d %d,%d %d,%d", + edit_select.origx,edit_select.origy, + edit_select.cumlx,edit_select.cumly, + 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; case LayerTranslate: @@ -378,6 +401,15 @@ edit_selection_motion (Tool *tool, if (floating_layer) floating_sel_rigor (floating_layer, TRUE); 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: layer = gimage_get_active_layer (gdisp->gimage); @@ -447,7 +479,8 @@ edit_selection_draw (Tool *tool) gdisp = (GDisplay *) tool->gdisp_ptr; 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_y = SCALEY (gdisp, edit_select.cumly); diff --git a/app/tools/edit_selection.c b/app/tools/edit_selection.c index f0dc7c9113..88758fffc5 100644 --- a/app/tools/edit_selection.c +++ b/app/tools/edit_selection.c @@ -285,6 +285,25 @@ edit_selection_button_release (Tool *tool, #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); if (bevent->state & GDK_BUTTON2_MASK) /* OPERATION CANCELLED */ @@ -351,11 +370,15 @@ edit_selection_motion (Tool *tool, case MaskTranslate: /* translate the selection */ gimage_mask_translate (gdisp->gimage, xoffset, yoffset); - break; - - case MaskToLayerTranslate: - gimage_mask_float (gdisp->gimage, gimage_active_drawable (gdisp->gimage), - xoffset, yoffset); + /*g_warning("%d,%d %d,%d %d,%d %d,%d %d,%d %d,%d", + edit_select.origx,edit_select.origy, + edit_select.cumlx,edit_select.cumly, + 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; case LayerTranslate: @@ -378,6 +401,15 @@ edit_selection_motion (Tool *tool, if (floating_layer) floating_sel_rigor (floating_layer, TRUE); 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: layer = gimage_get_active_layer (gdisp->gimage); @@ -447,7 +479,8 @@ edit_selection_draw (Tool *tool) gdisp = (GDisplay *) tool->gdisp_ptr; 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_y = SCALEY (gdisp, edit_select.cumly); diff --git a/app/tools/gimpeditselectiontool.c b/app/tools/gimpeditselectiontool.c index f0dc7c9113..88758fffc5 100644 --- a/app/tools/gimpeditselectiontool.c +++ b/app/tools/gimpeditselectiontool.c @@ -285,6 +285,25 @@ edit_selection_button_release (Tool *tool, #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); if (bevent->state & GDK_BUTTON2_MASK) /* OPERATION CANCELLED */ @@ -351,11 +370,15 @@ edit_selection_motion (Tool *tool, case MaskTranslate: /* translate the selection */ gimage_mask_translate (gdisp->gimage, xoffset, yoffset); - break; - - case MaskToLayerTranslate: - gimage_mask_float (gdisp->gimage, gimage_active_drawable (gdisp->gimage), - xoffset, yoffset); + /*g_warning("%d,%d %d,%d %d,%d %d,%d %d,%d %d,%d", + edit_select.origx,edit_select.origy, + edit_select.cumlx,edit_select.cumly, + 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; case LayerTranslate: @@ -378,6 +401,15 @@ edit_selection_motion (Tool *tool, if (floating_layer) floating_sel_rigor (floating_layer, TRUE); 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: layer = gimage_get_active_layer (gdisp->gimage); @@ -447,7 +479,8 @@ edit_selection_draw (Tool *tool) gdisp = (GDisplay *) tool->gdisp_ptr; 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_y = SCALEY (gdisp, edit_select.cumly);