diff --git a/src/engraving/rendering/score/slurtielayout.cpp b/src/engraving/rendering/score/slurtielayout.cpp index 9235549a565c3..18f85896b7809 100644 --- a/src/engraving/rendering/score/slurtielayout.cpp +++ b/src/engraving/rendering/score/slurtielayout.cpp @@ -25,6 +25,7 @@ #include "dom/slur.h" #include "dom/chord.h" +#include "dom/clef.h" #include "dom/score.h" #include "dom/system.h" #include "dom/staff.h" @@ -268,7 +269,7 @@ SpannerSegment* SlurTieLayout::layoutSystem(Slur* item, System* system, LayoutCo } } - double endingX = outgoingPartialSlur ? measure->endingXForOpenEndedLines() : system->endingXForOpenEndedLines(); + double endingX = endingXForOpenEndedSlurTie(outgoingPartialSlur ? measure : system->lastMeasure(), item->startCR()->vStaffIdx()); p2 = PointF(endingX, y); // adjust for ties at the end of the system @@ -353,6 +354,26 @@ void SlurTieLayout::adjustSlurFloatingEndPointAngles(SlurSegment* slurSeg, Point } } +double SlurTieLayout::endingXForOpenEndedSlurTie(const Measure* measure, staff_idx_t staffIdx) +{ + double endingX = measure->endingXForOpenEndedLines(); + + const Segment* clefSeg = measure->findSegmentR(SegmentType::ClefTypes, measure->ticks()); + if (!clefSeg || !clefSeg->enabled()) { + return endingX; + } + + const Clef* clef = toClef(clefSeg->element(staff2track(staffIdx))); + if (!clef || !clef->addToSkyline()) { + return endingX; + } + + const double margin = clef->style().styleAbsolute(Sid::lineEndToBarlineDistance); + const double clefLeftX = measure->x() + clefSeg->x() + clef->ldata()->shape().translated(clef->pos()).left(); + + return std::min(endingX, clefLeftX - margin); +} + //--------------------------------------------------------- // slurPos // calculate position of start- and endpoint of slur @@ -1562,7 +1583,7 @@ TieSegment* SlurTieLayout::layoutTieFor(Tie* item, System* system) int segmentCount = sPos.system1 == sPos.system2 ? 1 : 2; if (segmentCount == 2) { - sPos.p2 = PointF(system->endingXForOpenEndedLines(), sPos.p1.y()); + sPos.p2 = PointF(endingXForOpenEndedSlurTie(system->lastMeasure(), item->startNote()->vStaffIdx()), sPos.p1.y()); } else { sPos.p2 = computeDefaultStartOrEndPoint(item, Grip::END); } diff --git a/src/engraving/rendering/score/slurtielayout.h b/src/engraving/rendering/score/slurtielayout.h index fd7b4caeda9d7..7448dbd688e88 100644 --- a/src/engraving/rendering/score/slurtielayout.h +++ b/src/engraving/rendering/score/slurtielayout.h @@ -95,6 +95,8 @@ class SlurTieLayout static bool isOverBeams(Slur* slur); static double computeShoulderHeight(SlurSegment* slurSeg, double slurLengthInSp, PointF shoulderOffset); + static double endingXForOpenEndedSlurTie(const Measure* measure, staff_idx_t staffIdx); + static bool tieSegmentShouldBeSkipped(const Tie* item); static void computeStartAndEndSystem(Tie* item, SlurTiePos& slurTiePos); static PointF computeDefaultStartOrEndPoint(const Tie* tie, Grip startOrEnd); diff --git a/src/engraving/rw/read500/tread.cpp b/src/engraving/rw/read500/tread.cpp index 53ea334f12555..f32b6c6b66522 100644 --- a/src/engraving/rw/read500/tread.cpp +++ b/src/engraving/rw/read500/tread.cpp @@ -3794,6 +3794,7 @@ bool TRead::readProperties(SlurTie* s, XmlReader& e, ReadContext& ctx) const AsciiStringView tag(e.name()); if (TRead::readProperty(s, tag, e, ctx, Pid::SLUR_DIRECTION)) { + } else if (TRead::readProperty(s, tag, e, ctx, Pid::MASK_SLURTIE)) { } else if (tag == "lineType") { s->setStyleType(static_cast(e.readInt())); } else if (tag == "SlurSegment" || tag == "TieSegment" || tag == "LaissezVibSegment" || tag == "PartialTieSegment" diff --git a/src/propertiespanel/qml/MuseScore/PropertiesPanel/notation/lines/SlurAndTieSettings.qml b/src/propertiespanel/qml/MuseScore/PropertiesPanel/notation/lines/SlurAndTieSettings.qml index 10504960ca7b6..05860f2a4e1a2 100644 --- a/src/propertiespanel/qml/MuseScore/PropertiesPanel/notation/lines/SlurAndTieSettings.qml +++ b/src/propertiespanel/qml/MuseScore/PropertiesPanel/notation/lines/SlurAndTieSettings.qml @@ -102,7 +102,7 @@ Column { FlatRadioButtonGroupPropertyView { id: maskSection - titleText: qsTrc("inspector", "Mask over clefs, key and time signatures") + titleText: qsTrc("propertiespanel", "Mask over clefs, key and time signatures") propertyItem: root.model ? root.model.maskSlurTie : null navigationPanel: root.navigationPanel @@ -110,9 +110,9 @@ Column { navigationRowStart: tiePlacementSection.navigationRowEnd + 1 model: [ - { text: qsTrc("inspector", "Auto"), value: CommonTypes.AUTO_ON_OFF_AUTO }, - { text: qsTrc("inspector", "On"), value: CommonTypes.AUTO_ON_OFF_ON }, - { text: qsTrc("inspector", "Off"), value: CommonTypes.AUTO_ON_OFF_OFF } + { text: qsTrc("propertiespanel", "Auto"), value: CommonTypes.AUTO_ON_OFF_AUTO }, + { text: qsTrc("propertiespanel", "On"), value: CommonTypes.AUTO_ON_OFF_ON }, + { text: qsTrc("propertiespanel", "Off"), value: CommonTypes.AUTO_ON_OFF_OFF } ] }