Skip to content

Commit 9db075e

Browse files
committed
Allow ignoring snapped items via Alt key (fixes #28022)
1 parent 0d9133a commit 9db075e

File tree

2 files changed

+7
-6
lines changed

2 files changed

+7
-6
lines changed

src/engraving/dom/line.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ bool LineSegment::edit(EditData& ed)
265265
return true;
266266
}
267267

268-
undoMoveStartEndAndSnappedItems(moveStart, moveEnd, s1, s2);
268+
undoMoveStartEndAndSnappedItems(ed, moveStart, moveEnd, s1, s2);
269269

270270
EditTimeTickAnchors::updateAnchors(this);
271271
}
@@ -698,7 +698,7 @@ void LineSegment::rebaseAnchors(EditData& ed, Grip grip)
698698
PointF oldStartPos = line()->linePos(Grip::START, &sys);
699699
PointF oldEndPos = line()->linePos(Grip::END, &sys);
700700

701-
undoMoveStartEndAndSnappedItems(true, true, seg1, seg2);
701+
undoMoveStartEndAndSnappedItems(ed, true, true, seg1, seg2);
702702

703703
rebaseOffsetsOnAnchorChanged(Grip::START, oldStartPos, sys);
704704
rebaseOffsetsOnAnchorChanged(Grip::END, oldEndPos, sys);
@@ -855,12 +855,13 @@ double LineSegment::absoluteFromSpatium(const Spatium& sp) const
855855
return line()->absoluteFromSpatium(sp);
856856
}
857857

858-
void LineSegment::undoMoveStartEndAndSnappedItems(bool moveStart, bool moveEnd, Segment* s1, Segment* s2)
858+
void LineSegment::undoMoveStartEndAndSnappedItems(EditData& ed, bool moveStart, bool moveEnd, Segment* s1, Segment* s2)
859859
{
860+
bool moveSnapped = !(ed.modifiers & AltModifier);
860861
SLine* thisLine = line();
861862
if (moveStart) {
862863
Fraction tickDiff = s1->tick() - thisLine->tick();
863-
if (EngravingItem* itemSnappedBefore = ldata()->itemSnappedBefore()) {
864+
if (EngravingItem* itemSnappedBefore = ldata()->itemSnappedBefore(); itemSnappedBefore && moveSnapped) {
864865
if (itemSnappedBefore->isTextBase()) {
865866
MoveElementAnchors::moveSegment(itemSnappedBefore, s1, tickDiff);
866867
} else if (itemSnappedBefore->isLineSegment()) {
@@ -873,7 +874,7 @@ void LineSegment::undoMoveStartEndAndSnappedItems(bool moveStart, bool moveEnd,
873874
}
874875
if (moveEnd) {
875876
Fraction tickDiff = s2->tick() - thisLine->tick2();
876-
if (EngravingItem* itemSnappedAfter = thisLine->backSegment()->ldata()->itemSnappedAfter()) {
877+
if (EngravingItem* itemSnappedAfter = thisLine->backSegment()->ldata()->itemSnappedAfter(); itemSnappedAfter && moveSnapped) {
877878
if (itemSnappedAfter->isTextBase()) {
878879
MoveElementAnchors::moveSegment(itemSnappedAfter, s2, tickDiff);
879880
} else if (itemSnappedAfter->isLineSegment()) {

src/engraving/dom/line.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ class LineSegment : public SpannerSegment
8181
virtual void rebaseOffsetsOnAnchorChanged(Grip grip, const PointF& oldPos, System* sys);
8282

8383
private:
84-
void undoMoveStartEndAndSnappedItems(bool moveStart, bool moveEnd, Segment* s1, Segment* s2);
84+
void undoMoveStartEndAndSnappedItems(EditData& ed, bool moveStart, bool moveEnd, Segment* s1, Segment* s2);
8585
PointF leftAnchorPosition(const double& systemPositionY) const;
8686
PointF rightAnchorPosition(const double& systemPositionY) const;
8787

0 commit comments

Comments
 (0)