From 311c66ff9f0aa310b2f931cf95cd80aac016ad60 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 30 Jan 2023 03:43:46 -0500 Subject: [PATCH] GUI: improve drag-and-drop, part 2 - BROKEN --- src/gui/cursor.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/gui/cursor.cpp b/src/gui/cursor.cpp index bc2d81375..e2f68d6a3 100644 --- a/src/gui/cursor.cpp +++ b/src/gui/cursor.cpp @@ -88,7 +88,7 @@ void FurnaceGUI::updateSelection(int xCoarse, int xFine, int y, bool fullRow) { if (!selecting) return; if (dragging) { dragDestinationX=xCoarse; - if (dragStart.xFine>=3) dragDestinationXFine=(xFine|1); + if (dragStart.xFine>=3 && dragStart.xCoarse==dragEnd.xCoarse) dragDestinationXFine=(dragSourceXFine&1)?((xFine-1)|1):((xFine+1)&(~1)); dragDestinationY=y; cursorDrag.xCoarse=xCoarse; cursorDrag.xFine=xFine; @@ -107,12 +107,13 @@ void FurnaceGUI::updateSelection(int xCoarse, int xFine, int y, bool fullRow) { dragDestinationX=lastChannel-(dragEnd.xCoarse-dragSourceX)-1; } - if (dragStart.xFine>=3) { - logV("ddd: %d",dragStart.xFine+(dragDestinationXFine-dragSourceXFine)); - if (dragStart.xFine+(dragDestinationXFine-dragSourceXFine)<3) { - dragDestinationXFine=dragStart.xFine+dragSourceXFine-3; + if (dragStart.xFine>=3 && dragStart.xCoarse==dragEnd.xCoarse) { + if (dragEnd.xFine+(dragDestinationXFine-dragSourceXFine)>(2+e->curPat[dragDestinationX].effectCols*2)) { + dragDestinationXFine=(2+e->curPat[dragDestinationX].effectCols*2)-dragEnd.xFine+dragSourceXFine; } - logV("ddxf: %d",dragDestinationXFine); + if (dragStart.xFine+(dragDestinationXFine-dragSourceXFine)<3) { + dragDestinationXFine=3-dragStart.xFine+dragSourceXFine; + } } if (dragStart.y+(dragDestinationY-dragSourceY)<0) {