Skip to content

Commit 8d75295

Browse files
committed
attempt to fix alt+left and alt+right (not working yet)
1 parent dd089ff commit 8d75295

File tree

1 file changed

+29
-32
lines changed

1 file changed

+29
-32
lines changed

src/engraving/dom/textbase.cpp

Lines changed: 29 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -3359,30 +3359,18 @@ bool TextBase::editNonTextual(EditData& ed)
33593359
return false;
33603360
}
33613361

3362-
bool leftRightKey = ed.key == Key_Left || ed.key == Key_Right;
3363-
bool altMod = ed.modifiers & AltModifier;
3364-
bool shiftMod = ed.modifiers & ShiftModifier;
3365-
3366-
bool changeAnchorType = shiftMod && altMod && leftRightKey;
3367-
if (changeAnchorType) {
3368-
undoChangeProperty(Pid::ANCHOR_TO_END_OF_PREVIOUS, !anchorToEndOfPrevious(), propertyFlags(Pid::ANCHOR_TO_END_OF_PREVIOUS));
3369-
}
3370-
bool doesntNeedMoveSeg = changeAnchorType && ((ed.key == Key_Left && anchorToEndOfPrevious())
3371-
|| (ed.key == Key_Right && !anchorToEndOfPrevious()));
3372-
if (doesntNeedMoveSeg) {
3373-
checkMeasureBoundariesAndMoveIfNeed();
3374-
return true;
3375-
}
3376-
3377-
bool moveSeg = shiftMod && (leftRightKey || ed.key == Key_Home || ed.key == Key_End);
3378-
if (moveSeg) {
3362+
Segment* oldSeg = toSegment(parent());
3363+
if (ed.modifiers & ShiftModifier
3364+
&& (ed.key == Key_Left || ed.key == Key_Right || ed.key == Key_Home || ed.key == Key_End)) {
33793365
bool moved = moveSegment(ed);
3380-
EditTimeTickAnchors::updateAnchors(this, track());
3366+
if (oldSeg != toSegment(parent())) {
3367+
EditTimeTickAnchors::updateAnchors(this, track());
3368+
}
33813369
checkMeasureBoundariesAndMoveIfNeed();
33823370
return moved;
33833371
}
33843372

3385-
if (shiftMod) {
3373+
if (ed.modifiers & ShiftModifier) {
33863374
return false;
33873375
}
33883376

@@ -3462,11 +3450,28 @@ bool TextBase::moveSegment(const EditData& ed)
34623450
}
34633451

34643452
Segment* newSeg = nullptr;
3465-
Segment* prevSeg = curSeg;
3466-
if (anchorToEndOfPrevious() && prevSeg->prev1ChordRestOrTimeTick()) {
3467-
curSeg = prevSeg->prev1ChordRestOrTimeTick();
3453+
3454+
bool beforeFirstSeg = false;
3455+
3456+
if (anchorToEndOfPrevious()) {
3457+
if (curSeg->prev1ChordRestOrTimeTick()) {
3458+
if (ed.key == Key_Right || ed.key == Key_End) {
3459+
curSeg = curSeg->prev1ChordRestOrTimeTick();
3460+
}
3461+
} else {
3462+
beforeFirstSeg = true;
3463+
}
3464+
}
3465+
3466+
if (ed.modifiers & AltModifier) {
3467+
undoChangeProperty(Pid::ANCHOR_TO_END_OF_PREVIOUS, !anchorToEndOfPrevious(), propertyFlags(Pid::ANCHOR_TO_END_OF_PREVIOUS));
3468+
} else {
3469+
undoResetProperty(Pid::ANCHOR_TO_END_OF_PREVIOUS);
3470+
}
3471+
3472+
if (beforeFirstSeg) {
3473+
return true;
34683474
}
3469-
bool endAnchor = false;
34703475

34713476
switch (ed.key) {
34723477
case Key_Left: {
@@ -3487,7 +3492,6 @@ bool TextBase::moveSegment(const EditData& ed)
34873492
Measure* m = score()->lastMeasure();
34883493
EditTimeTickAnchors::updateAnchors(m, staffIdx());
34893494
newSeg = m->getChordRestOrTimeTickSegment(m->endTick());
3490-
endAnchor = true;
34913495
}
34923496
} else {
34933497
newSeg = curSeg->next1ChordRestOrTimeTick();
@@ -3510,21 +3514,14 @@ bool TextBase::moveSegment(const EditData& ed)
35103514
Measure* m = score()->lastMeasure();
35113515
EditTimeTickAnchors::updateAnchors(m, staffIdx());
35123516
newSeg = m->getChordRestOrTimeTickSegment(m->endTick());
3513-
endAnchor = true;
35143517
}
35153518
break;
35163519
}
35173520
default:
35183521
break;
35193522
}
35203523

3521-
if (endAnchor && !anchorToEndOfPrevious()) {
3522-
undoChangeProperty(Pid::ANCHOR_TO_END_OF_PREVIOUS, true, propertyFlags(Pid::ANCHOR_TO_END_OF_PREVIOUS));
3523-
} else if (!(ed.modifiers & AltModifier) && anchorToEndOfPrevious()) {
3524-
undoResetProperty(Pid::ANCHOR_TO_END_OF_PREVIOUS);
3525-
}
3526-
3527-
if (!newSeg || newSeg == prevSeg) {
3524+
if (!newSeg) {
35283525
return false;
35293526
}
35303527

0 commit comments

Comments
 (0)