Skip to content

Commit

Permalink
fix #29931
Browse files Browse the repository at this point in the history
  • Loading branch information
wschweer committed Oct 23, 2014
1 parent 8019c28 commit fc3ea8e
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 11 deletions.
13 changes: 9 additions & 4 deletions libmscore/keysig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,6 @@ void KeySig::layout()
}

// compute bbox
setbbox(QRectF());
for (KeySym& ks : keySymbols) {
ks.pos = ks.spos * _spatium;
addbbox(symBbox(ks.sym).translated(ks.pos));
Expand Down Expand Up @@ -334,7 +333,7 @@ void KeySig::write(Xml& xml) const
xml.tag("custom", _sig.customType());
for (const KeySym& ks: keySymbols) {
xml.stag("KeySym");
xml.tag("sym", int(ks.sym));
xml.tag("sym", Sym::id2name(ks.sym));
xml.tag("pos", ks.spos);
xml.etag();
}
Expand Down Expand Up @@ -362,8 +361,14 @@ void KeySig::read(XmlReader& e)
KeySym ks;
while (e.readNextStartElement()) {
const QStringRef& tag(e.name());
if (tag == "sym")
ks.sym = SymId(e.readInt());
if (tag == "sym") {
QString val(e.readElementText());
bool valid;
SymId id = SymId(val.toInt(&valid));
if (!valid)
id = Sym::name2id(val);
ks.sym = id;
}
else if (tag == "pos")
ks.spos = e.readPoint();
else
Expand Down
5 changes: 3 additions & 2 deletions libmscore/layout.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1525,7 +1525,8 @@ void Score::addSystemHeader(Measure* m, bool isFirstSystem)
switch (el->type()) {
case Element::Type::KEYSIG:
keysig = static_cast<KeySig*>(el);
keysig->changeKeySigEvent(keyIdx);
if (!keysig->isCustom())
keysig->changeKeySigEvent(keyIdx);
break;
case Element::Type::CLEF:
clef = static_cast<Clef*>(el);
Expand Down Expand Up @@ -1554,7 +1555,7 @@ void Score::addSystemHeader(Measure* m, bool isFirstSystem)
}
else if (!needKeysig && keysig)
undoRemoveElement(keysig);
else if (keysig && keysig->keySigEvent() != keyIdx)
else if (keysig && !keysig->isCustom() && keysig->keySigEvent() != keyIdx)
undo(new ChangeKeySig(keysig, keyIdx, keysig->showCourtesy()));

bool needClef = isFirstSystem || styleB(StyleIdx::genClef);
Expand Down
2 changes: 1 addition & 1 deletion libmscore/measure.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2085,7 +2085,7 @@ void Measure::read(XmlReader& e, int staffIdx)
ks->setTrack(e.track());
ks->read(e);
int curTick = e.tick();
if (ks->key() == Key::C && curTick == 0) {
if (!ks->isCustom() && ks->key() == Key::C && curTick == 0) {
// ignore empty key signature
qDebug("remove keysig c at tick 0");
delete ks;
Expand Down
9 changes: 5 additions & 4 deletions mscore/debugger/debugger.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2467,11 +2467,12 @@ void KeySigView::setElement(Element* e)
KeySig* ks = static_cast<KeySig*>(e);
ShowElementBase::setElement(e);

KeySigEvent ev = ks->keySigEvent();
keysig.showCourtesySig->setChecked(ks->showCourtesy());
keysig.accidentalType->setValue(int(ks->keySigEvent().key()));
keysig.customType->setValue(ks->keySigEvent().customType());
keysig.custom->setChecked(ks->keySigEvent().custom());
keysig.invalid->setChecked(ks->keySigEvent().invalid());
keysig.accidentalType->setValue(int(ev.key()));
keysig.customType->setValue(ev.customType());
keysig.custom->setChecked(ev.custom());
keysig.invalid->setChecked(ev.invalid());
}

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

0 comments on commit fc3ea8e

Please sign in to comment.