From 33131b56091c3b59553af8da0d2c2a997abc6aad Mon Sep 17 00:00:00 2001 From: Igor Korsukov Date: Fri, 5 Feb 2021 15:06:05 +0200 Subject: [PATCH] ported #7063, #7124: Solve brace scaling issues --- src/libmscore/bracket.cpp | 10 +++-- src/libmscore/bracket.h | 1 + src/libmscore/style.cpp | 6 +-- src/libmscore/sym.h | 2 +- src/palette/internal/palette/palettetree.cpp | 40 ++++++++++++++++++++ src/palette/internal/palette/palettetree.h | 2 + 6 files changed, 54 insertions(+), 7 deletions(-) diff --git a/src/libmscore/bracket.cpp b/src/libmscore/bracket.cpp index d4a454df69..5d29760e46 100644 --- a/src/libmscore/bracket.cpp +++ b/src/libmscore/bracket.cpp @@ -114,11 +114,15 @@ void Bracket::setStaffSpan(int a, int b) _lastStaff = b; if (bracketType() == BracketType::BRACE - && score()->styleSt(Sid::MusicalSymbolFont) != "Emmentaler" - && score()->styleSt(Sid::MusicalSymbolFont) != "Gonville") { + && score()->styleSt(Sid::MusicalSymbolFont) != "Emmentaler" && score()->styleSt(Sid::MusicalSymbolFont) != "Gonville") { int v = _lastStaff - _firstStaff + 1; + if (score()->styleSt(Sid::MusicalSymbolFont) == "Leland") { + v = qMin(4, v); + } // total default height of a system of n staves / height of a 5 line staff - _magx = v + ((v - 1) * score()->styleS(Sid::akkoladeDistance).val() / 4.0); + qreal dist = score()->enableVerticalSpread() ? score()->styleS(Sid::maxAkkoladeDistance).val() : score()->styleS( + Sid::akkoladeDistance).val(); + _magx = v + ((v - 1) * dist / 4.0); if (v == 1) { _braceSymbol = SymId::braceSmall; } else if (v <= 2) { diff --git a/src/libmscore/bracket.h b/src/libmscore/bracket.h index 370830d176..941fd3e56f 100644 --- a/src/libmscore/bracket.h +++ b/src/libmscore/bracket.h @@ -63,6 +63,7 @@ public: void setStaffSpan(int a, int b); SymId braceSymbol() const { return _braceSymbol; } + void setBraceSymbol(const SymId& sym) { _braceSymbol = sym; } int column() const { return _bi->column(); } int span() const { return _bi->bracketSpan(); } qreal magx() const { return _magx; } diff --git a/src/libmscore/style.cpp b/src/libmscore/style.cpp index 3d1c3de5c6..edf941852e 100644 --- a/src/libmscore/style.cpp +++ b/src/libmscore/style.cpp @@ -668,7 +668,7 @@ static const StyleType styleTypes[] { { Sid::subTitleFrameBgColor, "subTitleFrameBgColor", QColor(255, 255, 255, 0) }, { Sid::composerFontFace, "composerFontFace", "FreeSerif" }, - { Sid::composerFontSize, "composerFontSize", 12.0 }, + { Sid::composerFontSize, "composerFontSize", 11.0 }, { Sid::composerFontSpatiumDependent, "composerFontSpatiumDependent", false }, { Sid::composerFontStyle, "composerFontStyle", int(FontStyle::Normal) }, { Sid::composerColor, "composerColor", QColor(0, 0, 0, 255) }, @@ -684,7 +684,7 @@ static const StyleType styleTypes[] { { Sid::composerFrameBgColor, "composerFrameBgColor", QColor(255, 255, 255, 0) }, { Sid::lyricistFontFace, "lyricistFontFace", "FreeSerif" }, - { Sid::lyricistFontSize, "lyricistFontSize", 12.0 }, + { Sid::lyricistFontSize, "lyricistFontSize", 11.0 }, { Sid::lyricistFontSpatiumDependent, "lyricistFontSpatiumDependent", false }, { Sid::lyricistFontStyle, "lyricistFontStyle", int(FontStyle::Normal) }, { Sid::lyricistColor, "lyricistColor", QColor(0, 0, 0, 255) }, @@ -1018,7 +1018,7 @@ static const StyleType styleTypes[] { { Sid::frameFrameBgColor, "frameFrameBgColor", QColor(255, 255, 255, 0) }, { Sid::textLineFontFace, "textLineFontFace", "FreeSerif" }, - { Sid::textLineFontSize, "textLineFontSize", 12.0 }, + { Sid::textLineFontSize, "textLineFontSize", 11.0 }, { Sid::textLineFontSpatiumDependent, "textLineFontSpatiumDependent", true }, { Sid::textLineFontStyle, "textLineFontStyle", int(FontStyle::Normal) }, { Sid::textLineColor, "textLineColor", QColor(0, 0, 0, 255) }, diff --git a/src/libmscore/sym.h b/src/libmscore/sym.h index dc5ae42a5f..e4b8fb6c35 100644 --- a/src/libmscore/sym.h +++ b/src/libmscore/sym.h @@ -3052,7 +3052,7 @@ protected: public: Sym() { } - bool isValid() const { return _code != -1; } + bool isValid() const { return _code != -1 && _bbox.isValid(); } void setSymList(const std::vector& sl) { _ids = sl; } const std::vector& symList() const { return _ids; } diff --git a/src/palette/internal/palette/palettetree.cpp b/src/palette/internal/palette/palettetree.cpp index cc1e1ab3e5..622ad13fd3 100644 --- a/src/palette/internal/palette/palettetree.cpp +++ b/src/palette/internal/palette/palettetree.cpp @@ -32,6 +32,8 @@ #include "libmscore/mscore.h" #include "libmscore/score.h" #include "libmscore/textbase.h" +#include "libmscore/element.h" +#include "libmscore/bracket.h" #include "thirdparty/qzip/qzipreader_p.h" #include "thirdparty/qzip/qzipwriter_p.h" @@ -443,6 +445,12 @@ bool PalettePanel::read(XmlReader& e) if (!cell->read(e)) { continue; } + + auto cellHandler = cellHandlerByPaletteType(_type); + if (cellHandler) { + cellHandler(cell.get()); + } + cells.push_back(cell); } else { e.unknown(); @@ -695,6 +703,12 @@ PaletteCell* PalettePanel::insert(int idx, Element* e, const QString& name, qrea e->layout(); // layout may be important for comparing cells, e.g. filtering "More" popup content } PaletteCell* cell = new PaletteCell(std::shared_ptr(e), name, mag); + + auto cellHandler = cellHandlerByPaletteType(_type); + if (cellHandler) { + cellHandler(cell); + } + cells.emplace(cells.begin() + idx, cell); return cell; } @@ -709,6 +723,12 @@ PaletteCell* PalettePanel::append(Element* e, const QString& name, qreal mag) e->layout(); // layout may be important for comparing cells, e.g. filtering "More" popup content } PaletteCell* cell = new PaletteCell(std::shared_ptr(e), name, mag); + + auto cellHandler = cellHandlerByPaletteType(_type); + if (cellHandler) { + cellHandler(cell); + } + cells.emplace_back(cell); return cell; } @@ -920,6 +940,26 @@ PalettePanel::Type PalettePanel::guessType() const return Type::Custom; } +std::function PalettePanel::cellHandlerByPaletteType(const PalettePanel::Type& type) const +{ + switch (type) { + case Type::Bracket: return [](PaletteCell* cellPtr) { + if (!cellPtr || !cellPtr->element || !cellPtr->element.get()->isBracket()) { + return; + } + + Bracket* bracket = toBracket(cellPtr->element.get()); + + if (bracket->bracketType() == BracketType::BRACE) { + bracket->setStaffSpan(0, 1); + cellPtr->mag = 1.2; + } + }; + default: + return nullptr; + } +} + //--------------------------------------------------------- // PalettePanel::contentType /// Returns palette type if it is defined or deduces it diff --git a/src/palette/internal/palette/palettetree.h b/src/palette/internal/palette/palettetree.h index 2a67e1b83b..875530b55d 100644 --- a/src/palette/internal/palette/palettetree.h +++ b/src/palette/internal/palette/palettetree.h @@ -20,6 +20,7 @@ #ifndef __PALETTETREE_H__ #define __PALETTETREE_H__ +#include #include #include "libmscore/element.h" @@ -173,6 +174,7 @@ private: bool _expanded = false; Type guessType() const; + std::function cellHandlerByPaletteType(const Type& type) const; void showWritingPaletteError(const QString& path) const;