diff --git a/src/engraving/dom/chord.cpp b/src/engraving/dom/chord.cpp index 76e43cddf7d0c..9b75f86c0fcf8 100644 --- a/src/engraving/dom/chord.cpp +++ b/src/engraving/dom/chord.cpp @@ -2722,6 +2722,9 @@ Ornament* Chord::findOrnament(bool forPlayback) const } } if (forPlayback) { + // TODO: cleanup. + // We shouldn't do this kind of special cases, and the DOM shouldn't know anything about playback. + // This should be in a different function that returns the ornament from the Trill ending on this chord. [MS] for (Spanner* spanner : m_endingSpanners) { if (spanner->isTrill()) { return toTrill(spanner)->ornament(); diff --git a/src/engraving/dom/segment.cpp b/src/engraving/dom/segment.cpp index 43fe5c859e8a6..9515fcd2b5c44 100644 --- a/src/engraving/dom/segment.cpp +++ b/src/engraving/dom/segment.cpp @@ -2736,21 +2736,25 @@ void Segment::addArticulationsToShape(const Chord* chord, Shape& shape) }; for (Articulation* art : chord->articulations()) { - if (art->isOrnament()) { - Chord* cueNoteChord = toOrnament(art)->cueNoteChord(); - if (cueNoteChord && cueNoteChord->upNote()->visible()) { - shape.add(cueNoteChord->shape().translate(cueNoteChord->pos() + cueNoteChord->staffOffset())); - } - } else if (art->addToSkyline()) { - shape.add(art->shape().translated(art->pos() + chord->pos())); - if (art->isTapping()) { - if (TappingHalfSlur* halfSlur = toTapping(art)->halfSlurAbove()) { - addTappingHalfSlurToShape(halfSlur); - } - if (TappingHalfSlur* halfSlur = toTapping(art)->halfSlurBelow()) { - addTappingHalfSlurToShape(halfSlur); - } + if (art->isOrnament() || !art->addToSkyline()) { + continue; + } + shape.add(art->shape().translated(art->pos() + chord->pos())); + if (art->isTapping()) { + if (TappingHalfSlur* halfSlur = toTapping(art)->halfSlurAbove()) { + addTappingHalfSlurToShape(halfSlur); } + if (TappingHalfSlur* halfSlur = toTapping(art)->halfSlurBelow()) { + addTappingHalfSlurToShape(halfSlur); + } + } + } + + Ornament* ornament = chord->findOrnament(); + if (ornament) { + Chord* cueNoteChord = ornament->cueNoteChord(); + if (cueNoteChord && cueNoteChord->upNote()->addToSkyline()) { + shape.add(cueNoteChord->shape().translate(cueNoteChord->pos() + cueNoteChord->staffOffset())); } } } diff --git a/vtest/scores/ornament-11.mscz b/vtest/scores/ornament-11.mscz new file mode 100644 index 0000000000000..56f1da75f1069 Binary files /dev/null and b/vtest/scores/ornament-11.mscz differ