From 69d30743085b395f59ccedd0967d11aaaf647c48 Mon Sep 17 00:00:00 2001 From: Matt McClinch Date: Tue, 25 Sep 2018 15:04:12 -0400 Subject: [PATCH] fix #246156: Dragging a note does not affect the notes tied to it --- libmscore/note.cpp | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/libmscore/note.cpp b/libmscore/note.cpp index 6876acb7ac342..52c6aa3f0c1ad 100644 --- a/libmscore/note.cpp +++ b/libmscore/note.cpp @@ -1532,31 +1532,29 @@ QRectF Note::drag(EditData& ed) int nString = ned->string + (st->upsideDown() ? -lineOffset : lineOffset); int nFret = strData->fret(_pitch, nString, staff(), _tick); if (nFret >= 0) { // no fret? - bool refret = false; - if (fret() != nFret) { - _fret = nFret; - refret = true; - } - if (string() != nString) { - _string = nString; - refret = true; - } - if (refret) { - strData->fretChords(chord()); - triggerLayout(); + if (fret() != nFret || string() != nString) { + for (Note* nn : tiedNotes()) { + nn->setFret(nFret); + nn->setString(nString); + strData->fretChords(nn->chord()); + nn->triggerLayout(); + } } } } else { Key key = staff()->key(_tick); - _pitch = line2pitch(ned->line + lineOffset, staff()->clef(_tick), key); + int newPitch = line2pitch(ned->line + lineOffset, staff()->clef(_tick), key); if (!concertPitch()) { Interval interval = staff()->part()->instrument(_tick)->transpose(); - _pitch += interval.chromatic; + newPitch += interval.chromatic; + } + int newTpc1 = pitch2tpc(newPitch, key, Prefer::NEAREST); + int newTpc2 = pitch2tpc(newPitch - transposition(), key, Prefer::NEAREST); + for (Note* nn : tiedNotes()) { + nn->setPitch(newPitch, newTpc1, newTpc2); + nn->triggerLayout(); } - _tpc[0] = pitch2tpc(_pitch, key, Prefer::NEAREST); - _tpc[1] = pitch2tpc(_pitch - transposition(), key, Prefer::NEAREST); - triggerLayout(); } return QRectF(); }