GUI: new pattern cursor logic, part 20

oh yes
This commit is contained in:
tildearrow 2025-07-18 05:05:56 -05:00
parent c5231eb569
commit e5ad462cd2
7 changed files with 60 additions and 14 deletions

View file

@ -172,14 +172,30 @@ void FurnaceGUI::doAction(int what) {
break;
case GUI_ACTION_ORDER_LOCK:
orderLock=!orderLock;
// move selection within bounds of current order if necessary
if (selStart.order!=curOrder || selEnd.order!=curOrder) {
finishSelection();
// selection confinement logic
if (selStart.order<curOrder && selEnd.order>curOrder) {
} else if (selStart.order<curOrder && selEnd.order<=curOrder) {
} else if (selStart.order>=curOrder && selEnd.order>curOrder) {
if (selStart.order==selEnd.order) {
// selection within one order - move it to the current one
} else if (selStart.order<curOrder && selEnd.order>curOrder) {
// current order is inside selection - confine it to this order
selStart.y=0;
selEnd.y=e->curSubSong->patLen;
} else if (selStart.order<curOrder && selEnd.order==curOrder) {
// current order intersects selection - clamp the top
selStart.y=0;
} else if (selStart.order==curOrder && selEnd.order>curOrder) {
// current order intersects selection - clamp the bottom
selEnd.y=e->curSubSong->patLen;
} else {
// something else - reset selection...
selStart=cursor;
selEnd=cursor;
}
selStart.order=curOrder;
selEnd.order=curOrder;
cursor.order=curOrder;
finishSelection();
}
break;
case GUI_ACTION_REPEAT_PATTERN: