Skip to content

Commit

Permalink
fix #290546: corruption on copy/paste end final mmrest
Browse files Browse the repository at this point in the history
  • Loading branch information
MarcSabatella committed Jul 1, 2019
1 parent e8a16ca commit 544a91d
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 12 deletions.
2 changes: 1 addition & 1 deletion libmscore/score.h
Original file line number Diff line number Diff line change
Expand Up @@ -1016,7 +1016,7 @@ class Score : public QObject, public ScoreElement {
MasterScore* masterScore() const { return _masterScore; }
void setMasterScore(MasterScore* s) { _masterScore = s; }
void createRevision();
void writeSegments(XmlWriter& xml, int strack, int etrack, Segment* first, Segment* last, bool, bool);
void writeSegments(XmlWriter& xml, int strack, int etrack, Segment* sseg, Segment* eseg, bool, bool);

const QMap<QString, QString>& metaTags() const { return _metaTags; }
QMap<QString, QString>& metaTags() { return _metaTags; }
Expand Down
22 changes: 11 additions & 11 deletions libmscore/scorefile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1121,29 +1121,29 @@ static bool writeVoiceMove(XmlWriter& xml, Segment* seg, const Fraction& startTi
//---------------------------------------------------------

void Score::writeSegments(XmlWriter& xml, int strack, int etrack,
Segment* fs, Segment* ls, bool writeSystemElements, bool forceTimeSig)
Segment* sseg, Segment* eseg, bool writeSystemElements, bool forceTimeSig)
{
Fraction startTick = xml.curTick();
Fraction endTick = ls ? ls->tick() : lastMeasure()->endTick();
Fraction endTick = eseg ? eseg->tick() : lastMeasure()->endTick();
bool clip = xml.clipboardmode();

// in clipboard mode, ls might be in an mmrest
// since we are traversing regular measures,
// force them out of mmRest
if (clip) {
Measure* lm = ls ? ls->measure() : 0;
Measure* fm = fs ? fs->measure() : 0;
Measure* lm = eseg ? eseg->measure() : 0;
Measure* fm = sseg ? sseg->measure() : 0;
if (lm && lm->isMMRest()) {
lm = lm->mmRestLast();
if (lm)
ls = lm->nextMeasure() ? lm->nextMeasure()->first() : lastSegment();
eseg = lm->nextMeasure() ? lm->nextMeasure()->first() : nullptr;
else
qDebug("writeSegments: no measure for end segment in mmrest");
}
if (fm && fm->isMMRest()) {
fm = fm->mmRestFirst();
if (fm)
fs = fm->first();
sseg = fm->first();
}
}

Expand All @@ -1153,7 +1153,7 @@ void Score::writeSegments(XmlWriter& xml, int strack, int etrack,
for (auto i = spanner().begin(); i != endIt; ++i) {
Spanner* s = i->second;
#else
auto sl = spannerMap().findOverlapping(fs->tick().ticks(), endTick.ticks());
auto sl = spannerMap().findOverlapping(sseg->tick().ticks(), endTick.ticks());
for (auto i : sl) {
Spanner* s = i.value;
#endif
Expand All @@ -1176,7 +1176,7 @@ void Score::writeSegments(XmlWriter& xml, int strack, int etrack,
bool crWritten = false; // for forceTimeSig
bool keySigWritten = false; // for forceTimeSig

for (Segment* segment = fs; segment && segment != ls; segment = segment->next1()) {
for (Segment* segment = sseg; segment && segment != eseg; segment = segment->next1()) {
if (!segment->enabled())
continue;
if (track == 0)
Expand Down Expand Up @@ -1231,7 +1231,7 @@ void Score::writeSegments(XmlWriter& xml, int strack, int etrack,
if ((s->tick2() == segment->tick())
&& !s->isSlur()
&& (s->track2() == track || (s->track2() == -1 && s->track() == track))
&& (!clip || s->tick() >= fs->tick())
&& (!clip || s->tick() >= sseg->tick())
) {
if (needMove) {
voiceTagWritten |= writeVoiceMove(xml, segment, startTick, track, &lastTrackWritten);
Expand Down Expand Up @@ -1298,12 +1298,12 @@ void Score::writeSegments(XmlWriter& xml, int strack, int etrack,
}

//write spanner ending after the last segment, on the last tick
if (clip || ls == 0) {
if (clip || eseg == 0) {
for (Spanner* s : spanners) {
if ((s->tick2() == endTick)
&& !s->isSlur()
&& (s->track2() == track || (s->track2() == -1 && s->track() == track))
&& (!clip || s->tick() >= fs->tick())
&& (!clip || s->tick() >= sseg->tick())
) {
s->writeSpannerEnd(xml, lastMeasure(), track, endTick);
}
Expand Down

0 comments on commit 544a91d

Please sign in to comment.