diff --git a/libmscore/measure.cpp b/libmscore/measure.cpp index d6c90abbd458..6628c4c6a710 100644 --- a/libmscore/measure.cpp +++ b/libmscore/measure.cpp @@ -3523,6 +3523,28 @@ qreal Measure::createEndBarLines(bool isLastMeasureInSystem) seg->createShapes(); } + // set relative position of end barline and clef + // if end repeat, clef goes after, otherwise clef goes before + Segment* clefSeg = findSegmentR(SegmentType::Clef, ticks()); + if (clefSeg) { + if (clefSeg) { + Segment* s1; + Segment* s2; + if (repeatEnd()) { + s1 = seg; + s2 = clefSeg; + } + else { + s1 = clefSeg; + s2 = seg; + } + if (s1->next() != s2) { + _segments.remove(s1); + _segments.insert(s1, s2); + } + } + } + // fix segment layout Segment* s = seg->prevActive(); if (s) { @@ -3803,7 +3825,7 @@ void Measure::addSystemTrailer(Measure* nm) s->setEnabled(false); } - // courtesy key signatures + // courtesy key signatures, clefs int n = score()->nstaves(); bool show = hasCourtesyKeySig(); @@ -3848,11 +3870,12 @@ void Measure::addSystemTrailer(Measure* nm) Clef* clef = toClef(clefSegment->element(track)); if (clef) { clef->setSmall(true); - if (!score()->genCourtesyClef() || repeatEnd() || isFinalMeasure || !clef->showCourtesy()) + if (!score()->genCourtesyClef() || isFinalMeasure || !clef->showCourtesy()) clef->clear(); // make invisible } } } + checkTrailer(); } diff --git a/libmscore/segment.cpp b/libmscore/segment.cpp index 2c51fc485b08..23d4e9aeb504 100644 --- a/libmscore/segment.cpp +++ b/libmscore/segment.cpp @@ -2066,9 +2066,9 @@ qreal Segment::minHorizontalDistance(Segment* ns, bool systemHeaderGap) const // w = qMax(w, minRight()) + d; } else if (st & (SegmentType::Clef | SegmentType::HeaderClef)) { - if (nst == SegmentType::KeySig) + if (nst == SegmentType::KeySig || nst == SegmentType::KeySigAnnounce) w += score()->styleP(Sid::clefKeyDistance); - else if (nst == SegmentType::TimeSig) + else if (nst == SegmentType::TimeSig || nst == SegmentType::TimeSigAnnounce) w += score()->styleP(Sid::clefTimesigDistance); else if (nst & (SegmentType::EndBarLine | SegmentType::StartRepeatBarLine)) w += score()->styleP(Sid::clefBarlineDistance); @@ -2092,6 +2092,8 @@ qreal Segment::minHorizontalDistance(Segment* ns, bool systemHeaderGap) const w += score()->styleP(Sid::keysigLeftMargin); else if (nst == SegmentType::TimeSigAnnounce) w += score()->styleP(Sid::timesigLeftMargin); + else if (nst == SegmentType::Clef) + w += score()->styleP(Sid::clefLeftMargin); } else if (st == SegmentType::TimeSig && nst == SegmentType::StartRepeatBarLine) w += score()->styleP(Sid::timesigBarlineDistance);