Skip to content

Commit cd8f780

Browse files
committed
Refactor: move mandatory migrations into EngravingCompat
1 parent 5ab5e82 commit cd8f780

File tree

8 files changed

+62
-137
lines changed

8 files changed

+62
-137
lines changed

src/engraving/compat/engravingcompat.cpp

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,29 @@ void EngravingCompat::doPreLayoutCompatIfNeeded(MasterScore* score)
6565
undoStaffTextExcludeFromPart(score);
6666
}
6767
}
68+
69+
if (mscVersion < 400) {
70+
migrateStyleSettingsForPre400(score);
71+
}
72+
}
73+
74+
void EngravingCompat::migrateStyleSettingsForPre400(MasterScore* masterScore)
75+
{
76+
// TODO: move to style compat reading when we have it
77+
MStyle& style = masterScore->style();
78+
const double sp = style.spatium();
79+
style.set(Sid::dynamicsFontSize, 10.0);
80+
double doubleBarDistance = style.styleAbsolute(Sid::doubleBarDistance);
81+
doubleBarDistance -= style.styleAbsolute(Sid::doubleBarWidth);
82+
style.set(Sid::doubleBarDistance, doubleBarDistance / sp);
83+
double endBarDistance = style.styleAbsolute(Sid::endBarDistance);
84+
endBarDistance -= (style.styleAbsolute(Sid::barWidth) + style.styleAbsolute(Sid::endBarWidth)) / 2;
85+
style.set(Sid::endBarDistance, endBarDistance / sp);
86+
double repeatBarlineDotSeparation = style.styleAbsolute(Sid::repeatBarlineDotSeparation);
87+
double dotWidth = masterScore->engravingFont()->width(SymId::repeatDot, 1.0);
88+
repeatBarlineDotSeparation -= (style.styleAbsolute(Sid::barWidth) + dotWidth) / 2;
89+
style.set(Sid::repeatBarlineDotSeparation, repeatBarlineDotSeparation / sp);
90+
style.set(Sid::measureSpacing, DefaultStyle::defaultStyle().value(Sid::measureSpacing));
6891
}
6992

7093
void EngravingCompat::correctPedalEndPoints(MasterScore* score)
@@ -295,6 +318,12 @@ void EngravingCompat::doPostLayoutCompatIfNeeded(MasterScore* score)
295318

296319
int mscVersion = score->mscVersion();
297320

321+
if (mscVersion < 300) {
322+
resetAllElementsPositions(score);
323+
resetCrossBeams(score);
324+
needRelayout = true;
325+
}
326+
298327
if (mscVersion < 440) {
299328
needRelayout |= relayoutUserModifiedCrossStaffBeams(score);
300329
}
@@ -304,6 +333,31 @@ void EngravingCompat::doPostLayoutCompatIfNeeded(MasterScore* score)
304333
}
305334
}
306335

336+
void EngravingCompat::resetAllElementsPositions(MasterScore* score)
337+
{
338+
score->scanElements([](EngravingItem* e) {
339+
if (e->generated()) {
340+
return;
341+
}
342+
e->resetProperty(Pid::AUTOPLACE);
343+
e->resetProperty(Pid::OFFSET);
344+
e->resetProperty(Pid::LEADING_SPACE);
345+
e->setOffsetChanged(false);
346+
if (e->isSpanner()) {
347+
e->resetProperty(Pid::OFFSET2);
348+
}
349+
});
350+
}
351+
352+
void EngravingCompat::resetCrossBeams(MasterScore* score)
353+
{
354+
score->scanElements([](EngravingItem* e) {
355+
if (e->isBeam() && toBeam(e)->fullCross()) {
356+
e->reset();
357+
}
358+
});
359+
}
360+
307361
bool EngravingCompat::relayoutUserModifiedCrossStaffBeams(MasterScore* score)
308362
{
309363
if (score->mscVersion() >= 440) {

src/engraving/compat/engravingcompat.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class EngravingCompat
3434
static void doPostLayoutCompatIfNeeded(MasterScore* score);
3535

3636
private:
37+
static void migrateStyleSettingsForPre400(MasterScore* masterScore);
3738
static void correctPedalEndPoints(MasterScore* score);
3839
static void undoStaffTextExcludeFromPart(MasterScore* masterScore);
3940
static void migrateDynamicPosOnVocalStaves(MasterScore* masterScore);
@@ -44,5 +45,8 @@ class EngravingCompat
4445
static void migrateNoteParens(MasterScore* masterScore);
4546

4647
static bool relayoutUserModifiedCrossStaffBeams(MasterScore* score);
48+
49+
static void resetAllElementsPositions(MasterScore* score);
50+
static void resetCrossBeams(MasterScore* score);
4751
};
4852
} // namespace mu::engraving::compat

