LCOV - code coverage report
Current view: top level - src/engraving/rendering - paddingtable.cpp Coverage Total Hit
Test: filtered_coverage.info Lines: 99.3 % 303 301
Test Date: 2026-11-05 04:07:02

            Line data    Source code
       1              : /*
       2              :  * SPDX-License-Identifier: GPL-3.0-only
       3              :  * MuseScore-Studio-CLA-applies
       4              :  *
       5              :  * MuseScore Studio
       6              :  * Music Composition & Notation
       7              :  *
       8              :  * Copyright (C) 2023 MuseScore Limited and others
       9              :  *
      10              :  * This program is free software: you can redistribute it and/or modify
      11              :  * it under the terms of the GNU General Public License version 3 as
      12              :  * published by the Free Software Foundation.
      13              :  *
      14              :  * This program is distributed in the hope that it will be useful,
      15              :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      16              :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      17              :  * GNU General Public License for more details.
      18              :  *
      19              :  * You should have received a copy of the GNU General Public License
      20              :  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
      21              :  */
      22              : #include "paddingtable.h"
      23              : 
      24              : #include "dom/engravingitem.h"
      25              : #include "style/style.h"
      26              : #include "thirdparty/kors_logger/src/log_base.h"
      27              : 
      28              : using namespace mu::engraving;
      29              : 
      30         2792 : void PaddingTable::init(double minPadUnit)
      31              : {
      32         2792 :     PaddingTable& table = *this;
      33              : 
      34       432760 :     for (size_t i=0; i < TOT_ELEMENT_TYPES; ++i) {
      35     66645040 :         for (size_t j=0; j < TOT_ELEMENT_TYPES; ++j) {
      36     66215072 :             table[i][j] = minPadUnit;
      37              :         }
      38              :     }
      39         2792 : }
      40              : 
      41         2792 : void PaddingTable::update(const MStyle& style)
      42              : {
      43         2792 :     const double spatium = style.spatium();
      44         2792 :     const double minPadUnit = 0.1 * spatium;
      45         2792 :     init(minPadUnit);
      46              : 
      47         2792 :     const double ledgerPad = 0.25 * spatium;
      48         2792 :     const double ledgerLength = style.styleAbsolute(Sid::ledgerLineLength);
      49              : 
      50         2792 :     PaddingTable& table = *this;
      51              : 
      52              :     // NOTE: we don't set note-note padding to minNoteDistance
      53              :     // because there are cases when they should be allowed to get closer.
      54              :     // minNoteDistance is applied during the padding calculations.
      55         2792 :     table[ElementType::NOTE][ElementType::NOTE] = minPadUnit;
      56         2792 :     table[ElementType::NOTE][ElementType::LEDGER_LINE] = 0.35 * spatium;
      57         2792 :     table[ElementType::NOTE][ElementType::ACCIDENTAL]
      58         2792 :         = std::max(static_cast<double>(style.styleAbsolute(Sid::accidentalNoteDistance)), 0.35 * spatium);
      59         2792 :     table[ElementType::NOTE][ElementType::REST] = 0.5 * spatium;
      60         2792 :     table[ElementType::NOTE][ElementType::CLEF] = 0.8 * spatium;
      61         2792 :     table[ElementType::NOTE][ElementType::ARPEGGIO] = 0.6 * spatium;
      62         2792 :     table[ElementType::NOTE][ElementType::BAR_LINE] = style.styleAbsolute(Sid::noteBarDistance);
      63         2792 :     table[ElementType::NOTE][ElementType::KEYSIG] = 0.75 * spatium;
      64         2792 :     table[ElementType::NOTE][ElementType::TIMESIG] = 0.75 * spatium;
      65              : 
      66         2792 :     table[ElementType::LEDGER_LINE][ElementType::NOTE] = table[ElementType::NOTE][ElementType::LEDGER_LINE];
      67         2792 :     table[ElementType::LEDGER_LINE][ElementType::LEDGER_LINE] = ledgerPad;
      68         2792 :     table[ElementType::LEDGER_LINE][ElementType::ACCIDENTAL]
      69         2792 :         = std::max(static_cast<double>(style.styleAbsolute(
      70              :                                            Sid::accidentalNoteDistance)),
      71         2792 :                    table[ElementType::NOTE][ElementType::ACCIDENTAL] - ledgerLength / 2);
      72         2792 :     table[ElementType::LEDGER_LINE][ElementType::REST] = table[ElementType::LEDGER_LINE][ElementType::NOTE];
      73         2792 :     table[ElementType::LEDGER_LINE][ElementType::CLEF]
      74         2792 :         = std::max(table[ElementType::NOTE][ElementType::CLEF] - ledgerLength / 2, ledgerPad);
      75         2792 :     table[ElementType::LEDGER_LINE][ElementType::ARPEGGIO] = 0.5 * spatium;
      76         2792 :     table[ElementType::LEDGER_LINE][ElementType::BAR_LINE]
      77         2792 :         = std::max(table[ElementType::NOTE][ElementType::BAR_LINE] - ledgerLength, ledgerPad);
      78         2792 :     table[ElementType::LEDGER_LINE][ElementType::KEYSIG]
      79         2792 :         = std::max(table[ElementType::NOTE][ElementType::KEYSIG] - ledgerLength / 2, ledgerPad);
      80         2792 :     table[ElementType::LEDGER_LINE][ElementType::TIMESIG]
      81         2792 :         = std::max(table[ElementType::NOTE][ElementType::TIMESIG] - ledgerLength / 2, ledgerPad);
      82              : 
      83         2792 :     table[ElementType::HOOK][ElementType::NOTE] = 0.35 * spatium;
      84         2792 :     table[ElementType::HOOK][ElementType::LEDGER_LINE]
      85         2792 :         = std::max(table[ElementType::HOOK][ElementType::NOTE] - ledgerLength, ledgerPad);
      86         2792 :     table[ElementType::HOOK][ElementType::ACCIDENTAL] = 0.35 * spatium;
      87         2792 :     table[ElementType::HOOK][ElementType::REST] = table[ElementType::HOOK][ElementType::NOTE];
      88         2792 :     table[ElementType::HOOK][ElementType::CLEF] = 0.5 * spatium;
      89         2792 :     table[ElementType::HOOK][ElementType::ARPEGGIO] = 0.35 * spatium;
      90         2792 :     table[ElementType::HOOK][ElementType::BAR_LINE] = 1 * spatium;
      91         2792 :     table[ElementType::HOOK][ElementType::KEYSIG] = 1.15 * spatium;
      92         2792 :     table[ElementType::HOOK][ElementType::TIMESIG] = 1.15 * spatium;
      93              : 
      94         2792 :     table[ElementType::NOTEDOT][ElementType::NOTE] = std::max(style.styleAbsolute(Sid::dotNoteDistance), style.styleAbsolute(
      95              :                                                                   Sid::dotDotDistance));
      96         2792 :     table[ElementType::NOTEDOT][ElementType::LEDGER_LINE]
      97         2792 :         = std::max(table[ElementType::NOTEDOT][ElementType::NOTE] - ledgerLength, ledgerPad);
      98         2792 :     table[ElementType::NOTEDOT][ElementType::ACCIDENTAL] = 0.35 * spatium;
      99         2792 :     table[ElementType::NOTEDOT][ElementType::REST] = table[ElementType::NOTEDOT][ElementType::NOTE];
     100         2792 :     table[ElementType::NOTEDOT][ElementType::CLEF] = 1.0 * spatium;
     101         2792 :     table[ElementType::NOTEDOT][ElementType::ARPEGGIO] = 0.5 * spatium;
     102         2792 :     table[ElementType::NOTEDOT][ElementType::BAR_LINE] = 0.8 * spatium;
     103         2792 :     table[ElementType::NOTEDOT][ElementType::KEYSIG] = 1.35 * spatium;
     104         2792 :     table[ElementType::NOTEDOT][ElementType::TIMESIG] = 1.35 * spatium;
     105              : 
     106         2792 :     table[ElementType::REST][ElementType::NOTE] = table[ElementType::NOTE][ElementType::REST];
     107         2792 :     table[ElementType::REST][ElementType::LEDGER_LINE]
     108         2792 :         = std::max(table[ElementType::REST][ElementType::NOTE] - ledgerLength / 2, ledgerPad);
     109         2792 :     table[ElementType::REST][ElementType::ACCIDENTAL] = 0.45 * spatium;
     110         2792 :     table[ElementType::REST][ElementType::REST] = table[ElementType::REST][ElementType::NOTE];
     111         2792 :     table[ElementType::REST][ElementType::CLEF] = table[ElementType::NOTE][ElementType::CLEF];
     112         2792 :     table[ElementType::REST][ElementType::BAR_LINE] = 1.65 * spatium;
     113         2792 :     table[ElementType::REST][ElementType::KEYSIG] = 1.5 * spatium;
     114         2792 :     table[ElementType::REST][ElementType::TIMESIG] = 1.5 * spatium;
     115              : 
     116         2792 :     table[ElementType::CLEF][ElementType::NOTE] = style.styleAbsolute(Sid::clefKeyRightMargin);
     117         2792 :     table[ElementType::CLEF][ElementType::LEDGER_LINE]
     118         2792 :         = std::max(table[ElementType::CLEF][ElementType::NOTE] - ledgerLength / 2, ledgerPad);
     119         2792 :     table[ElementType::CLEF][ElementType::ACCIDENTAL] = 0.6 * spatium;
     120         2792 :     table[ElementType::CLEF][ElementType::REST] = table[ElementType::CLEF][ElementType::NOTE];
     121         2792 :     table[ElementType::CLEF][ElementType::CLEF] = 0.75 * spatium;
     122         2792 :     table[ElementType::CLEF][ElementType::ARPEGGIO] = 0.65 * spatium;
     123         2792 :     table[ElementType::CLEF][ElementType::BAR_LINE] = style.styleAbsolute(Sid::clefBarlineDistance);
     124         2792 :     table[ElementType::CLEF][ElementType::KEYSIG] = style.styleAbsolute(Sid::clefKeyDistance);
     125         2792 :     table[ElementType::CLEF][ElementType::TIMESIG] = style.styleAbsolute(Sid::clefTimesigDistance);
     126              : 
     127         2792 :     table[ElementType::BAR_LINE][ElementType::NOTE] = style.styleAbsolute(Sid::barNoteDistance);
     128         2792 :     table[ElementType::BAR_LINE][ElementType::LEDGER_LINE]
     129         2792 :         = std::max(table[ElementType::BAR_LINE][ElementType::NOTE] - ledgerLength, ledgerPad);
     130         2792 :     table[ElementType::BAR_LINE][ElementType::ACCIDENTAL] = style.styleAbsolute(Sid::barAccidentalDistance);
     131         2792 :     table[ElementType::BAR_LINE][ElementType::REST] = style.styleAbsolute(Sid::barNoteDistance);
     132         2792 :     table[ElementType::BAR_LINE][ElementType::CLEF] = style.styleAbsolute(Sid::clefLeftMargin);
     133         2792 :     table[ElementType::BAR_LINE][ElementType::ARPEGGIO] = 0.65 * spatium;
     134         2792 :     table[ElementType::BAR_LINE][ElementType::BAR_LINE] = 1.35 * spatium;
     135         2792 :     table[ElementType::BAR_LINE][ElementType::KEYSIG] = style.styleAbsolute(Sid::keysigLeftMargin);
     136         2792 :     table[ElementType::BAR_LINE][ElementType::TIMESIG] = style.styleAbsolute(Sid::timesigLeftMargin);
     137              : 
     138         2792 :     table[ElementType::KEYSIG][ElementType::NOTE] = 1.75 * spatium;
     139         2792 :     table[ElementType::KEYSIG][ElementType::LEDGER_LINE]
     140         2792 :         = std::max(table[ElementType::KEYSIG][ElementType::NOTE] - ledgerLength, ledgerPad);
     141         2792 :     table[ElementType::KEYSIG][ElementType::ACCIDENTAL] = 1.6 * spatium;
     142         2792 :     table[ElementType::KEYSIG][ElementType::REST] = table[ElementType::KEYSIG][ElementType::NOTE];
     143         2792 :     table[ElementType::KEYSIG][ElementType::CLEF] = 1.0 * spatium;
     144         2792 :     table[ElementType::KEYSIG][ElementType::ARPEGGIO] = 1.35 * spatium;
     145         2792 :     table[ElementType::KEYSIG][ElementType::BAR_LINE] = style.styleAbsolute(Sid::keyBarlineDistance);
     146         2792 :     table[ElementType::KEYSIG][ElementType::KEYSIG] = 1 * spatium;
     147         2792 :     table[ElementType::KEYSIG][ElementType::TIMESIG] = style.styleAbsolute(Sid::keyTimesigDistance);
     148              : 
     149         2792 :     table[ElementType::TIMESIG][ElementType::NOTE] = 1.35 * spatium;
     150         2792 :     table[ElementType::TIMESIG][ElementType::LEDGER_LINE]
     151         2792 :         = std::max(table[ElementType::TIMESIG][ElementType::NOTE] - ledgerLength, ledgerPad);
     152         2792 :     table[ElementType::TIMESIG][ElementType::ACCIDENTAL] = 0.8 * spatium;
     153         2792 :     table[ElementType::TIMESIG][ElementType::REST] = table[ElementType::TIMESIG][ElementType::NOTE];
     154         2792 :     table[ElementType::TIMESIG][ElementType::CLEF] = 1.0 * spatium;
     155         2792 :     table[ElementType::TIMESIG][ElementType::ARPEGGIO] = 1.35 * spatium;
     156         2792 :     table[ElementType::TIMESIG][ElementType::BAR_LINE] = style.styleAbsolute(Sid::timesigBarlineDistance);
     157         2792 :     table[ElementType::TIMESIG][ElementType::KEYSIG] = style.styleAbsolute(Sid::keyTimesigDistance);
     158         2792 :     table[ElementType::TIMESIG][ElementType::TIMESIG] = 1.0 * spatium;
     159              : 
     160              :     // Ambitus
     161         2792 :     table[ElementType::AMBITUS].fill(style.styleAbsolute(Sid::ambitusMargin));
     162       432760 :     for (auto& elem: table) {
     163       429968 :         elem[ElementType::AMBITUS] = style.styleAbsolute(Sid::ambitusMargin);
     164              :     }
     165              : 
     166         2792 :     table[ElementType::ARPEGGIO][ElementType::NOTE] = style.styleAbsolute(Sid::arpeggioNoteDistance);
     167         2792 :     table[ElementType::ARPEGGIO][ElementType::LEDGER_LINE] = 0.3 * spatium;
     168         2792 :     table[ElementType::ARPEGGIO][ElementType::ACCIDENTAL] = style.styleAbsolute(Sid::arpeggioAccidentalDistance);
     169              : 
     170         2792 :     double chordBracketDist = style.styleAbsolute(Sid::chordBracketNoteDistance);
     171         2792 :     table[ElementType::CHORD_BRACKET].fill(chordBracketDist);
     172       432760 :     for (auto& elem: table) {
     173       429968 :         elem[ElementType::CHORD_BRACKET] = elem[ElementType::ARPEGGIO];
     174              :     }
     175              : 
     176              :     // Breath
     177         2792 :     table[ElementType::BREATH].fill(1.0 * spatium);
     178       432760 :     for (auto& elem: table) {
     179       429968 :         elem[ElementType::BREATH] = 1.0 * spatium;
     180              :     }
     181              : 
     182              :     // Harmony
     183         2792 :     table[ElementType::BAR_LINE][ElementType::HARMONY] = 0.5 * style.styleAbsolute(Sid::harmonyHarmonyDistance);
     184         2792 :     table[ElementType::HARMONY][ElementType::HARMONY] = style.styleAbsolute(Sid::harmonyHarmonyDistance);
     185         2792 :     table[ElementType::HARMONY][ElementType::FRET_DIAGRAM] = 0.3 * spatium;
     186         2792 :     table[ElementType::FRET_DIAGRAM][ElementType::HARMONY] = 0.3 * spatium;
     187         2792 :     table[ElementType::FRET_DIAGRAM][ElementType::FRET_DIAGRAM] = 0.25 * spatium;
     188              : 
     189              :     // Chordlines
     190         2792 :     table[ElementType::CHORDLINE].fill(0.35 * spatium);
     191       432760 :     for (auto& elem: table) {
     192       429968 :         elem[ElementType::CHORDLINE] = 0.35 * spatium;
     193              :     }
     194         2792 :     table[ElementType::BAR_LINE][ElementType::CHORDLINE] = 0.65 * spatium;
     195         2792 :     table[ElementType::CHORDLINE][ElementType::BAR_LINE] = 0.65 * spatium;
     196              : 
     197              :     // For the x -> fingering padding use the same values as x -> accidental
     198       432760 :     for (auto& elem : table) {
     199       429968 :         elem[ElementType::FINGERING] = elem[ElementType::ACCIDENTAL];
     200              :     }
     201              : 
     202              :     // This is needed for beamlets, not beams themselves
     203         2792 :     table[ElementType::BEAM].fill(0.35 * spatium);
     204              : 
     205         2792 :     table[ElementType::TREMOLO_SINGLECHORD] = table[ElementType::BEAM];
     206              : 
     207         2792 :     double lyricsSpacing = style.styleAbsolute(Sid::lyricsMinDistance);
     208         2792 :     table[ElementType::LYRICS].fill(lyricsSpacing);
     209       432760 :     for (auto& elem : table) {
     210       429968 :         elem[ElementType::LYRICS] = lyricsSpacing;
     211              :     }
     212         2792 :     table[ElementType::NOTE][ElementType::LYRICS] = style.styleAbsolute(Sid::lyricsMelismaPad);
     213              : 
     214              :     // Accidental -> padding (used by accidental placement algorithm)
     215         2792 :     table[ElementType::ACCIDENTAL][ElementType::NOTE] = style.styleAbsolute(Sid::accidentalNoteDistance);
     216         2792 :     table[ElementType::ACCIDENTAL][ElementType::LEDGER_LINE] = 0.18 * spatium;
     217              : 
     218         2792 :     table[ElementType::ARTICULATION][ElementType::NOTE] = 0.25 * spatium;
     219         2792 :     table[ElementType::ARTICULATION][ElementType::REST] = 0.25 * spatium;
     220         2792 :     table[ElementType::ARTICULATION][ElementType::ACCIDENTAL] = 0.25 * spatium;
     221              : 
     222         2792 :     table[ElementType::LAISSEZ_VIB_SEGMENT][ElementType::NOTE] = 0.5 * spatium;
     223         2792 :     table[ElementType::LAISSEZ_VIB_SEGMENT][ElementType::REST] = 0.5 * spatium;
     224         2792 :     table[ElementType::LAISSEZ_VIB_SEGMENT][ElementType::ACCIDENTAL] = 0.35 * spatium;
     225         2792 :     table[ElementType::LAISSEZ_VIB_SEGMENT][ElementType::BAR_LINE] = 0.35 * spatium;
     226              : 
     227              :     // Measure repeat set same values as note
     228         2792 :     table[ElementType::MEASURE_REPEAT] = table[ElementType::NOTE];
     229       432760 :     for (auto& elem : table) {
     230       429968 :         elem[ElementType::MEASURE_REPEAT] = elem[ElementType::NOTE];
     231              :     }
     232              : 
     233              :     // Obtain the Stem -> * and * -> Stem values from the note equivalents
     234         2792 :     table[ElementType::STEM] = table[ElementType::NOTE];
     235       432760 :     for (auto& elem: table) {
     236       429968 :         elem[ElementType::STEM] = elem[ElementType::NOTE];
     237              :     }
     238              : 
     239         2792 :     table[ElementType::NOTE][ElementType::STEM] = style.styleAbsolute(Sid::minNoteDistance);
     240         2792 :     table[ElementType::REST][ElementType::STEM] = table[ElementType::NOTE][ElementType::STEM];
     241         2792 :     table[ElementType::CLEF][ElementType::STEM] = 0.75 * spatium;
     242         2792 :     table[ElementType::ACCIDENTAL][ElementType::STEM] = table[ElementType::ACCIDENTAL][ElementType::NOTE];
     243         2792 :     table[ElementType::LAISSEZ_VIB_SEGMENT][ElementType::STEM] = 0.35 * spatium;
     244         2792 :     table[ElementType::STEM][ElementType::NOTE] = style.styleAbsolute(Sid::minNoteDistance);
     245         2792 :     table[ElementType::STEM][ElementType::STEM] = 0.85 * spatium;
     246         2792 :     table[ElementType::STEM][ElementType::ACCIDENTAL] = 0.35 * spatium;
     247         2792 :     table[ElementType::STEM][ElementType::LEDGER_LINE] = 0.35 * spatium;
     248         2792 :     table[ElementType::LEDGER_LINE][ElementType::STEM] = 0.35 * spatium;
     249              : 
     250         2792 :     const double articulationAndFermataPadding = 0.35 * spatium;
     251         2792 :     table[ElementType::ARTICULATION].fill(articulationAndFermataPadding);
     252       432760 :     for (auto& elem : table) {
     253       429968 :         elem[ElementType::ARTICULATION] = articulationAndFermataPadding;
     254              :     }
     255         2792 :     table[ElementType::FERMATA].fill(articulationAndFermataPadding);
     256       432760 :     for (auto& elem : table) {
     257       429968 :         elem[ElementType::FERMATA] = articulationAndFermataPadding;
     258              :     }
     259              : 
     260         2792 :     table[ElementType::TAPPING] = table[ElementType::ARTICULATION];
     261       432760 :     for (auto& elem : table) {
     262       429968 :         elem[ElementType::TAPPING] = elem[ElementType::ARTICULATION];
     263              :     }
     264         2792 :     table[ElementType::TAPPING_HALF_SLUR_SEGMENT] = table[ElementType::ARTICULATION];
     265       432760 :     for (auto& elem : table) {
     266       429968 :         elem[ElementType::TAPPING_HALF_SLUR_SEGMENT] = elem[ElementType::ARTICULATION];
     267              :     }
     268         2792 : }
     269              : 
     270        61067 : double ParenPaddingTable::padding(ElementType type1, ElementType type2) const
     271              : {
     272        61067 :     assert(type1 == ElementType::PARENTHESIS || type2 == ElementType::PARENTHESIS);
     273        61067 :     const PaddingVector<double>& row = type1 == ElementType::PARENTHESIS ? m_parenAfter : m_parenBefore;
     274        61067 :     const ElementType& otherType = type1 == ElementType::PARENTHESIS ? type2 : type1;
     275              : 
     276        61067 :     return row.at(otherType);
     277              : }
     278              : 
     279        61067 : const ParenPaddingTable& ParenPaddingTables::getTableFor(const EngravingItem* parent) const
     280              : {
     281        61067 :     switch (parent->type()) {
     282        49433 :     case ElementType::NOTE:
     283              :     case ElementType::CHORD:
     284        49433 :         return noteParenPaddingTable;
     285         1447 :     case ElementType::KEYSIG:
     286         1447 :         return keySigParenPaddingTable;
     287         5776 :     case ElementType::TIMESIG:
     288         5776 :         return timeSigParenPaddingTable;
     289         4411 :     case ElementType::CLEF:
     290         4411 :         return clefParenPaddingTable;
     291            0 :     default:
     292            0 :         ASSERT_X("Not a valid parenthesised type")
     293              :         return noteParenPaddingTable; // Just to return something
     294              :     }
     295              : }
     296              : 
     297        11168 : void ParenPaddingTable::init(double minPadUnit)
     298              : {
     299      1731040 :     for (size_t i = 0; i < TOT_ELEMENT_TYPES; ++i) {
     300      1719872 :         m_parenBefore[i] = minPadUnit;
     301      1719872 :         m_parenAfter[i]  = minPadUnit;
     302              :     }
     303        11168 : }
     304              : 
     305         2792 : void NoteParenPaddingTable::update(const MStyle& style)
     306              : {
     307         2792 :     const double spatium = style.spatium();
     308         2792 :     const double minPadUnit = 0.1 * spatium;
     309         2792 :     init(minPadUnit);
     310              : 
     311         2792 :     m_parenBefore[ElementType::ARPEGGIO] = style.styleAbsolute(Sid::arpeggioAccidentalDistance);
     312         2792 :     m_parenBefore[ElementType::BAR_LINE] = style.styleAbsolute(Sid::barAccidentalDistance);
     313         2792 :     m_parenBefore[ElementType::CLEF] = 0.6 * spatium;
     314         2792 :     m_parenBefore[ElementType::HOOK] = 0.35 * spatium;
     315         2792 :     m_parenBefore[ElementType::KEYSIG] = 1.6 * spatium;
     316         2792 :     m_parenBefore[ElementType::LEDGER_LINE] = style.styleAbsolute(Sid::accidentalNoteDistance);
     317         2792 :     m_parenBefore[ElementType::NOTEDOT] = 0.35 * spatium;
     318         2792 :     m_parenBefore[ElementType::NOTE] = 0.35 * spatium;
     319         2792 :     m_parenBefore[ElementType::REST] = 0.45 * spatium;
     320         2792 :     m_parenBefore[ElementType::STEM] = 0.35 * spatium;
     321         2792 :     m_parenBefore[ElementType::TIMESIG] = 0.8 * spatium;
     322         2792 :     m_parenBefore[ElementType::PARENTHESIS] = style.styleAbsolute(Sid::minNoteDistance) * 0.5;
     323              : 
     324         2792 :     m_parenAfter[ElementType::ACCIDENTAL] = std::max(style.styleAbsolute(Sid::accidentalNoteDistance), 0.35 * spatium);
     325         2792 :     m_parenAfter[ElementType::ARPEGGIO] = 0.6 * spatium;
     326         2792 :     m_parenAfter[ElementType::BAR_LINE] = style.styleAbsolute(Sid::noteBarDistance);
     327         2792 :     m_parenAfter[ElementType::CLEF] = 0.8 * spatium;
     328         2792 :     m_parenAfter[ElementType::KEYSIG] = 0.75 * spatium;
     329         2792 :     m_parenAfter[ElementType::LEDGER_LINE] = 0.35 * spatium;
     330         2792 :     m_parenAfter[ElementType::NOTE] = std::max(style.styleAbsolute(Sid::accidentalNoteDistance), 0.35 * spatium);
     331         2792 :     m_parenAfter[ElementType::REST] = style.styleAbsolute(Sid::minNoteDistance);
     332         2792 :     m_parenAfter[ElementType::STEM] = style.styleAbsolute(Sid::minNoteDistance);
     333         2792 :     m_parenAfter[ElementType::TIMESIG] = 0.75 * spatium;
     334         2792 :     m_parenAfter[ElementType::PARENTHESIS] = style.styleAbsolute(Sid::minNoteDistance) * 0.5;
     335         2792 : }
     336              : 
     337         2792 : void KeySigParenPaddingTable::update(const MStyle& style)
     338              : {
     339         2792 :     const double spatium = style.spatium();
     340         2792 :     const double minPadUnit = 0.1 * spatium;
     341         2792 :     init(minPadUnit);
     342              : 
     343         2792 :     m_parenBefore[ElementType::BAR_LINE] = 0.5 * spatium;
     344         2792 :     m_parenBefore[ElementType::CLEF] = 0.25 * spatium;
     345         2792 :     m_parenBefore[ElementType::HOOK] = 0.35 * spatium;
     346         2792 :     m_parenBefore[ElementType::KEYSIG] = 0.25 * spatium;
     347         2792 :     m_parenBefore[ElementType::NOTEDOT] = 0.35 * spatium;
     348         2792 :     m_parenBefore[ElementType::NOTE] = style.styleAbsolute(Sid::noteBarDistance);
     349         2792 :     m_parenBefore[ElementType::REST] = m_parenBefore[ElementType::NOTE];
     350         2792 :     m_parenBefore[ElementType::STEM] = 0.35 * spatium;
     351         2792 :     m_parenBefore[ElementType::TIMESIG] = 0.25 * spatium;
     352         2792 :     m_parenBefore[ElementType::PARENTHESIS] = 1.0 * spatium;
     353              : 
     354         2792 :     m_parenAfter[ElementType::BAR_LINE] = 0.5 * spatium;
     355         2792 :     m_parenAfter[ElementType::CLEF] = 0.2 * spatium;
     356         2792 :     m_parenAfter[ElementType::HOOK] = 0.35 * spatium;
     357         2792 :     m_parenAfter[ElementType::KEYSIG] = 0.25 * spatium;
     358         2792 :     m_parenAfter[ElementType::NOTEDOT] = 0.35 * spatium;
     359         2792 :     m_parenAfter[ElementType::NOTE] = style.styleAbsolute(Sid::barNoteDistance);
     360         2792 :     m_parenAfter[ElementType::REST] = m_parenAfter[ElementType::NOTE];
     361         2792 :     m_parenAfter[ElementType::STEM] = 0.35 * spatium;
     362         2792 :     m_parenAfter[ElementType::TIMESIG] = 0.25 * spatium;
     363         2792 :     m_parenAfter[ElementType::PARENTHESIS] = 1.0 * spatium;
     364         2792 : }
     365              : 
     366         2792 : void TimeSigParenPaddingTable::update(const MStyle& style)
     367              : {
     368         2792 :     const double spatium = style.spatium();
     369         2792 :     const double minPadUnit = 0.1 * spatium;
     370         2792 :     init(minPadUnit);
     371              : 
     372         2792 :     m_parenBefore[ElementType::BAR_LINE] = 0.5 * spatium;
     373         2792 :     m_parenBefore[ElementType::CLEF] = 0.25 * spatium;
     374         2792 :     m_parenBefore[ElementType::HOOK] = 0.35 * spatium;
     375         2792 :     m_parenBefore[ElementType::KEYSIG] = 0.25 * spatium;
     376         2792 :     m_parenBefore[ElementType::NOTEDOT] = 0.35 * spatium;
     377         2792 :     m_parenBefore[ElementType::NOTE] = style.styleAbsolute(Sid::noteBarDistance);
     378         2792 :     m_parenBefore[ElementType::REST] = m_parenBefore[ElementType::NOTE];
     379         2792 :     m_parenBefore[ElementType::STEM] = 0.35 * spatium;
     380         2792 :     m_parenBefore[ElementType::TIMESIG] = 0.25 * spatium;
     381         2792 :     m_parenBefore[ElementType::PARENTHESIS] = 1.0 * spatium;
     382              : 
     383         2792 :     m_parenAfter[ElementType::BAR_LINE] = 0.5 * spatium;
     384         2792 :     m_parenAfter[ElementType::CLEF] = 0.2 * spatium;
     385         2792 :     m_parenAfter[ElementType::HOOK] = 0.35 * spatium;
     386         2792 :     m_parenAfter[ElementType::KEYSIG] = 0.35 * spatium;
     387         2792 :     m_parenAfter[ElementType::NOTEDOT] = 0.2 * spatium;
     388         2792 :     m_parenAfter[ElementType::NOTE] = style.styleAbsolute(Sid::barNoteDistance);
     389         2792 :     m_parenAfter[ElementType::REST] = m_parenAfter[ElementType::NOTE];
     390         2792 :     m_parenAfter[ElementType::STEM] = 0.35 * spatium;
     391         2792 :     m_parenAfter[ElementType::TIMESIG] = 0.25 * spatium;
     392         2792 :     m_parenAfter[ElementType::PARENTHESIS] = 1.0 * spatium;
     393         2792 : }
     394              : 
     395         2792 : void ClefParenPaddingTable::update(const MStyle& style)
     396              : {
     397         2792 :     const double spatium = style.spatium();
     398         2792 :     const double minPadUnit = 0.1 * spatium;
     399         2792 :     init(minPadUnit);
     400              : 
     401         2792 :     m_parenBefore[ElementType::BAR_LINE] = 0.5 * spatium;
     402         2792 :     m_parenBefore[ElementType::CLEF] = 0.25 * spatium;
     403         2792 :     m_parenBefore[ElementType::HOOK] = 0.35 * spatium;
     404         2792 :     m_parenBefore[ElementType::KEYSIG] = 0.25 * spatium;
     405         2792 :     m_parenBefore[ElementType::NOTEDOT] = 0.35 * spatium;
     406         2792 :     m_parenBefore[ElementType::NOTE] = style.styleAbsolute(Sid::noteBarDistance);
     407         2792 :     m_parenBefore[ElementType::REST] = m_parenBefore[ElementType::NOTE];
     408         2792 :     m_parenBefore[ElementType::STEM] = 0.35 * spatium;
     409         2792 :     m_parenBefore[ElementType::TIMESIG] = 0.25 * spatium;
     410         2792 :     m_parenBefore[ElementType::PARENTHESIS] = 1.0 * spatium;
     411              : 
     412         2792 :     m_parenAfter[ElementType::BAR_LINE] = 0.5 * spatium;
     413         2792 :     m_parenAfter[ElementType::CLEF] = 0.25 * spatium;
     414         2792 :     m_parenAfter[ElementType::HOOK] = 0.35 * spatium;
     415         2792 :     m_parenAfter[ElementType::KEYSIG] = 0.35 * spatium;
     416         2792 :     m_parenAfter[ElementType::NOTEDOT] = 0.35 * spatium;
     417         2792 :     m_parenAfter[ElementType::NOTE] = style.styleAbsolute(Sid::barNoteDistance);
     418         2792 :     m_parenAfter[ElementType::REST] = m_parenAfter[ElementType::NOTE];
     419         2792 :     m_parenAfter[ElementType::STEM] = 0.35 * spatium;
     420         2792 :     m_parenAfter[ElementType::TIMESIG] = 0.2 * spatium;
     421         2792 :     m_parenAfter[ElementType::PARENTHESIS] = 1.0 * spatium;
     422         2792 : }
        

Generated by: LCOV version 2.0-1