From 70f5820f08f9abbc81f0f0033983b94c6bf235ed Mon Sep 17 00:00:00 2001 From: Marc Sabatella Date: Fri, 30 Jan 2015 11:33:54 -0700 Subject: [PATCH] fix #46006: flags in crossed voices collide with notes --- libmscore/layout.cpp | 21 +++++++++++++++++++-- vtest/chord-layout-15-ref.png | Bin 0 -> 11858 bytes vtest/chord-layout-15.mscz | Bin 0 -> 9901 bytes vtest/gen | 2 +- vtest/gen.bat | 2 +- 5 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 vtest/chord-layout-15-ref.png create mode 100644 vtest/chord-layout-15.mscz diff --git a/libmscore/layout.cpp b/libmscore/layout.cpp index 776d5b13d849..49a0b3186154 100644 --- a/libmscore/layout.cpp +++ b/libmscore/layout.cpp @@ -119,9 +119,11 @@ void Score::layoutChords1(Segment* segment, int staffIdx) qreal maxUpMag = 0.0; qreal maxDownMag = 0.0; - // dots can affect layout of notes as well as vice versa + // dots and hooks can affect layout of notes as well as vice versa int upDots = 0; int downDots = 0; + bool upHooks = false; + bool downHooks = false; for (int track = startTrack; track < endTrack; ++track) { Element* e = segment->element(track); @@ -138,12 +140,16 @@ void Score::layoutChords1(Segment* segment, int staffIdx) upStemNotes.append(chord->notes()); upDots = qMax(upDots, chord->dots()); maxUpMag = qMax(maxUpMag, chord->mag()); + if (!upHooks) + upHooks = chord->hook(); } else { ++downVoices; downStemNotes.append(chord->notes()); downDots = qMax(downDots, chord->dots()); maxDownMag = qMax(maxDownMag, chord->mag()); + if (!downHooks) + downHooks = chord->hook(); } } } @@ -385,11 +391,16 @@ void Score::layoutChords1(Segment* segment, int staffIdx) upOffset = maxDownWidth + 0.3 * sp; else if (conflictSecondUpHigher) upOffset = maxDownWidth + 0.2 * sp; + else if ((downHooks && !upHooks) && !(upDots && !downDots)) + downOffset = maxUpWidth + 0.3 * sp; else if (conflictSecondDownHigher) { if (downDots && !upDots) downOffset = maxUpWidth + 0.3 * sp; - else + else { upOffset = maxDownWidth - 0.2 * sp; + if (downHooks) + upOffset += 0.3 * sp; + } } else { // no direct conflict, so parts can overlap (downstem on left) @@ -402,6 +413,12 @@ void Score::layoutChords1(Segment* segment, int staffIdx) else downDots = 0; // no need to adjust for dots in this case upOffset = qMax(clearLeft, clearRight); + if (downHooks) { + // we will need more space to avoid collision with hook + // but we won't need as much dot adjustment + upOffset = qMax(upOffset, maxDownWidth + 0.1 * sp); + dotAdjustThreshold = maxUpWidth - 0.3 * sp; + } // if downstem chord is small, don't center // and we might not need as much dot adjustment either if (centerDown > 0.0) { diff --git a/vtest/chord-layout-15-ref.png b/vtest/chord-layout-15-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..bbdd0de29897b6d1b64a94a7d6bd8f293008058a GIT binary patch literal 11858 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 J<(iJs{|BV`Y(fA4 literal 0 HcmV?d00001 diff --git a/vtest/chord-layout-15.mscz b/vtest/chord-layout-15.mscz new file mode 100644 index 0000000000000000000000000000000000000000..6e82e3387baf59e568242f9f538216b716815744 GIT binary patch literal 9901 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 F{|iFoEII%H literal 0 HcmV?d00001 diff --git a/vtest/gen b/vtest/gen index 49957ec093a8..292222dc2341 100755 --- a/vtest/gen +++ b/vtest/gen @@ -41,7 +41,7 @@ else frametext ottava slurs-1 slurs-2 slurs-3 hairpins-1 pedal-1 line-1 line-2 line-3 line-4 gliss-1 gliss-2\ chord-layout-1 chord-layout-2 chord-layout-3 chord-layout-4 chord-layout-5\ chord-layout-6 chord-layout-7 chord-layout-8 chord-layout-9 chord-layout-10\ - chord-layout-11 chord-layout-12 chord-layout-13 chord-layout-14 cross-1\ + chord-layout-11 chord-layout-12 chord-layout-13 chord-layout-14 chord-layout-15 cross-1\ accidental-1 accidental-2 accidental-3 accidental-4 accidental-5\ accidental-6 accidental-7 accidental-8 accidental-9\ tie-1 tie-2 tie-3 grace-1 grace-2 grace-3 grace-4\ diff --git a/vtest/gen.bat b/vtest/gen.bat index bee6cd57f389..327c3be25c3b 100644 --- a/vtest/gen.bat +++ b/vtest/gen.bat @@ -16,7 +16,7 @@ set SRC=mmrest-1,bravura-mmrest,gonville-mmrest,mmrest-2,mmrest-4,mmrest-5,mmres frametext,ottava,slurs-1,slurs-2,slurs-3,hairpins-1,pedal-1,line-1,line-2,line-3,line-4,gliss-1,gliss-2, ^ chord-layout-1,chord-layout-2,chord-layout-3,chord-layout-4,chord-layout-5, ^ chord-layout-6,chord-layout-7,chord-layout-8,chord-layout-9,chord-layout-10, ^ - chord-layout-11,chord-layout-12,chord-layout-13,chord-layout-14,cross-1, ^ + chord-layout-11,chord-layout-12,chord-layout-13,chord-layout-14,chord-layout-15,cross-1, ^ accidental-1,accidental-2,accidental-3,accidental-4,accidental-5, ^ accidental-6,accidental-7,accidental-8,accidental-9, ^ tie-1,tie-2,tie-3,grace-1,grace-2,grace-3,grace-4, ^