Skip to content

Commit fc3ea8e

Browse files
committed
fix #29931
1 parent 8019c28 commit fc3ea8e

File tree

4 files changed

+18
-11
lines changed

4 files changed

+18
-11
lines changed

libmscore/keysig.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,6 @@ void KeySig::layout()
246246
}
247247

248248
// compute bbox
249-
setbbox(QRectF());
250249
for (KeySym& ks : keySymbols) {
251250
ks.pos = ks.spos * _spatium;
252251
addbbox(symBbox(ks.sym).translated(ks.pos));
@@ -334,7 +333,7 @@ void KeySig::write(Xml& xml) const
334333
xml.tag("custom", _sig.customType());
335334
for (const KeySym& ks: keySymbols) {
336335
xml.stag("KeySym");
337-
xml.tag("sym", int(ks.sym));
336+
xml.tag("sym", Sym::id2name(ks.sym));
338337
xml.tag("pos", ks.spos);
339338
xml.etag();
340339
}
@@ -362,8 +361,14 @@ void KeySig::read(XmlReader& e)
362361
KeySym ks;
363362
while (e.readNextStartElement()) {
364363
const QStringRef& tag(e.name());
365-
if (tag == "sym")
366-
ks.sym = SymId(e.readInt());
364+
if (tag == "sym") {
365+
QString val(e.readElementText());
366+
bool valid;
367+
SymId id = SymId(val.toInt(&valid));
368+
if (!valid)
369+
id = Sym::name2id(val);
370+
ks.sym = id;
371+
}
367372
else if (tag == "pos")
368373
ks.spos = e.readPoint();
369374
else

libmscore/layout.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1525,7 +1525,8 @@ void Score::addSystemHeader(Measure* m, bool isFirstSystem)
15251525
switch (el->type()) {
15261526
case Element::Type::KEYSIG:
15271527
keysig = static_cast<KeySig*>(el);
1528-
keysig->changeKeySigEvent(keyIdx);
1528+
if (!keysig->isCustom())
1529+
keysig->changeKeySigEvent(keyIdx);
15291530
break;
15301531
case Element::Type::CLEF:
15311532
clef = static_cast<Clef*>(el);
@@ -1554,7 +1555,7 @@ void Score::addSystemHeader(Measure* m, bool isFirstSystem)
15541555
}
15551556
else if (!needKeysig && keysig)
15561557
undoRemoveElement(keysig);
1557-
else if (keysig && keysig->keySigEvent() != keyIdx)
1558+
else if (keysig && !keysig->isCustom() && keysig->keySigEvent() != keyIdx)
15581559
undo(new ChangeKeySig(keysig, keyIdx, keysig->showCourtesy()));
15591560

15601561
bool needClef = isFirstSystem || styleB(StyleIdx::genClef);

libmscore/measure.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2085,7 +2085,7 @@ void Measure::read(XmlReader& e, int staffIdx)
20852085
ks->setTrack(e.track());
20862086
ks->read(e);
20872087
int curTick = e.tick();
2088-
if (ks->key() == Key::C && curTick == 0) {
2088+
if (!ks->isCustom() && ks->key() == Key::C && curTick == 0) {
20892089
// ignore empty key signature
20902090
qDebug("remove keysig c at tick 0");
20912091
delete ks;

mscore/debugger/debugger.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2467,11 +2467,12 @@ void KeySigView::setElement(Element* e)
24672467
KeySig* ks = static_cast<KeySig*>(e);
24682468
ShowElementBase::setElement(e);
24692469

2470+
KeySigEvent ev = ks->keySigEvent();
24702471
keysig.showCourtesySig->setChecked(ks->showCourtesy());
2471-
keysig.accidentalType->setValue(int(ks->keySigEvent().key()));
2472-
keysig.customType->setValue(ks->keySigEvent().customType());
2473-
keysig.custom->setChecked(ks->keySigEvent().custom());
2474-
keysig.invalid->setChecked(ks->keySigEvent().invalid());
2472+
keysig.accidentalType->setValue(int(ev.key()));
2473+
keysig.customType->setValue(ev.customType());
2474+
keysig.custom->setChecked(ev.custom());
2475+
keysig.invalid->setChecked(ev.invalid());
24752476
}
24762477

24772478
//---------------------------------------------------------

0 commit comments

Comments
 (0)