From aa32a28c8b6c8f616ee7072d83043986f65e8f39 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Thu, 17 Oct 2024 17:22:45 +0200 Subject: [PATCH 1/2] Refine assertions --- src/slur.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/slur.cpp b/src/slur.cpp index bc5a3be43b..86e5c31d68 100644 --- a/src/slur.cpp +++ b/src/slur.cpp @@ -527,15 +527,17 @@ const Staff *Slur::CalculateExtremalStaff(const Staff *staff, int xMin, int xMax bool Slur::IsElementBelow(const LayerElement *element, const Staff *startStaff, const Staff *endStaff) const { assert(element); - assert(startStaff); - assert(endStaff); + // startStaff and endStaff may be NULL (if the boundary is a tstamp) + // however, slurs with tstamp should never have S-shape switch (this->GetDrawingCurveDir()) { case SlurCurveDirection::Above: return true; case SlurCurveDirection::Below: return false; case SlurCurveDirection::AboveBelow: + assert(startStaff); return (element->GetAncestorStaff(RESOLVE_CROSS_STAFF)->GetN() == startStaff->GetN()); case SlurCurveDirection::BelowAbove: + assert(endStaff); return (element->GetAncestorStaff(RESOLVE_CROSS_STAFF)->GetN() == endStaff->GetN()); default: return false; } @@ -544,15 +546,17 @@ bool Slur::IsElementBelow(const LayerElement *element, const Staff *startStaff, bool Slur::IsElementBelow(const FloatingPositioner *positioner, const Staff *startStaff, const Staff *endStaff) const { assert(positioner); - assert(startStaff); - assert(endStaff); + // startStaff and endStaff may be NULL (if the boundary is a tstamp) + // however, slurs with tstamp should never have S-shape switch (this->GetDrawingCurveDir()) { case SlurCurveDirection::Above: return true; case SlurCurveDirection::Below: return false; case SlurCurveDirection::AboveBelow: + assert(startStaff); return (positioner->GetAlignment()->GetStaff()->GetN() == startStaff->GetN()); case SlurCurveDirection::BelowAbove: + assert(endStaff); return (positioner->GetAlignment()->GetStaff()->GetN() == endStaff->GetN()); default: return false; } From 0b86584af7a3983259f3b42572f2af5f5f076c2e Mon Sep 17 00:00:00 2001 From: David Bauer Date: Thu, 17 Oct 2024 17:32:06 +0200 Subject: [PATCH 2/2] Ignore mixed direction for slurs with tstamp --- src/calcslurdirectionfunctor.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/calcslurdirectionfunctor.cpp b/src/calcslurdirectionfunctor.cpp index c7fdb55d75..78e79bbdf2 100644 --- a/src/calcslurdirectionfunctor.cpp +++ b/src/calcslurdirectionfunctor.cpp @@ -53,6 +53,9 @@ FunctorCode CalcSlurDirectionFunctor::VisitSlur(Slur *slur) if (slur->HasBulge()) { LogWarning("Mixed curve direction is ignored for slurs with prescribed bulge."); } + else if (start->Is(TIMESTAMP_ATTR) || end->Is(TIMESTAMP_ATTR)) { + LogWarning("Mixed curve direction is ignored for slurs with tstamp boundary."); + } else { const int startStaffN = start->GetAncestorStaff(RESOLVE_CROSS_STAFF)->GetN(); const int endStaffN = end->GetAncestorStaff(RESOLVE_CROSS_STAFF)->GetN();