// // File: VLLayout.h - Dimensions for lead sheet layout // // Author(s): // // (MN) Matthias Neeracher // // Copyright © 2007-2011 Matthias Neeracher // #include "VLModel.h" #include class VLSystemLayout { public: VLSystemLayout(const VLProperties & prop, float width, int maxMeas); float ClefKeyWidth() const { return fClefKeyWidth; } float MeasureWidth() const { return fMeasureWidth; } float MeasurePosition(int m) const { return fClefKeyWidth+m*fMeasureWidth; } float SystemWidth() const { return MeasurePosition(fNumMeasures); } int Divisions() const { return fDivisions; } int NumGroups() const { return fNumGroups; } int DivPerGroup() const { return fDivPerGroup; } int NumMeasures() const { return fNumMeasures; } private: float fClefKeyWidth; float fMeasureWidth; int fDivisions; int fNumGroups; int fDivPerGroup; int fNumMeasures; }; class VLLayout : public std::vector { public: VLLayout(const VLSong & song, float width); int FirstMeasure(int system) const; int SystemForMeasure(int measure) const; int NumSystems() const { return static_cast(size()); } float MeasurePosition(int measure) const; float NotePosition(VLLocation at) const; }; class VLFontHandler { public: virtual void Draw(float x, float y, const char * utf8Text, bool highlight) = 0; virtual float Width(const char * utf8Text) = 0; virtual ~VLFontHandler(); }; struct VLLayoutSyll : public VLSyllable { float fX; bool fHighlight; }; class VLTextLayout { public: VLTextLayout(VLFontHandler * regular, VLFontHandler * narrow); void AddSyllable(const VLSyllable & syll, float x, bool highlight); void DrawLine(float y); private: VLFontHandler * fRegularFont; VLFontHandler * fNarrowFont; std::vector fSyllables; }; // Local Variables: // mode:C++ // End: