GUI: new pattern cursor logic, part 12

dragging
This commit is contained in:
tildearrow 2025-07-04 04:05:35 -05:00
parent ae3444566b
commit 0bbdfa877e
2 changed files with 54 additions and 24 deletions

View file

@ -127,24 +127,45 @@ void FurnaceGUI::updateSelection(int xCoarse, int xFine, int y, int ord, bool fu
}
if (dragStart.xFine+(dragDestinationXFine-dragSourceXFine)<3) {
dragDestinationXFine=3-dragStart.xFine+dragSourceXFine;
}
}
}
// TODO: new cursor logic
if (dragStart.y+(dragDestinationY-dragSourceY)<0) {
dragDestinationY=dragSourceY-dragStart.y;
}
int dragStartYAbs=dragStart.y+(dragStart.order*e->curSubSong->patLen);
int dragEndYAbs=dragEnd.y+(dragEnd.order*e->curSubSong->patLen);
int dragSourceYAbs=dragSourceY+(dragSourceOrder*e->curSubSong->patLen);
int dragDestinationYAbs=dragDestinationY+(dragDestinationOrder*e->curSubSong->patLen);
if (dragEnd.y+(dragDestinationY-dragSourceY)>=e->curSubSong->patLen) {
dragDestinationY=e->curSubSong->patLen-(dragEnd.y-dragSourceY)-1;
}
if (e->curSubSong->patLen>0) {
int newSelStartYAbs=dragStartYAbs+(dragDestinationYAbs-dragSourceYAbs);
int newSelEndYAbs=dragEndYAbs+(dragDestinationYAbs-dragSourceYAbs);
selStart.xCoarse=dragStart.xCoarse+(dragDestinationX-dragSourceX);
selStart.xFine=dragStart.xFine+(dragDestinationXFine-dragSourceXFine);
selStart.y=dragStart.y+(dragDestinationY-dragSourceY);
selEnd.xCoarse=dragEnd.xCoarse+(dragDestinationX-dragSourceX);
selEnd.xFine=dragEnd.xFine+(dragDestinationXFine-dragSourceXFine);
selEnd.y=dragEnd.y+(dragDestinationY-dragSourceY);
logV("SS: %d SE: %d",newSelStartYAbs,newSelEndYAbs);
if (newSelStartYAbs<0) {
int newDragDestination=dragSourceYAbs-dragStartYAbs;
newSelStartYAbs=0;
newSelEndYAbs=dragEndYAbs-dragStartYAbs;
dragDestinationY=newDragDestination%e->curSubSong->patLen;
dragDestinationOrder=newDragDestination/e->curSubSong->patLen;
}
if (newSelEndYAbs>=(e->curSubSong->ordersLen*e->curSubSong->patLen)) {
int newDragDestination=(e->curSubSong->ordersLen*e->curSubSong->patLen)-(dragEndYAbs-dragSourceYAbs)-1;
newSelStartYAbs=(e->curSubSong->ordersLen*e->curSubSong->patLen)-1-(dragEndYAbs-dragStartYAbs);
newSelEndYAbs=(e->curSubSong->ordersLen*e->curSubSong->patLen)-1;
dragDestinationY=newDragDestination%e->curSubSong->patLen;
dragDestinationOrder=newDragDestination/e->curSubSong->patLen;
}
selStart.xCoarse=dragStart.xCoarse+(dragDestinationX-dragSourceX);
selStart.xFine=dragStart.xFine+(dragDestinationXFine-dragSourceXFine);
selStart.y=newSelStartYAbs%e->curSubSong->patLen;
selStart.order=newSelStartYAbs/e->curSubSong->patLen;
selEnd.xCoarse=dragEnd.xCoarse+(dragDestinationX-dragSourceX);
selEnd.xFine=dragEnd.xFine+(dragDestinationXFine-dragSourceXFine);
selEnd.y=newSelEndYAbs%e->curSubSong->patLen;
selEnd.order=newSelEndYAbs/e->curSubSong->patLen;
}
} else {
if (selectingFull) {
DETERMINE_LAST;