From 7442134eb10dca1dbc0355c1e6cb5b02f13db8b3 Mon Sep 17 00:00:00 2001 From: Joachim Schmitz Date: Mon, 6 Dec 2021 17:03:59 +0100 Subject: [PATCH] Fix #306189: Extend Tremolo palette to allow for "Divide measured tremolo by [2-4,6]", `tremoloDivisiDots[2-4,6]`, implemented as articulations, actually even as staccatos, but (currently) without any playback effect on tremolos (as 'normal' staccatos don't work on those either). --- src/engraving/libmscore/articulation.cpp | 14 +++++++++++++- src/engraving/types/symnames.cpp | 8 ++++---- src/palette/internal/palettecreator.cpp | 18 +++++++++++++++--- tools/fonttools/smufl2sym-in-trans.json | 4 ++++ 4 files changed, 36 insertions(+), 8 deletions(-) diff --git a/src/engraving/libmscore/articulation.cpp b/src/engraving/libmscore/articulation.cpp index 89b8b674cfd3e..27c02b8de1e1d 100644 --- a/src/engraving/libmscore/articulation.cpp +++ b/src/engraving/libmscore/articulation.cpp @@ -539,6 +539,12 @@ Articulation::AnchorGroup Articulation::anchorGroup(SymId symId) case SymId::luteFingeringRHThird: return AnchorGroup::LUTE_FINGERING; + case SymId::tremoloDivisiDots2: + case SymId::tremoloDivisiDots3: + case SymId::tremoloDivisiDots4: + case SymId::tremoloDivisiDots6: + return AnchorGroup::ARTICULATION; + default: break; } @@ -562,6 +568,10 @@ String Articulation::symId2ArticulationName(SymId symId) case SymId::articStaccatoAbove: case SymId::articStaccatoBelow: + case SymId::tremoloDivisiDots2: + case SymId::tremoloDivisiDots3: + case SymId::tremoloDivisiDots4: + case SymId::tremoloDivisiDots6: return u"staccato"; case SymId::articAccentStaccatoAbove: @@ -696,7 +706,9 @@ void Articulation::computeCategories() _symId == SymId::articStaccatoAbove || _symId == SymId::articStaccatoBelow || _symId == SymId::articMarcatoStaccatoAbove || _symId == SymId::articMarcatoStaccatoBelow || _symId == SymId::articTenutoStaccatoAbove || _symId == SymId::articTenutoStaccatoBelow - || _symId == SymId::articAccentStaccatoAbove || _symId == SymId::articAccentStaccatoBelow); + || _symId == SymId::articAccentStaccatoAbove || _symId == SymId::articAccentStaccatoBelow + || _symId == SymId::tremoloDivisiDots2 || _symId == SymId::tremoloDivisiDots3 + || _symId == SymId::tremoloDivisiDots4 || _symId == SymId::tremoloDivisiDots6); m_categories.setFlag(ArticulationCategory::ACCENT, _symId == SymId::articAccentAbove || _symId == SymId::articAccentBelow diff --git a/src/engraving/types/symnames.cpp b/src/engraving/types/symnames.cpp index bdda1f16f7be5..b3d94f9cd7f84 100644 --- a/src/engraving/types/symnames.cpp +++ b/src/engraving/types/symnames.cpp @@ -5879,10 +5879,10 @@ constexpr const std::array SymNames::s_ "Combining tremolo 3", "Combining tremolo 4", "Combining tremolo 5", - "Divide measured tremolo by 2", - "Divide measured tremolo by 3", - "Divide measured tremolo by 4", - "Divide measured tremolo by 6", + QT_TRANSLATE_NOOP("symUserNames", "Divide measured tremolo by 2"), + QT_TRANSLATE_NOOP("symUserNames", "Divide measured tremolo by 3"), + QT_TRANSLATE_NOOP("symUserNames", "Divide measured tremolo by 4"), + QT_TRANSLATE_NOOP("symUserNames", "Divide measured tremolo by 6"), "Fingered tremolo 1", "Fingered tremolo 2", "Fingered tremolo 3", diff --git a/src/palette/internal/palettecreator.cpp b/src/palette/internal/palettecreator.cpp index 5c81032962bcf..504c2fdd70833 100644 --- a/src/palette/internal/palettecreator.cpp +++ b/src/palette/internal/palettecreator.cpp @@ -637,6 +637,19 @@ PalettePtr PaletteCreator::newTremoloPalette() tremolo->setTremoloType(TremoloType(i)); sp->appendElement(tremolo, tremolo->subtypeUserName()); } + + static const SymIdList dots { + SymId::tremoloDivisiDots2, + SymId::tremoloDivisiDots3, + SymId::tremoloDivisiDots4, + SymId::tremoloDivisiDots6 + }; + // include additional symbol-based tremolo articulations, implemented as articulations + for (auto i : dots) { + auto s = Factory::makeArticulation(gpaletteScore->dummy()->chord()); + s->setSymId(i); + sp->appendElement(s, s->typeUserName()); + } return sp; } @@ -675,6 +688,7 @@ PalettePtr PaletteCreator::newArticulationsPalette(bool defaultPalette) auto slur = Factory::makeSlur(gpaletteScore->dummy()); sp->appendElement(slur, QT_TRANSLATE_NOOP("palette", "Slur")); + // do not include additional symbol-based fingerings (temporarily?) implemented as articulations static const SymIdList defaultArticulations { SymId::articAccentAbove, SymId::articStaccatoAbove, @@ -771,7 +785,6 @@ PalettePtr PaletteCreator::newOrnamentsPalette(bool defaultPalette) sp->setDrawGrid(true); sp->setVisible(false); - // do not include additional symbol-based fingerings (temporarily?) implemented as articulations static const SymIdList defaultOrnaments { SymId::ornamentTurnInverted, SymId::ornamentTurn, @@ -831,8 +844,7 @@ PalettePtr PaletteCreator::newAccordionPalette() sp->setDrawGrid(true); sp->setVisible(false); - // do not include additional symbol-based fingerings (temporarily?) implemented as articulations - static SymIdList art { + static const SymIdList art { SymId::accdnCombDot, SymId::accdnCombLH2RanksEmpty, SymId::accdnCombLH3RanksEmptySquare, diff --git a/tools/fonttools/smufl2sym-in-trans.json b/tools/fonttools/smufl2sym-in-trans.json index 52a87f8c784d2..ea166db612394 100644 --- a/tools/fonttools/smufl2sym-in-trans.json +++ b/tools/fonttools/smufl2sym-in-trans.json @@ -353,6 +353,10 @@ "timeSigCut2": null, "timeSigCut3": null, "timeSigCutCommon": null, + "tremoloDivisiDots2": null, + "tremoloDivisiDots3": null, + "tremoloDivisiDots4": null, + "tremoloDivisiDots6": null, "wiggleSawtooth": null, "wiggleSawtoothWide": null, "wiggleVibratoLargeFaster": null,