Skip to content

Commit

Permalink
fix #272172: Remove tuplets after inserting measures causes corruptio…
Browse files Browse the repository at this point in the history
…n/crash

fix #272185: Delete a measure containing some tuplets + rest leads to corruption after inserting a measure
  • Loading branch information
mattmcclinch committed May 8, 2018
1 parent ef72a27 commit 4e14bbc
Showing 1 changed file with 13 additions and 1 deletion.
14 changes: 13 additions & 1 deletion libmscore/measure.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -972,13 +972,25 @@ void Measure::spatiumChanged(qreal /*oldValue*/, qreal /*newValue*/)

void Measure::moveTicks(int diff)
{
std::set<Tuplet*> tuplets;
setTick(tick() + diff);
for (Segment* segment = last(); segment; segment = segment->prev()) {
if (segment->segmentType() & (SegmentType::EndBarLine | SegmentType::TimeSigAnnounce))
segment->setTick(tick() + ticks());
else if (segment->isChordRestType())
break;
// Tuplet ticks are stored as absolute ticks, so they must be adjusted.
// But each tuplet must only be adjusted once.
for (Element* e : segment->elist())
if (e) {
ChordRest* cr = toChordRest(e);
Tuplet* tuplet = cr->tuplet();
if (tuplet && tuplets.count(tuplet) == 0) {
tuplet->setTick(tuplet->tick() + diff);
tuplets.insert(tuplet);
}
}
}
tuplets.clear();
}

//---------------------------------------------------------
Expand Down

0 comments on commit 4e14bbc

Please sign in to comment.