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 : #ifndef MU_ENGRAVING_SINGLELAYOUT_H
23 : #define MU_ENGRAVING_SINGLELAYOUT_H
24 :
25 : #include <memory>
26 :
27 : #include "dom/textbase.h"
28 :
29 : namespace mu::engraving {
30 : class MStyle;
31 : class IEngravingFont;
32 : class EngravingItem;
33 : class Score;
34 :
35 : class Accidental;
36 : class ActionIcon;
37 : class Ambitus;
38 : class Arpeggio;
39 : class Articulation;
40 :
41 : class BagpipeEmbellishment;
42 : class BarLine;
43 : class Bend;
44 : class Bracket;
45 : class Breath;
46 :
47 : class Capo;
48 : class Chord;
49 : class ChordLine;
50 : class Clef;
51 :
52 : class DummyParent;
53 : class Dynamic;
54 :
55 : class Expression;
56 :
57 : class Fermata;
58 : class Fingering;
59 : class FretDiagram;
60 : class FSymbol;
61 :
62 : class Glissando;
63 : class GlissandoSegment;
64 : class GradualTempoChange;
65 : class GradualTempoChangeSegment;
66 :
67 : class Hairpin;
68 : class HairpinSegment;
69 : class HarpPedalDiagram;
70 :
71 : class Image;
72 : class InstrumentChange;
73 :
74 : class Jump;
75 :
76 : class KeySig;
77 :
78 : class LayoutBreak;
79 : class LetRing;
80 : class LetRingSegment;
81 : class SLine;
82 : class LineSegment;
83 : class Lyrics;
84 :
85 : class Marker;
86 : class MeasureNumber;
87 : class MeasureRepeat;
88 :
89 : class NoteHead;
90 : class NoteLine;
91 :
92 : class Ornament;
93 : class Ottava;
94 : class OttavaSegment;
95 :
96 : class PalmMute;
97 : class PalmMuteSegment;
98 : class Pedal;
99 : class PedalSegment;
100 : class PlayCountText;
101 : class PlayTechAnnotation;
102 :
103 : class RehearsalMark;
104 :
105 : class Slur;
106 : class SoundFlag;
107 : class Spacer;
108 : class StaffText;
109 : class StaveSharingLabel;
110 : class StaffTypeChange;
111 : class Sticking;
112 : class StringTunings;
113 : class Symbol;
114 : class SystemText;
115 :
116 : class TempoText;
117 : class Text;
118 : class TextLine;
119 : class TextLineSegment;
120 : class TextLineBaseSegment;
121 : class TimeSig;
122 : class TremoloSingleChord;
123 : class TremoloTwoChord;
124 : class TremoloBar;
125 : class Trill;
126 : class TrillSegment;
127 :
128 : class Vibrato;
129 : class VibratoSegment;
130 : class Volta;
131 : class VoltaSegment;
132 : }
133 :
134 : namespace mu::engraving::rendering::single {
135 : class SingleLayout
136 : {
137 : public:
138 : SingleLayout() = default;
139 :
140 : static void layoutItem(engraving::EngravingItem* item);
141 :
142 : struct Context {
143 0 : Context(engraving::Score* s)
144 0 : : m_score(s) {}
145 :
146 : const engraving::MStyle& style() const;
147 : std::shared_ptr<engraving::IEngravingFont> engravingFont() const;
148 : engraving::DummyParent* dummyParent() const;
149 :
150 : //! NOTE Temporarily, do not use
151 0 : engraving::Score* dontUseScore() const { return m_score; }
152 :
153 : private:
154 : engraving::Score* m_score = nullptr;
155 : };
156 :
157 : static void layout(Accidental* item, const Context& ctx);
158 : static void layout(ActionIcon* item, const Context& ctx);
159 : static void layout(Ambitus* item, const Context& ctx);
160 : static void layout(Arpeggio* item, const Context& ctx);
161 : static void layout(ChordBracket* item, const Context& ctx);
162 : static void layout(Articulation* item, const Context& ctx);
163 :
164 : static void layout(BagpipeEmbellishment* item, const Context& ctx);
165 : static void layout(BarLine* item, const Context& ctx);
166 : static void layout(Bend* item, const Context& ctx);
167 : static void layout(Bracket* item, const Context& ctx);
168 : static void layout(Breath* item, const Context&);
169 :
170 : static void layout(Capo* item, const Context& ctx);
171 : static void layout(Chord* item, const Context& ctx);
172 : static void layout(ChordLine* item, const Context& ctx);
173 : static void layout(Clef* item, const Context& ctx);
174 :
175 : static void layout(Dynamic* item, const Context& ctx);
176 :
177 : static void layout(Expression* item, const Context& ctx);
178 :
179 : static void layout(Fermata* item, const Context& ctx);
180 : static void layout(Fingering* item, const Context& ctx);
181 : static void layout(FretDiagram* item, const Context& ctx);
182 : static void layout(FSymbol* item, const Context& ctx);
183 :
184 : static void layout(Glissando* item, const Context& ctx);
185 : static void layout(GradualTempoChange* item, const Context& ctx);
186 : static void layout(GuitarBend* item, const Context& ctx);
187 :
188 : static void layout(Hairpin* item, const Context& ctx);
189 : static void layout(HammerOnPullOff* item, const Context& ctx);
190 : static void layout(HammerOnPullOffSegment* item, const Context& ctx);
191 : static void layout(HarpPedalDiagram* item, const Context& ctx);
192 :
193 : static void layout(Image* item, const Context& ctx);
194 : static void layout(InstrumentChange* item, const Context& ctx);
195 :
196 : static void layout(Jump* item, const Context& ctx);
197 :
198 : static void layout(KeySig* item, const Context& ctx);
199 :
200 : static void layout(LayoutBreak* item, const Context& ctx);
201 : static void layout(LetRing* item, const Context& ctx);
202 : static void layout(Lyrics* item, const Context& ctx);
203 :
204 : static void layout(NoteHead* item, const Context& ctx);
205 : static void layout(NoteLine* item, const Context& ctx);
206 :
207 : static void layout(Marker* item, const Context& ctx);
208 : static void layout(MeasureNumber* item, const Context& ctx);
209 : static void layout(MeasureRepeat* item, const Context& ctx);
210 :
211 : static void layout(Ornament* item, const Context& ctx);
212 : static void layout(Ottava* item, const Context& ctx);
213 :
214 : static void layout(PalmMute* item, const Context& ctx);
215 : static void layout(Pedal* item, const Context& ctx);
216 : static void layout(PlayCountText* item, const Context& ctx);
217 : static void layout(PlayTechAnnotation* item, const Context& ctx);
218 :
219 : static void layout(RehearsalMark* item, const Context& ctx);
220 :
221 : static void layout(Slur* item, const Context& ctx);
222 : static void layout(SoundFlag* item, const Context& ctx);
223 : static void layout(Spacer* item, const Context&);
224 : static void layout(StaffText* item, const Context& ctx);
225 : static void layout(StaveSharingLabel* item, const Context& ctx);
226 : static void layout(StaffTypeChange* item, const Context& ctx);
227 : static void layout(Stem* item, const Context& ctx);
228 : static void layout(Sticking* item, const Context& ctx);
229 : static void layout(StringTunings* item, const Context& ctx);
230 : static void layout(Symbol* item, const Context& ctx);
231 : static void layout(SystemText* item, const Context& ctx);
232 :
233 : static void layout(Tapping* item, const Context& ctx);
234 : static void layout(TempoText* item, const Context& ctx);
235 : static void layout(TextLine* item, const Context& ctx);
236 : static void layout(TimeSig* item, const Context& ctx);
237 : static void layout(TremoloSingleChord* item, const Context& ctx);
238 : static void layout(TremoloTwoChord* item, const Context& ctx);
239 : static void layout(TremoloBar* item, const Context& ctx);
240 : static void layout(Trill* item, const Context& ctx);
241 :
242 : static void layout(Vibrato* item, const Context& ctx);
243 : static void layout(Volta* item, const Context& ctx);
244 : static void layout(WhammyBar* item, const Context& ctx);
245 :
246 : private:
247 : static void layout(GlissandoSegment* item, const Context& ctx);
248 : static void layout(GradualTempoChangeSegment* item, const Context& ctx);
249 : static void layout(GuitarBendSegment* item, const Context& ctx);
250 : static void layout(HairpinSegment* item, const Context& ctx);
251 : static void layout(LetRingSegment* item, const Context& ctx);
252 : static void layout(OttavaSegment* item, const Context& ctx);
253 : static void layout(PalmMuteSegment* item, const Context& ctx);
254 : static void layout(PedalSegment* item, const Context& ctx);
255 : static void layout(TextLineSegment* item, const Context& ctx);
256 : static void layout(TrillSegment* item, const Context& ctx);
257 : static void layout(VibratoSegment* item, const Context& ctx);
258 : static void layout(VoltaSegment* item, const Context& ctx);
259 : static void layout(WhammyBarSegment* item, const Context& ctx);
260 :
261 : static void layout(Text* item, const Context& ctx);
262 : static void layoutTextBase(const TextBase* item, const Context& ctx, TextBase::LayoutData* ldata);
263 : static void layout1TextBase(const TextBase* item, const Context& ctx, TextBase::LayoutData* ldata);
264 :
265 : static void layoutLine(SLine* item, const Context& ctx);
266 : static void layoutLineSegment(LineSegment* item, const Context& ctx);
267 : static void layoutTextLineBaseSegment(TextLineBaseSegment* item, const Context& ctx);
268 :
269 : static void layoutGroupBracket(Bracket* item, const Context& ctx);
270 : };
271 : }
272 :
273 : #endif // MU_ENGRAVING_SINGLELAYOUT_H
|