src/engraving/dom/score.cpp

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5977,16 +5977,6 @@ void Score::doLayoutRange(const Fraction& st, const Fraction& et)
59775977
}
59785978

59795979
renderer()->layoutScore(this, start, end);
5980-
5981-
if (m_resetAutoplace) {
5982-
m_resetAutoplace = false;
5983-
resetAutoplace();
5984-
}
5985-
5986-
if (m_resetCrossBeams) {
5987-
m_resetCrossBeams = false;
5988-
resetCrossBeams();
5989-
}
59905980
}
59915981

59925982
void Score::createPaddingTable()

src/engraving/dom/score.h

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -379,16 +379,9 @@ class Score : public EngravingObject, public muse::Contextable
379379
void removeStaff(Staff*);
380380
void addMeasure(MeasureBase*, MeasureBase*);
381381
void linkMeasures(Score* score);
382-
void setResetAutoplace() { m_resetAutoplace = true; }
383-
void setResetCrossBeams() { m_resetCrossBeams = true; }
384-
385382
Excerpt* excerpt() { return m_excerpt; }
386383
void setExcerpt(Excerpt* e) { m_excerpt = e; }
387384

388-
// methods for resetting elements for pre-4.0 score migration
389-
void resetAutoplace();
390-
void resetCrossBeams();
391-
392385
void cmdAddBracket();
393386
void cmdToggleParentheses();
394387
void cmdToggleParentheses(EngravingItem* el);
@@ -418,7 +411,7 @@ class Score : public EngravingObject, public muse::Contextable
418411
void cmdAddStretch(double);
419412
void cmdAddGrace(NoteType, int);
420413
void cmdResetNoteAndRestGroupings();
421-
void cmdResetAllPositions(bool undoable = true);
414+
422415
void cmdDoubleDuration() { cmdIncDecDuration(-1, false); }
423416
void cmdHalfDuration() { cmdIncDecDuration(1, false); }
424417
void cmdIncDurationDotted() { cmdIncDecDuration(-1, true); }
@@ -1215,8 +1208,7 @@ class Score : public EngravingObject, public muse::Contextable
12151208
ShowAnchors m_showAnchors;
12161209

12171210
ScoreOrder m_scoreOrder; // used for score ordering
1218-
bool m_resetAutoplace = false;
1219-
bool m_resetCrossBeams = false;
1211+
12201212
int m_mscVersion = Constants::MSC_VERSION; // version of current loading *.msc file
12211213

12221214
bool m_isOpen = false;

src/engraving/editing/cmd.cpp

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -2897,44 +2897,6 @@ void Score::cmdResetNoteAndRestGroupings()
28972897
selection().updateSelectedElements();
28982898
}
28992899

