GUI: new pattern cursor logic, part 12
dragging
This commit is contained in:
parent
ae3444566b
commit
0bbdfa877e
2 changed files with 54 additions and 24 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue