From bd1f5eac52e11fa9b586c1229552f7cacc15a620 Mon Sep 17 00:00:00 2001 From: James Mizen Date: Mon, 23 Sep 2024 16:33:10 +0100 Subject: [PATCH] Don't break MMRests on invisible elements --- src/engraving/dom/spanner.cpp | 39 ++++++++++++++++++ src/engraving/dom/spanner.h | 3 ++ .../rendering/score/measurelayout.cpp | 10 ++++- .../rendering/score/systemlayout.cpp | 6 +++ vtest/scores/mmrest-invisible-elements.mscz | Bin 0 -> 18873 bytes 5 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 vtest/scores/mmrest-invisible-elements.mscz diff --git a/src/engraving/dom/spanner.cpp b/src/engraving/dom/spanner.cpp index 53068f4dcc05e..24991fdbe5ca8 100644 --- a/src/engraving/dom/spanner.cpp +++ b/src/engraving/dom/spanner.cpp @@ -1153,6 +1153,45 @@ Measure* Spanner::endMeasure() const return toMeasure(m_endElement); } +Measure* Spanner::findStartMeasure() const +{ + if (!m_startElement) { + return nullptr; + } + + if (m_startElement->isChordRest()) { + return toChordRest(m_startElement)->measure(); + } else if (m_startElement->isSegment()) { + return toSegment(m_startElement)->measure(); + } else if (m_startElement->isMeasure()) { + toMeasure(m_startElement); + } else if (m_startElement->isNote()) { + const Chord* chord = toNote(m_startElement)->chord(); + return chord ? chord->measure() : nullptr; + } + + return m_startElement->findMeasure(); +} + +Measure* Spanner::findEndMeasure() const +{ + if (!m_endElement) { + return nullptr; + } + if (m_endElement->isChordRest()) { + return toChordRest(m_endElement)->measure(); + } else if (m_endElement->isSegment()) { + return toSegment(m_endElement)->measure(); + } else if (m_endElement->isMeasure()) { + toMeasure(m_endElement); + } else if (m_endElement->isNote()) { + const Chord* chord = toNote(m_endElement)->chord(); + return chord ? chord->measure() : nullptr; + } + + return m_endElement->findMeasure(); +} + //--------------------------------------------------------- // setSelected //--------------------------------------------------------- diff --git a/src/engraving/dom/spanner.h b/src/engraving/dom/spanner.h index 3d3ab48b0b3f4..355f151ee1b4f 100644 --- a/src/engraving/dom/spanner.h +++ b/src/engraving/dom/spanner.h @@ -225,6 +225,9 @@ class Spanner : public EngravingItem Measure* startMeasure() const; Measure* endMeasure() const; + Measure* findStartMeasure() const; + Measure* findEndMeasure() const; + void setStartElement(EngravingItem* e); void setEndElement(EngravingItem* e); diff --git a/src/engraving/rendering/score/measurelayout.cpp b/src/engraving/rendering/score/measurelayout.cpp index 2c114e9b9c06e..6d169c0f13546 100644 --- a/src/engraving/rendering/score/measurelayout.cpp +++ b/src/engraving/rendering/score/measurelayout.cpp @@ -466,7 +466,7 @@ void MeasureLayout::createMMRest(LayoutContext& ctx, Measure* firstMeasure, Meas // clone elements from underlying measure to mmr for (EngravingItem* e : underlyingSeg->annotations()) { // look at elements in underlying measure - if (!muse::contains(BREAK_TYPES, e->type())) { + if (!muse::contains(BREAK_TYPES, e->type()) || !e->visible()) { continue; } // try to find a match in mmr @@ -534,7 +534,7 @@ static bool validMMRestMeasure(const LayoutContext& ctx, const Measure* m) int n = 0; for (const Segment* s = m->first(); s; s = s->next()) { for (const EngravingItem* e : s->annotations()) { - if (!e->staff()->show()) { + if (!e->staff()->show() || !e->visible()) { continue; } if (!muse::contains(BREAK_TYPES, e->type())) { @@ -602,6 +602,9 @@ static bool breakMultiMeasureRest(const LayoutContext& ctx, Measure* m) auto sl = ctx.dom().spannerMap().findOverlapping(m->tick().ticks(), m->endTick().ticks()); for (auto i : sl) { Spanner* s = i.value; + if (!s->visible()) { + continue; + } Fraction spannerStart = s->tick(); Fraction spannerEnd = s->tick2(); Fraction measureStart = m->tick(); @@ -618,6 +621,9 @@ static bool breakMultiMeasureRest(const LayoutContext& ctx, Measure* m) auto prevMeasSpanners = ctx.dom().spannerMap().findOverlapping(prevMeas->tick().ticks(), prevMeas->endTick().ticks()); for (auto i : prevMeasSpanners) { Spanner* s = i.value; + if (!s->visible()) { + continue; + } Fraction spannerStart = s->tick(); Fraction spannerEnd = s->tick2(); Fraction measureStart = prevMeas->tick(); diff --git a/src/engraving/rendering/score/systemlayout.cpp b/src/engraving/rendering/score/systemlayout.cpp index 6d8272205a0a9..54f56cb29b970 100644 --- a/src/engraving/rendering/score/systemlayout.cpp +++ b/src/engraving/rendering/score/systemlayout.cpp @@ -1138,6 +1138,12 @@ void SystemLayout::layoutSystemElements(System* system, LayoutContext& ctx) continue; } + const Measure* startMeas = sp->findStartMeasure(); + const Measure* endMeas = sp->findEndMeasure(); + if (!sp->visible() && ((startMeas && startMeas->isMMRest()) || (endMeas && endMeas->isMMRest())) + && ctx.conf().styleB(Sid::createMultiMeasureRests)) { + continue; + } if (sp->tick2() == stick && sp->isPedal() && toPedal(sp)->connect45HookToNext()) { pedal.push_back(sp); } diff --git a/vtest/scores/mmrest-invisible-elements.mscz b/vtest/scores/mmrest-invisible-elements.mscz new file mode 100644 index 0000000000000000000000000000000000000000..201942029dd09274e4824633467c901f60362faa GIT binary patch literal 18873 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 O*nn^nFntMnfOr4`Yx@%b literal 0 HcmV?d00001