2900-
static void resetBeamOffSet(EngravingItem* e)
2901-
{
2902-
// Reset completely cross staff beams from MU1&2
2903-
if (e->isBeam() && toBeam(e)->fullCross()) {
2904-
e->reset();
2905-
}
2906-
}
2907-
2908-
//---------------------------------------------------------
2909-
// cmdResetAllPositions
2910-
//---------------------------------------------------------
2911-
void Score::cmdResetAllPositions(bool undoable)
2912-
{
2913-
TRACEFUNC;
2914-
2915-
if (undoable) {
2916-
startCmd(TranslatableString("undoableAction", "Reset all positions"));
2917-
}
2918-
resetAutoplace();
2919-
if (undoable) {
2920-
endCmd();
2921-
}
2922-
}
2923-
2924-
void Score::resetAutoplace()
2925-
{
2926-
TRACEFUNC;
2927-
2928-
scanElements(resetElementPosition);
2929-
}
2930-
2931-
void Score::resetCrossBeams()
2932-
{
2933-
TRACEFUNC;
2934-
2935-
scanElements(resetBeamOffSet);
2936-
}
2937-
29382900
//---------------------------------------------------------
29392901
// move
29402902
// move current selection

src/engraving/tests/readwriteundoreset_tests.cpp

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -35,28 +35,6 @@ class Engraving_ReadWriteUndoResetTests : public ::testing::Test
3535
{
3636
};
3737

38-
TEST_F(Engraving_ReadWriteUndoResetTests, testReadWriteResetPositions)
39-
{
40-
std::vector<const char16_t*> files = {
41-
u"barlines",
42-
u"slurs",
43-
u"mmrestBarlineTextLinks" // see issue #296426
44-
};
45-
46-
for (const char16_t* file : files) {
47-
String readFile(RWUNDORESET_DATA_DIR + file + u".mscx");
48-
String writeFile(String(file) + u"-undoreset-test.mscx");
49-
50-
MasterScore* score = ScoreRW::readScore(readFile);
51-
EXPECT_TRUE(score);
52-
score->cmdResetAllPositions();
53-
score->undoRedo(/* undo */ true, nullptr);
54-
EXPECT_TRUE(ScoreComp::saveCompareScore(score, writeFile, readFile));
55-
56-
delete score;
57-
}
58-
}
59-
6038
//---------------------------------------------------------
6139
// testMMRestLinksRecreateMMRest
6240
/// For barlines links with MM rests a separate test is

