From 889fda38178f1f2f59e8c72fcf4cfdade90d5c5c Mon Sep 17 00:00:00 2001 From: ws Date: Mon, 29 Jul 2013 18:06:11 +0200 Subject: [PATCH] fix #22083 --- libmscore/layout.cpp | 4 ++-- libmscore/paste.cpp | 2 +- libmscore/scorefile.cpp | 3 ++- libmscore/spanner.cpp | 2 ++ 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/libmscore/layout.cpp b/libmscore/layout.cpp index 1009834470..e1f64692e4 100644 --- a/libmscore/layout.cpp +++ b/libmscore/layout.cpp @@ -663,8 +663,8 @@ void Score::doLayout() sp->setTick2(lastMeasure()->endTick()); sp->staff()->updateOttava(static_cast(sp)); } - if (sp->tick() == -1 || sp->tick2() == -1) { - printf("bad spanner id %d %s %d - %d\n", sp->id(), sp->name(), sp->tick(), sp->tick2()); + if (sp->tick() == -1) { + qDebug("bad spanner id %d %s %d - %d", sp->id(), sp->name(), sp->tick(), sp->tick2()); } else sp->layout(); diff --git a/libmscore/paste.cpp b/libmscore/paste.cpp index ba27cdbe39..58685dc220 100644 --- a/libmscore/paste.cpp +++ b/libmscore/paste.cpp @@ -168,9 +168,9 @@ void Score::pasteStaff(XmlReader& e, ChordRest* dst) || tag == "Slur" || tag == "Volta") { Spanner* sp = static_cast(Element::name2Element(tag, this)); - sp->setTrack(dstStaffIdx * VOICES); sp->setAnchor(Spanner::ANCHOR_SEGMENT); sp->read(e); + sp->setTrack(dstStaffIdx * VOICES); sp->setTick(e.tick() - tickStart + dstTick); addSpanner(sp); } diff --git a/libmscore/scorefile.cpp b/libmscore/scorefile.cpp index 310c93615a..5d9f79cb53 100644 --- a/libmscore/scorefile.cpp +++ b/libmscore/scorefile.cpp @@ -1190,7 +1190,8 @@ void Score::writeSegments(Xml& xml, const Measure* m, int strack, int etrack, if (s->track() != track || s->generated()) continue; - if (s->tick() == segment->tick() && (!clip || s->tick2() < ls->tick())) { + int endTick = ls == 0 ? lastMeasure()->endTick() : ls->tick(); + if (s->tick() == segment->tick() && (!clip || s->tick2() < endTick)) { if (needTick) { xml.tag("tick", segment->tick() - xml.tickDiff); xml.curTick = segment->tick(); diff --git a/libmscore/spanner.cpp b/libmscore/spanner.cpp index 3025cfd8ad..4a2cc69577 100644 --- a/libmscore/spanner.cpp +++ b/libmscore/spanner.cpp @@ -376,6 +376,8 @@ void Spanner::computeEndElement() case ANCHOR_MEASURE: _endElement = score()->tick2measure(tick2() - 1); + if (!_endElement) + _endElement = score()->lastMeasure(); break; case ANCHOR_CHORD: