Skip to content

Commit

Permalink
Merge pull request #20533 from RomanPudashkin/repeats_fix_420
Browse files Browse the repository at this point in the history
repeats_fix_420
  • Loading branch information
RomanPudashkin committed Dec 18, 2023
2 parents f378202 + d43ada5 commit b6347a5
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 5 deletions.
21 changes: 17 additions & 4 deletions src/engraving/playback/playbackmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -541,7 +541,7 @@ bool PlaybackModel::hasToReloadTracks(const ScoreChangesRange& changesRange) con
return false;
}

bool PlaybackModel::hasToReloadScore(const std::unordered_set<ElementType>& changedTypes) const
bool PlaybackModel::hasToReloadScore(const ScoreChangesRange& changesRange) const
{
static const std::unordered_set<ElementType> REQUIRED_TYPES = {
ElementType::SCORE,
Expand All @@ -558,13 +558,26 @@ bool PlaybackModel::hasToReloadScore(const std::unordered_set<ElementType>& chan
};

for (const ElementType type : REQUIRED_TYPES) {
if (changedTypes.find(type) == changedTypes.cend()) {
if (changesRange.changedTypes.find(type) == changesRange.changedTypes.cend()) {
continue;
}

return true;
}

static const std::unordered_set<mu::engraving::Pid> REQUIRED_PROPERTIES {
mu::engraving::Pid::REPEAT_START,
mu::engraving::Pid::REPEAT_END,
mu::engraving::Pid::REPEAT_JUMP,
mu::engraving::Pid::REPEAT_COUNT,
};

for (const Pid pid: changesRange.changedPropertyIdSet) {
if (mu::contains(REQUIRED_PROPERTIES, pid)) {
return true;
}
}

return false;
}

Expand Down Expand Up @@ -747,7 +760,7 @@ PlaybackModel::TrackBoundaries PlaybackModel::trackBoundaries(const ScoreChanges
result.trackFrom = staff2track(changesRange.staffIdxFrom, 0);
result.trackTo = staff2track(changesRange.staffIdxTo, VOICES);

if (hasToReloadScore(changesRange.changedTypes) || !changesRange.isValidBoundary()) {
if (hasToReloadScore(changesRange) || !changesRange.isValidBoundary()) {
result.trackFrom = 0;
result.trackTo = m_score->ntracks();
}
Expand All @@ -763,7 +776,7 @@ PlaybackModel::TickBoundaries PlaybackModel::tickBoundaries(const ScoreChangesRa
result.tickTo = changesRange.tickTo;

if (hasToReloadTracks(changesRange)
|| hasToReloadScore(changesRange.changedTypes)
|| hasToReloadScore(changesRange)
|| !changesRange.isValidBoundary()) {
const Measure* lastMeasure = m_score->lastMeasure();
result.tickFrom = 0;
Expand Down
2 changes: 1 addition & 1 deletion src/engraving/playback/playbackmodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ class PlaybackModel : public async::Asyncable
const staff_idx_t staffIdx, ChangedTrackIdSet* trackChanges);

bool hasToReloadTracks(const ScoreChangesRange& changesRange) const;
bool hasToReloadScore(const std::unordered_set<ElementType>& changedTypes) const;
bool hasToReloadScore(const ScoreChangesRange& changesRange) const;

bool containsTrack(const InstrumentTrackId& trackId) const;
void clearExpiredTracks();
Expand Down

0 comments on commit b6347a5

Please sign in to comment.