guit  0.1
 All Classes Functions Variables Typedefs Enumerations Friends
gfont.hpp
1 //
2 // Font Property.
3 // Guit GUI Toolkit
4 // Copyright © 2019/2020 Eric Lecolinet. All rights reserved.
5 // http://www.telecom-paris.fr/~elc
6 //
7 
8 #ifndef GuitFont_hpp
9 #define GuitFont_hpp
10 #include <gvarprop.hpp>
11 namespace guit {
12 
13 #if defined(_WIN32)
14 # undef small
15 #endif
16 
18 class GFontValue {
19 public:
20  ~GFontValue();
21  GFontValue();
22  GFontValue(GString const& fontspec);
23  GFontValue(GFontValue const&);
24  GFontValue(GFontValue const&&) = delete;
25 
26  GFontValue& operator=(GFontValue const&);
27 
28  bool operator==(GFontValue const&) const;
29  bool operator!=(GFontValue const&) const;
30 
31  uint8_t size() const;
32  float fontHeight() const;
33  float fontAscent() const;
34  float fontDescent() const;
35  float fontWidth() const; // size of letter C
36 
39  bool realize() const;
40 
43  GDim textSize(GString const& text, bool richtext, GTextAttributes const* = {}) const;
44 
45  mutable class GFontResource* impl{};
46 };
47 
48 
51 bool gconvert(GFontValue const& from, GFontValue& to);
52 bool gconvert(GString const& from, GFontValue& to);
53 bool gconvert(GFontValue const& from, GString& to);
55 
56 
58 class GFont : public GVarProp_<GFontValue> {
59 public:
61 
63  static GFont regular, bold, italic, large, small;
64 
65  GFont();
66 
72  GFont(GString const& fontname);
73 
74  GFont(GFontValue const& value);
75 
76  GFont* clone(bool copy_value) const override;
77 
80  GPropRef operator~() {return GPropRef(*this);}
81 
82  GFont& operator=(GFont const& font) {set(font); return *this;}
83  GFont& operator=(GString const& font) {set(font); return *this;}
84 
85  uint8_t size() const {return value_.size();}
86  float fontHeight() const {return value_.fontHeight();}
87  float fontAscent() const {return value_.fontAscent();}
88  float fontDescent() const {return value_.fontDescent();}
89  float fontWidth() const {return value_.fontWidth();} // size of letter C
90 
93  GDim textSize(GString const& str, bool richtext, GTextAttributes const* attr = {}) const {
94  return value_.textSize(str, richtext, attr);
95  }
96 
97  using GType = GPropType_<GFont,GProp>;
98  static GType& Type();
99  GType& type() const override {return Type();}
100 
101 protected:
102  friend class Graphics;
103  void apply(Gadget*, GRender&, Specif) final;
104  void updateGadget(Gadget&) override;
105 private:
106  GFont(GString const& fontname, int); // for creating static vars
107 };
108 
111 inline GFont& Font() {return *new GFont();}
112 inline GFont& Font(GString const& value) {return *new GFont(value);}
114 
115 }
116 #endif