Skip to content

Commit

Permalink
Fix #316504: Import Fretboard Diagrams Corrections
Browse files Browse the repository at this point in the history
Duplicate of musescore#7455, resp. backport of musescore#8014
  • Loading branch information
worldwideweary authored and Jojo-Schmitz committed Jul 27, 2021
1 parent 5b15098 commit 12566a5
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 22 deletions.
5 changes: 4 additions & 1 deletion importexport/musicxml/importmxmlpass2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4939,8 +4939,11 @@ FretDiagram* MusicXMLParserPass2::frame()
if (string > 0) {
if (fret == 0)
fd->setMarker(actualString, FretMarkerType::CIRCLE);
else if (fret > 0)
else if (fret > 0) {
if (fd->marker(actualString).mtype == FretMarkerType::CROSS)
fd->setMarker(actualString, FretMarkerType::NONE);
fd->setDot(actualString, fret, true);
}
}
else
_logger->logError(QString("FretDiagram::readMusicXML: illegal frame-note string %1").arg(string), &_e);
Expand Down
42 changes: 21 additions & 21 deletions libmscore/fret.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ void FretDiagram::init(StringData* stringData, Chord* chord)
if (stringData->convertPitch(note->pitch(), chord->staff(), chord->segment()->tick(), &string, &fret))
setDot(string, fret);
}
_maxFrets = stringData->frets();
_frets = stringData->frets();
}
else
_maxFrets = 6;
Expand Down Expand Up @@ -1290,27 +1290,27 @@ void FretDiagram::writeMusicXML(XmlWriter& xml) const
xml.tag("fret", "0");
xml.etag();
}
else {
// Write dots
for (auto const& d : dot(i)) {
if (!d.exists())
continue;
xml.stag("frame-note");
xml.tag("string", mxmlString);
xml.tag("fret", d.fret);
// TODO: write fingerings

// Also write barre if it starts at this dot
if (std::find(bStarts.begin(), bStarts.end(), d.fret) != bStarts.end()) {
xml.tagE("barre type=\"start\"");
bStarts.erase(std::remove(bStarts.begin(), bStarts.end(), d.fret), bStarts.end());
}
if (std::find(bEnds.begin(), bEnds.end(), d.fret) != bEnds.end()) {
xml.tagE("barre type=\"stop\"");
bEnds.erase(std::remove(bEnds.begin(), bEnds.end(), d.fret), bEnds.end());
}
xml.etag();

// Markers may exists alongside with dots
// Write dots
for (auto const& d : dot(i)) {
if (!d.exists())
continue;
xml.stag("frame-note");
xml.tag("string", mxmlString);
xml.tag("fret", d.fret);
// TODO: write fingerings

// Also write barre if it starts at this dot
if (std::find(bStarts.begin(), bStarts.end(), d.fret) != bStarts.end()) {
xml.tagE("barre type=\"start\"");
bStarts.erase(std::remove(bStarts.begin(), bStarts.end(), d.fret), bStarts.end());
}
if (std::find(bEnds.begin(), bEnds.end(), d.fret) != bEnds.end()) {
xml.tagE("barre type=\"stop\"");
bEnds.erase(std::remove(bEnds.begin(), bEnds.end(), d.fret), bEnds.end());
}
xml.etag();
}

// Write unwritten barres
Expand Down

0 comments on commit 12566a5

Please sign in to comment.