src/project/internal/projectmigrator.cpp

Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ Ret ProjectMigrator::migrateEngravingProjectIfNeed(engraving::EngravingProjectPt
7171
//! When migrating, the version becomes the current one, so remember the version of the default style before migrating
7272
project->masterScore()->style().setDefaultStyleVersion(ReadStyleHook::styleDefaultByMscVersion(project->mscVersion()));
7373
MigrationType migrationType = migrationTypeFromMscVersion(project->mscVersion());
74-
m_resetStyleSettings = true;
7574

7675
MigrationOptions migrationOptions = configuration()->migrationOptions(migrationType);
7776
if (migrationOptions.isAskAgain) {
@@ -135,33 +134,6 @@ Ret ProjectMigrator::askAboutMigration(MigrationOptions& out, const QString& app
135134
return true;
136135
}
137136

138-
void ProjectMigrator::resetStyleSettings(mu::engraving::MasterScore* score)
139-
{
140-
// there are a few things that need to be updated no matter which version the score is from (#10499)
141-
// primarily, the differences made concerning barline thickness and distance
142-
// these updates take place no matter whether or not the other migration options are checked
143-
qreal sp = score->style().spatium();
144-
mu::engraving::MStyle* style = &score->style();
145-
style->set(mu::engraving::Sid::dynamicsFontSize, 10.0);
146-
qreal doubleBarDistance = style->styleAbsolute(mu::engraving::Sid::doubleBarDistance);
147-
doubleBarDistance -= style->styleAbsolute(mu::engraving::Sid::doubleBarWidth);
148-
style->set(mu::engraving::Sid::doubleBarDistance, doubleBarDistance / sp);
149-
qreal endBarDistance = style->styleAbsolute(mu::engraving::Sid::endBarDistance);
150-
endBarDistance -= (style->styleAbsolute(mu::engraving::Sid::barWidth) + style->styleAbsolute(mu::engraving::Sid::endBarWidth)) / 2;
151-
style->set(mu::engraving::Sid::endBarDistance, endBarDistance / sp);
152-
qreal repeatBarlineDotSeparation = style->styleAbsolute(mu::engraving::Sid::repeatBarlineDotSeparation);
153-
qreal dotWidth = score->engravingFont()->width(mu::engraving::SymId::repeatDot, 1.0);
154-
repeatBarlineDotSeparation -= (style->styleAbsolute(mu::engraving::Sid::barWidth) + dotWidth) / 2;
155-
style->set(mu::engraving::Sid::repeatBarlineDotSeparation, repeatBarlineDotSeparation / sp);
156-
score->resetStyleValue(mu::engraving::Sid::measureSpacing);
157-
}
158-
159-
bool ProjectMigrator::resetCrossBeams(engraving::MasterScore* score)
160-
{
161-
score->setResetCrossBeams();
162-
return true;
163-
}
164-
165137
Ret ProjectMigrator::migrateProject(engraving::EngravingProjectPtr project, const MigrationOptions& opt)
166138
{
167139
TRACEFUNC;
@@ -176,34 +148,20 @@ Ret ProjectMigrator::migrateProject(engraving::EngravingProjectPtr project, cons
176148
bool ok = true;
177149
if (opt.isApplyLeland) {
178150
ok = applyLelandStyle(score);
179-
m_resetStyleSettings = false;
180151
}
181152

182153
if (ok && opt.isApplyEdwin) {
183154
ok = applyEdwinStyle(score);
184-
m_resetStyleSettings = false;
185155
}
186156

187157
if (ok && opt.isRemapPercussion) {
188158
MdlMigrator(score).remapPercussion();
189159
}
190160

191-
if (ok && score->mscVersion() < 300) {
192-
ok = resetAllElementsPositions(score);
193-
}
194-
195-
if (ok && score->mscVersion() <= 206) {
196-
ok = resetCrossBeams(score);
197-
}
198-
199161
if (ok && score->mscVersion() != mu::engraving::Constants::MSC_VERSION) {
200162
score->undo(new mu::engraving::ChangeMetaText(score, u"mscVersion", String::fromAscii(mu::engraving::Constants::MSC_VERSION_STR)));
201163
}
202164

203-
if (ok && m_resetStyleSettings) {
204-
resetStyleSettings(score);
205-
score->setLayoutAll();
206-
}
207165
score->endCmd();
208166

209167
return ok ? make_ret(Ret::Code::Ok) : make_ret(Ret::Code::InternalError);
@@ -232,9 +190,3 @@ bool ProjectMigrator::applyEdwinStyle(mu::engraving::MasterScore* score)
232190

233191
return score->loadStyle(styleFile, /*ign*/ false, /*overlap*/ true);
234192
}
235-
236-
bool ProjectMigrator::resetAllElementsPositions(mu::engraving::MasterScore* score)
237-
{
238-
score->setResetAutoplace();
239-
return true;
240-
}

src/project/internal/projectmigrator.h

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
* You should have received a copy of the GNU General Public License
2020
* along with this program. If not, see <https://www.gnu.org/licenses/>.
2121
*/
22-
#ifndef MU_PROJECT_PROJECTMIGRATOR_H
23-
#define MU_PROJECT_PROJECTMIGRATOR_H
22+
23+
#pragma once
2424

2525
#include "iprojectmigrator.h"
2626

@@ -49,12 +49,5 @@ class ProjectMigrator : public IProjectMigrator, public muse::Contextable
4949

5050
bool applyLelandStyle(mu::engraving::MasterScore* score);
5151
bool applyEdwinStyle(mu::engraving::MasterScore* score);
52-
bool resetAllElementsPositions(mu::engraving::MasterScore* score);
53-
bool resetCrossBeams(mu::engraving::MasterScore* score);
54-
void resetStyleSettings(mu::engraving::MasterScore* score);
55-
56-
bool m_resetStyleSettings{ false };
5752
};
5853
}
59-
60-
#endif // MU_PROJECT_PROJECTMIGRATOR_H

0 commit comments

Comments
 (0)