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 : }
|