Line data Source code
1 : #ifndef MU_ENGRAVING_IENGRAVINGFONT_H
2 : #define MU_ENGRAVING_IENGRAVINGFONT_H
3 :
4 : #include <memory>
5 :
6 : #include "global/types/string.h"
7 : #include "draw/types/geometry.h"
8 :
9 : #include "types/symid.h"
10 : #include "style/styledef.h"
11 :
12 : namespace muse::draw {
13 : class Painter;
14 : }
15 :
16 : namespace mu::engraving {
17 : class Shape;
18 : class EngravingItem;
19 :
20 : class IEngravingFont
21 : {
22 : public:
23 :
24 122 : virtual ~IEngravingFont() = default;
25 :
26 : virtual const std::string& name() const = 0;
27 : virtual const std::string& family() const = 0;
28 :
29 : // Misc
30 : virtual bool isValid(SymId id) const = 0;
31 : virtual char32_t symCode(SymId id) const = 0;
32 : virtual SymId fromCode(char32_t code) const = 0;
33 : virtual String toString(SymId id) const = 0;
34 :
35 : virtual std::unordered_map<Sid, PropertyValue> engravingDefaults() const = 0;
36 :
37 : // Metrics
38 : virtual double width(SymId id, double mag) const = 0;
39 : virtual double width(const SymIdList&, double mag) const = 0;
40 : virtual double height(SymId id, double mag) const = 0;
41 : virtual double advance(SymId id, double mag) const = 0;
42 :
43 : virtual RectF bbox(SymId id, double mag) const = 0;
44 : virtual RectF bbox(SymId id, const SizeF&) const = 0;
45 : virtual RectF bbox(const SymIdList& sl, double mag) const = 0;
46 : virtual RectF bbox(const SymIdList& s, const SizeF& mag) const = 0;
47 : virtual Shape shape(const SymIdList& s, double mag) const = 0;
48 : virtual Shape shape(const SymIdList& s, const SizeF& mag) const = 0;
49 : virtual Shape shapeWithCutouts(SymId id, double mag) = 0;
50 : virtual Shape shapeWithCutouts(SymId id, const SizeF& mag) = 0;
51 :
52 : virtual PointF smuflAnchor(SymId symId, SmuflAnchorId anchorId, double mag) const = 0;
53 :
54 : // Draw
55 : virtual void draw(SymId id, muse::draw::Painter* p, double mag, const PointF& pos, const double angle = 0) const = 0;
56 : virtual void draw(SymId id, muse::draw::Painter* p, const SizeF& mag, const PointF& pos, const double angle = 0) const = 0;
57 : virtual void draw(const SymIdList& ids, muse::draw::Painter* p, double mag, const PointF& pos, const double angle = 0) const = 0;
58 : virtual void draw(const SymIdList& ids, muse::draw::Painter* p, const SizeF& mag, const PointF& pos, const double angle = 0) const = 0;
59 : };
60 :
61 : using IEngravingFontPtr = std::shared_ptr<IEngravingFont>;
62 : }
63 :
64 : #endif // MU_ENGRAVING_IENGRAVINGFONT_H
|