Skip to content

Commit cfac2f9

Browse files
committedJul 24, 2014
fix spanner handling when creating linked stave
1 parent 26bb716 commit cfac2f9

File tree

1 file changed

+50
-50
lines changed

1 file changed

+50
-50
lines changed
 

‎libmscore/excerpt.cpp

+50-50
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,52 @@ Score* createExcerpt(const QList<Part*>& parts)
202202
return score;
203203
}
204204

205+
//---------------------------------------------------------
206+
// cloneSpanner
207+
//---------------------------------------------------------
208+
209+
static void cloneSpanner(Spanner* s, Score* score, int dstTrack, int dstTrack2)
210+
{
211+
Spanner* ns = static_cast<Spanner*>(s->linkedClone());
212+
ns->setScore(score);
213+
ns->setParent(0);
214+
ns->setTrack(dstTrack);
215+
ns->setTrack2(dstTrack2);
216+
if (ns->type() == Element::Type::SLUR) {
217+
//
218+
// set start/end element for slur
219+
//
220+
ChordRest* cr1 = s->startCR();
221+
ChordRest* cr2 = s->endCR();
222+
223+
ns->setStartElement(0);
224+
ns->setEndElement(0);
225+
for (Element* e : *cr1->links()) {
226+
ChordRest* cr = static_cast<ChordRest*>(e);
227+
if (cr == cr1)
228+
continue;
229+
if ((cr->score() == score) && (cr->tick() == ns->tick()) && cr->track() == dstTrack) {
230+
ns->setStartElement(cr);
231+
break;
232+
}
233+
}
234+
for (Element* e : *cr2->links()) {
235+
ChordRest* cr = static_cast<ChordRest*>(e);
236+
if (cr == cr2)
237+
continue;
238+
if ((cr->score() == score) && (cr->tick() == ns->tick2()) && cr->track() == dstTrack2) {
239+
ns->setEndElement(cr);
240+
break;
241+
}
242+
}
243+
if (!ns->startElement())
244+
qDebug("clone Slur: no start element");
245+
if (!ns->endElement())
246+
qDebug("clone Slur: no end element");
247+
}
248+
score->addSpanner(ns);
249+
}
250+
205251
//---------------------------------------------------------
206252
// cloneStaves
207253
//---------------------------------------------------------
@@ -435,44 +481,8 @@ void cloneStaves(Score* oscore, Score* score, const QList<int>& map)
435481
}
436482
if (dstTrack == -1)
437483
continue;
438-
Spanner* ns = static_cast<Spanner*>(s->linkedClone());
439-
ns->setScore(score);
440-
ns->setParent(0);
441-
ns->setTrack(dstTrack);
442-
ns->setTrack2(dstTrack2);
443-
if (ns->type() == Element::Type::SLUR) {
444-
//
445-
// set start/end element for slur
446-
//
447-
ChordRest* cr1 = s->startCR();
448-
ChordRest* cr2 = s->endCR();
449-
450-
ns->setStartElement(0);
451-
ns->setEndElement(0);
452-
for (Element* e : *cr1->links()) {
453-
ChordRest* cr = static_cast<ChordRest*>(e);
454-
if (cr == cr1)
455-
continue;
456-
if ((cr->score() == score) && (cr->tick() == ns->tick())) {
457-
ns->setStartElement(cr);
458-
break;
459-
}
460-
}
461-
for (Element* e : *cr2->links()) {
462-
ChordRest* cr = static_cast<ChordRest*>(e);
463-
if (cr == cr2)
464-
continue;
465-
if ((cr->score() == score) && (cr->tick() == ns->tick2())) {
466-
ns->setEndElement(cr);
467-
break;
468-
}
469-
}
470-
if (!ns->startElement())
471-
qDebug("clone Slur: no start element");
472-
if (!ns->endElement())
473-
qDebug("clone Slur: no end element");
474-
}
475-
score->addSpanner(ns);
484+
485+
cloneSpanner(s, score, dstTrack, dstTrack2);
476486
}
477487
}
478488

@@ -604,12 +614,7 @@ void cloneStaff(Staff* srcStaff, Staff* dstStaff)
604614
}
605615
if (dstTrack == -1)
606616
continue;
607-
Spanner* ns = static_cast<Spanner*>(s->linkedClone());
608-
ns->setScore(score);
609-
ns->setParent(0);
610-
ns->setTrack(dstTrack);
611-
ns->setTrack2(dstTrack2);
612-
score->addSpanner(ns);
617+
cloneSpanner(s, score, dstTrack, dstTrack2);
613618
}
614619
}
615620

@@ -739,12 +744,7 @@ void cloneStaff2(Staff* srcStaff, Staff* dstStaff, int stick, int etick)
739744
}
740745
if (dstTrack == -1)
741746
continue;
742-
Spanner* ns = static_cast<Spanner*>(s->linkedClone());
743-
ns->setScore(score);
744-
ns->setParent(0);
745-
ns->setTrack(dstTrack);
746-
ns->setTrack2(dstTrack2);
747-
score->addSpanner(ns);
747+
cloneSpanner(s, score, dstTrack, dstTrack2);
748748
}
749749
}
750750

0 commit comments

Comments
 (0)