8 #ifndef __VRV_RENDERER_H__
9 #define __VRV_RENDERER_H__
13 #include "devicecontextbase.h"
15 #include "textelement.h"
38 class EditorialElement;
44 class FloatingCurvePositioner;
69 class PitchInflection;
85 class TextDrawingParams;
87 class TextLayoutElement;
97 enum class SlurHandling { Ignore, Initialize, Drawing };
132 int ToDeviceContextX(
int i);
133 int ToLogicalX(
int i);
134 int ToDeviceContextY(
int i);
135 int ToLogicalY(
int i);
168 int CalculatePitchCode(
Layer *layer,
int y_n,
int x_pos,
int *octave);
176 void SetSlurHandling(SlurHandling slurHandling) {
m_slurHandling = slurHandling; }
186 void DrawPageElement(DeviceContext *dc, PageElement *element);
187 void DrawSystem(DeviceContext *dc, System *system);
188 void DrawSystemList(DeviceContext *dc, System *system,
const ClassId classId);
189 void DrawScoreDef(DeviceContext *dc, ScoreDef *scoreDef, Measure *measure,
int x, BarLine *barLine = NULL,
190 bool isLastMeasure =
false,
bool isLastSystem =
false);
191 void DrawStaffGrp(DeviceContext *dc, Measure *measure, StaffGrp *staffGrp,
int x,
bool topStaffGrp =
false,
192 bool abbreviations =
false);
193 void DrawStaffDef(DeviceContext *dc, Staff *staff, Measure *measure);
194 void DrawStaffDefCautionary(DeviceContext *dc, Staff *staff, Measure *measure);
195 void DrawStaffDefLabels(DeviceContext *dc, Measure *measure, StaffGrp *staffGrp,
int x,
bool abbreviations =
false);
196 void DrawGrpSym(DeviceContext *dc, Measure *measure, StaffGrp *staffGrp,
int &x);
197 void DrawLabels(DeviceContext *dc, ScoreDef *scoreDef, Object *
object,
int x,
int y,
bool abbreviations,
198 int staffSize,
int space);
199 void DrawBracket(DeviceContext *dc,
int x,
int y1,
int y2,
int staffSize);
200 void DrawBracketSq(DeviceContext *dc,
int x,
int y1,
int y2,
int staffSize);
201 void DrawBrace(DeviceContext *dc,
int x,
int y1,
int y2,
int staffSize);
202 void DrawBarLines(DeviceContext *dc, Measure *measure, StaffGrp *staffGrp, BarLine *barLine,
bool isLastMeasure,
203 bool isLastSystem,
int &yBottomPrevious);
204 void DrawBarLine(DeviceContext *dc,
int yTop,
int yBottom, BarLine *barLine, data_BARRENDITION form,
205 bool inStaffSpace =
false,
bool eraseIntersections =
false);
206 void DrawBarLineDots(DeviceContext *dc, Staff *staff, BarLine *barLine);
207 void DrawLedgerLines(DeviceContext *dc, Staff *staff,
const ArrayOfLedgerLines &lines,
bool below,
bool cueSize);
208 void DrawMeasure(DeviceContext *dc, Measure *measure, System *system);
209 void DrawMeterSigGrp(DeviceContext *dc, Layer *layer, Staff *staff);
210 void DrawMNum(DeviceContext *dc, MNum *mnum, Measure *measure, System *system,
int yOffset);
211 void DrawStaff(DeviceContext *dc, Staff *staff, Measure *measure, System *system);
212 void DrawStaffLines(DeviceContext *dc, Staff *staff, StaffDef *staffDef, Measure *measure, System *system);
213 void DrawLayer(DeviceContext *dc, Layer *layer, Staff *staff, Measure *measure);
214 void DrawLayerList(DeviceContext *dc, Layer *layer, Staff *staff, Measure *measure,
const ClassId classId);
215 void DrawLayerDefLabels(
216 DeviceContext *dc, ScoreDef *scoreDef, Staff *staff, StaffDef *staffDef,
int x,
bool abbreviations =
false);
217 void DrawSystemDivider(DeviceContext *dc, System *system, Measure *firstMeasure);
225 void DrawDiv(DeviceContext *dc, Div *div, System *system);
226 void DrawRunningElements(DeviceContext *dc, Page *page);
227 void DrawTextLayoutElement(DeviceContext *dc, TextLayoutElement *textLayoutElement);
239 void DrawSystemChildren(DeviceContext *dc, Object *parent, System *system);
240 void DrawMeasureChildren(DeviceContext *dc, Object *parent, Measure *measure, System *system);
241 void DrawStaffChildren(DeviceContext *dc, Object *parent, Staff *staff, Measure *measure);
242 void DrawLayerChildren(DeviceContext *dc, Object *parent, Layer *layer, Staff *staff, Measure *measure);
243 void DrawTextChildren(DeviceContext *dc, Object *parent, TextDrawingParams ¶ms);
244 void DrawFbChildren(DeviceContext *dc, Object *parent, TextDrawingParams ¶ms);
245 void DrawRunningChildren(DeviceContext *dc, Object *parent, TextDrawingParams ¶ms);
253 void DrawSystemEditorialElement(DeviceContext *dc, EditorialElement *element, System *system);
254 void DrawMeasureEditorialElement(DeviceContext *dc, EditorialElement *element, Measure *measure, System *system);
255 void DrawStaffEditorialElement(DeviceContext *dc, EditorialElement *element, Staff *staff, Measure *measure);
256 void DrawLayerEditorialElement(
257 DeviceContext *dc, EditorialElement *element, Layer *layer, Staff *staff, Measure *measure);
258 void DrawTextEditorialElement(DeviceContext *dc, EditorialElement *element, TextDrawingParams ¶ms);
259 void DrawFbEditorialElement(DeviceContext *dc, EditorialElement *element, TextDrawingParams ¶ms);
260 void DrawRunningEditorialElement(DeviceContext *dc, EditorialElement *element, TextDrawingParams ¶ms);
268 void DrawAnnot(DeviceContext *dc, EditorialElement *element,
bool isTextElement =
false);
278 void DrawLayerElement(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
289 void DrawAccid(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
290 void DrawArtic(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
291 void DrawBarLine(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
292 void DrawBeatRpt(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
293 void DrawBTrem(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
294 void DrawChord(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
295 void DrawClef(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
296 void DrawCustos(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
297 void DrawDot(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
298 void DrawDots(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
299 void DrawDurationElement(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
300 void DrawFlag(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
301 void DrawGenericLayerElement(
302 DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
303 void DrawGraceGrp(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
304 void DrawHalfmRpt(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
305 void DrawKeySig(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
306 void DrawLigature(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
307 void DrawMeterSig(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
308 void DrawMRest(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
309 void DrawMRpt(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
310 void DrawMRpt2(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
311 void DrawMSpace(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
312 void DrawMultiRest(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
313 void DrawMultiRpt(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
314 void DrawNote(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
315 void DrawRest(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
316 void DrawSpace(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
317 void DrawStem(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
318 void DrawStemMod(DeviceContext *dc, LayerElement *element, Staff *staff);
319 void DrawSyl(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
320 void DrawTuplet(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
321 void DrawVerse(DeviceContext *dc, LayerElement *element, Layer *layer, Staff *staff, Measure *measure);
331 void DrawAcciaccaturaSlash(DeviceContext *dc, Stem *stem, Staff *staff);
332 void DrawChordCluster(DeviceContext *dc, Chord *chord, Layer *layer, Staff *staff, Measure *measure);
333 void DrawClefEnclosing(DeviceContext *dc, Clef *clef, Staff *staff, char32_t glyph,
int x,
int y);
334 void DrawDotsPart(DeviceContext *dc,
int x,
int y,
unsigned char dots,
const Staff *staff,
bool dimin =
false);
335 void DrawKeySigCancellation(
336 DeviceContext *dc, KeySig *keySig, Staff *staff, Clef *clef,
int clefLocOffset,
int beginCancel,
int &x);
337 void DrawKeyAccid(DeviceContext *dc, KeyAccid *keyAccid, Staff *staff, Clef *clef,
int clefLocOffset,
int &x);
338 void DrawMeterSig(DeviceContext *dc, MeterSig *meterSig, Staff *staff,
int horizOffset);
341 void DrawMRptPart(
DeviceContext *dc,
int xCentered, char32_t smulfCode,
int num,
bool line,
Staff *staff);
424 void DrawArpegEnclosing(
DeviceContext *dc,
Arpeg *arpeg,
Staff *staff, char32_t startGlyph, char32_t fillGlyph,
425 char32_t endGlyph,
int x,
int y,
int height,
bool cueSize);
450 char spanningType,
Object *graphic = NULL);
466 char spanningType,
Object *graphic = NULL);
470 void DrawTrillExtension(
472 void DrawSylConnector(
513 void DrawMensuralStem(
DeviceContext *dc,
Note *note,
Staff *staff, data_STEMDIRECTION dir,
int xn,
int originY);
515 void DrawProportFigures(
DeviceContext *dc,
int x,
int y,
int num,
int numBase,
Staff *staff);
546 void DrawVerticalLine(
DeviceContext *dc,
int y1,
int y2,
int x1,
int width,
int dashLength = 0,
int gapLength = 0);
547 void DrawHorizontalLine(
548 DeviceContext *dc,
int x1,
int x2,
int y1,
int width,
int dashLength = 0,
int gapLength = 0);
549 void DrawObliqueLine(
550 DeviceContext *dc,
int x1,
int x2,
int y1,
int y2,
int width,
int dashLength = 0,
int gapLength = 0);
551 void DrawVerticalSegmentedLine(
553 void DrawHorizontalSegmentedLine(
556 DeviceContext *dc,
int x,
int y, char32_t code,
int staffSize,
bool dimin,
bool setBBGlyph =
false);
560 void DrawThickBezierCurve(
561 DeviceContext *dc,
Point bezier[4],
int thickness,
int staffSize,
int penWidth, PenStyle penStyle = PEN_SOLID);
566 void DrawSmuflLine(
DeviceContext *dc,
Point orig,
int length,
int staffSize,
bool dimin, char32_t fill,
567 char32_t start = 0, char32_t end = 0);
568 void DrawSmuflString(
DeviceContext *dc,
int x,
int y, std::u32string s, data_HORIZONTALALIGNMENT alignment,
569 int staffSize = 100,
bool dimin =
false,
bool setBBGlyph =
false);
570 void DrawLyricString(
DeviceContext *dc,
const std::u32string &str,
int staffSize = 100,
571 std::optional<TextDrawingParams> params = std::nullopt);
572 void DrawNotFilledEllipse(
DeviceContext *dc,
int x1,
int y1,
int x2,
int y2,
int lineThinkness);
573 void DrawFilledRectangle(
DeviceContext *dc,
int x1,
int y1,
int x2,
int y2);
574 void DrawNotFilledRectangle(
DeviceContext *dc,
int x1,
int y1,
int x2,
int y2,
int lineThinkness,
int radius);
575 void DrawFilledRoundedRectangle(
DeviceContext *dc,
int x1,
int y1,
int x2,
int y2,
int radius);
576 void DrawObliquePolygon(
DeviceContext *dc,
int x1,
int y1,
int x2,
int y2,
int height);
577 void DrawDiamond(
DeviceContext *dc,
int x1,
int y1,
int height,
int width,
bool fill,
int linewidth);
578 void DrawDot(
DeviceContext *dc,
int x,
int y,
int staffSize,
bool dimin =
false);
579 void DrawSquareBracket(
DeviceContext *dc,
bool leftBracket,
int x,
int y,
int height,
int width,
580 int horizontalThickness,
int verticalThickness);
581 void DrawEnclosingBrackets(
DeviceContext *dc,
int x,
int y,
int height,
int width,
int offset,
int bracketWidth,
582 int horizontalThickness,
int verticalThickness);
585 data_HORIZONTALALIGNMENT alignement = HORIZONTALALIGNMENT_left);
601 std::u32string IntToTupletFigures(
unsigned short number);
602 std::u32string IntToTimeSigFigures(
unsigned short number);
603 std::u32string IntToSmuflFigures(
unsigned short number,
int offset);
604 int NestedTuplets(
Object *
object);
605 int GetSylYRel(
int verseN,
Staff *staff, data_STAFFREL place);
606 int GetFYRel(
F *f,
Staff *staff);
620 void CalcBrevisPoints(
621 Note *note,
Staff *staff,
Point *topLeft,
Point *bottomRight,
int sides[4],
int shape,
bool isMensuralBlack);
622 void CalcObliquePoints(
Note *note1,
Note *note2,
Staff *staff,
Point points[4],
int sides[4],
int shape,
623 bool isMensuralBlack,
bool firstHalf,
bool straight);
629 void DrawBeamSegment(
642 data_STEMDIRECTION GetMensuralStemDir(
Layer *layer,
Note *note,
int verticalCenter);
685 static thread_local
int s_drawingLigX[2], s_drawingLigY[2];
686 static thread_local
bool s_drawingLigObliqua;
This class models the MEI <annot> element where @type is score.
Definition: annotscore.h:24
This class models the MEI <arpeg> element.
Definition: arpeg.h:31
This class is an interface for MEI beam elements (beam, beamSpan).
Definition: drawinginterface.h:97
Class for storing drawing parameters when calculating beams.
Definition: beam.h:36
This class models the MEI <beamSpan> element.
Definition: beamspan.h:36
This class models the MEI <bracketSpan> element.
Definition: bracketspan.h:28
This class models the MEI <breath> element.
Definition: breath.h:24
This class models the MEI <caesura> element.
Definition: caesura.h:29
This class represents elements appearing within a measure.
Definition: controlelement.h:33
This class is an abstract device context.
Definition: devicecontext.h:57
This class is a hold the data and corresponds to the model of a MVC design pattern.
Definition: doc.h:41
This class represents a MEI ending.
Definition: ending.h:33
This class models the MEI <f> element.
Definition: f.h:24
This class models the MEI <fTrem> element.
Definition: ftrem.h:25
This class models the MEI <fb> element.
Definition: fb.h:23
This class models the MEI <fermata> element.
Definition: fermata.h:32
This class models the MEI <fig> element.
Definition: fig.h:23
This class models the MEI <fing> element.
Definition: fing.h:25
This class represents a basic object for a curve (slur, tie) in the layout domain.
Definition: floatingobject.h:329
This class models the MEI <gliss> element.
Definition: gliss.h:28
Implements the graphic element in MEI.
Definition: graphic.h:30
This class models the MEI <hairpin> element.
Definition: hairpin.h:31
This class models the MEI <harm> element.
Definition: harm.h:32
This class is a base class for the Layer (<layer>) content.
Definition: layerelement.h:51
This class represents a layer in a laid-out score (Doc).
Definition: layer.h:39
This class models the MEI <lb>
Definition: lb.h:23
This class represents a measure in a page-based score (Doc).
Definition: measure.h:46
This class models the MEI <meterSig> element.
Definition: metersig.h:34
This class models the MEI <mordent> element.
Definition: mordent.h:32
This class models the MEI <nc> element.
Definition: nc.h:41
This class models the MEI <note> element.
Definition: note.h:67
This class models the MEI <num> element.
Definition: num.h:24
This class represents a basic object.
Definition: object.h:61
This class models the MEI <octave> element.
Definition: octave.h:31
This class contains the document styling parameters.
Definition: options.h:576
This class represents a page in a laid-out score (Doc).
Definition: page.h:31
This class models the MEI <pedal> element.
Definition: pedal.h:34
This class models the MEI <dir> element.
Definition: pitchinflection.h:23
Simple class for representing points.
Definition: devicecontextbase.h:203
This class models the MEI <reh> element.
Definition: reh.h:30
This class models the MEI <rend> element.
Definition: rend.h:33
This class models the MEI <ornam> element.
Definition: repeatmark.h:32
This class represents a MEI scoreDef.
Definition: scoredef.h:135
Definition: boundingbox.h:337
This class represents a staff in a laid-out score (Doc).
Definition: staff.h:107
Syl is a TimeSpanningInterface for managing syllable connectors.
Definition: syl.h:36
Definition: symboldef.h:20
This class models the MEI <symbol> element.
Definition: symbol.h:25
This class represents elements appearing within a measure.
Definition: systemelement.h:26
This class represents a system in a laid-out score (Doc).
Definition: system.h:36
This class is an interface for <tempo> elements at the measure level.
Definition: tempo.h:33
This class stores current drawing parameters for text.
Definition: textelement.h:90
Definition: textelement.h:22
This class models CDATA (text)
Definition: text.h:23
This class models the MEI <tie> element.
Definition: tie.h:27
This class models the MEI <trill> element.
Definition: trill.h:34
This class models the MEI <turn> element.
Definition: turn.h:32
This class is a drawing context and corresponds to the view of a MVC design pattern.
Definition: view.h:106
void DrawCurrentPage(DeviceContext *dc, bool background=true)
Method that actually draw the current page.
void SetPage(Page *page, bool doLayout)
Set the current page.
void SetScoreDefDrawingWidth(DeviceContext *dc, ScoreDef *scoreDef)
Calculate the ScoreDef width by taking into account its widest key signature.
int m_currentColor
The color currently being used when drawing.
Definition: view.h:664
Options * m_options
Options of the document.
Definition: view.h:648
View()
Constructors and destructors.
void SetDoc(Doc *doc)
Set the document the view is pointing to (mandatory).
Doc * m_doc
Document.
Definition: view.h:646
ScoreDef m_drawingScoreDef
The current drawing score def.
Definition: view.h:676
SlurHandling GetSlurHandling() const
Control how slurs are handled.
Definition: view.h:175
int DrawMeterSigFigures(DeviceContext *dc, int x, int y, MeterSig *meterSig, int den, Staff *staff)
Returns the width of the drawn figures.
double GetPPUFactor() const
Return the pixel per unit factor of the current page (if any, 1.0 otherwise)
SlurHandling m_slurHandling
Control the handling of slurs.
Definition: view.h:669
bool GetNotationMode()
Simply returns the value of the last note-type element (mensural or neume)