From 60a1b034067a66bbc9a6255609328f56e00dcc9f Mon Sep 17 00:00:00 2001 From: James Mizen Date: Fri, 19 Apr 2024 14:16:39 +0100 Subject: [PATCH] Allow unison cue notes with filled noteheads to overlap --- src/engraving/rendering/dev/chordlayout.cpp | 28 ++++++++++++++++---- vtest/scores/chord-small.mscz | Bin 0 -> 24245 bytes 2 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 vtest/scores/chord-small.mscz diff --git a/src/engraving/rendering/dev/chordlayout.cpp b/src/engraving/rendering/dev/chordlayout.cpp index fc62d2e6d5135..0423befbe1356 100644 --- a/src/engraving/rendering/dev/chordlayout.cpp +++ b/src/engraving/rendering/dev/chordlayout.cpp @@ -1716,10 +1716,11 @@ void ChordLayout::layoutChords1(LayoutContext& ctx, Segment* segment, staff_idx_ // the most important rules for sharing noteheads on unisons between voices are // that notes must be one same line with same tpc // noteheads must be unmirrored and of same group - // and chords must be same size (or else sharing code won't work) + // and chords must be same size if notehead is anything other than HEAD_QUARTER if (n->headGroup() != p->headGroup() || n->tpc() != p->tpc() || n->ldata()->mirror() || p->ldata()->mirror() - || nchord->isSmall() != pchord->isSmall()) { + || (nchord->isSmall() != pchord->isSmall() + && (nHeadType != NoteHeadType::HEAD_QUARTER || pHeadType != NoteHeadType::HEAD_QUARTER))) { shareHeads = false; } else { // noteheads are potentially shareable @@ -1798,12 +1799,19 @@ void ChordLayout::layoutChords1(LayoutContext& ctx, Segment* segment, staff_idx_ Note* previousNote = overlapNotes[i - 1]; Note* n = overlapNotes[i]; if (!(previousNote->chord()->isNudged() || n->chord()->isNudged())) { + bool prevChordSmall = previousNote->chord()->isSmall(); + bool nChordSmall = n->chord()->isSmall(); if (previousNote->chord()->dots() == n->chord()->dots()) { - // hide one set dots + // hide one set of dots + // Hide the small augmentation dot if present bool onLine = !(previousNote->line() & 1); - if (onLine) { + if (prevChordSmall) { + previousNote->setDotsHidden(true); + } else if (nChordSmall) { + n->setDotsHidden(true); + } else if (onLine) { // hide dots for lower voice - if (previousNote->voice() & 1) { + if ((previousNote->voice() & 1)) { previousNote->setDotsHidden(true); } else { n->setDotsHidden(true); @@ -1817,6 +1825,16 @@ void ChordLayout::layoutChords1(LayoutContext& ctx, Segment* segment, staff_idx_ } } } + // If either chord is small, adjust offset + Chord* smallChord = prevChordSmall ? previousNote->chord() : nullptr; + smallChord = nChordSmall ? n->chord() : smallChord; + if (smallChord && !(prevChordSmall && nChordSmall)) { + if (smallChord->up()) { + centerUp *= 2; + } else { + centerDown = 0; + } + } // formerly we hid noteheads in an effort to fix playback // but this doesn't work for cases where noteheads cannot be shared // so better to solve the problem elsewhere diff --git a/vtest/scores/chord-small.mscz b/vtest/scores/chord-small.mscz new file mode 100644 index 0000000000000000000000000000000000000000..c98b484a26fe0b86f41ccd3a0edac195c119d0f8 GIT binary patch literal 24245 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