ubit
ufont.hpp
1 /************************************************************************
2  *
3  * ufont.hpp: Font Attribute
4  * Ubit GUI Toolkit - Version 6
5  * (C) 2009 | Eric Lecolinet | TELECOM ParisTech | http://www.enst.fr/~elc/ubit
6  *
7  * ***********************************************************************
8  * COPYRIGHT NOTICE :
9  * THIS PROGRAM IS DISTRIBUTED WITHOUT ANY WARRANTY AND WITHOUT EVEN THE
10  * IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
11  * YOU CAN REDISTRIBUTE IT AND/OR MODIFY IT UNDER THE TERMS OF THE GNU
12  * GENERAL PUBLIC LICENSE AS PUBLISHED BY THE FREE SOFTWARE FOUNDATION;
13  * EITHER VERSION 2 OF THE LICENSE, OR (AT YOUR OPTION) ANY LATER VERSION.
14  * SEE FILES 'COPYRIGHT' AND 'COPYING' FOR MORE DETAILS.
15  * ***********************************************************************/
16 
17 #ifndef _ufont_hpp_
18 #define _ufont_hpp_ 1
19 #include <ubit/uattr.hpp>
20 #include <ubit/ustr.hpp>
21 namespace ubit {
22 
30  class UFont : public UAttr {
31  public:
32  UCLASS(UFont)
33 
34  enum Style {
35  PLAIN = 0,
36  BOLD = 1<<0, // DON'T CHANGE VALUE!
37  ITALIC = 1<<1, // DON'T CHANGE VALUE!
38  FILL = 1<<2,
39  UNDERLINE = 1<<3,
40  OVERLINE = 1<<4,
41  STRIKETHROUGH = 1<<5
42  };
44 
45  static UFont sans_serif, serif, monospace;
47 
48  static UFont xx_small, x_small, small, medium, large, x_large, xx_large;
50 
51  static UFont plain, bold, italic, fill, underline, overline, strikethrough;
58  UFont();
60 
61  UFont(const UFont&);
63 
64  UFont(const UFont& font, int style, float pixel_size);
72  UFont(const UFontFamily&, int style, float point_size);
79  virtual UFont& operator=(const UFont& f) {set(f); return *this;}
81 
82  virtual void set(const UFont&);
84 
85  virtual bool operator==(const UFont& f) const {return equals(f);}
86  virtual bool operator!=(const UFont& f) const {return !equals(f);}
87  virtual bool equals(const UFont&) const;
89 
90  const UFontFamily& getFamily() const {return *family;}
92 
93  float getPixelSize() const {return fsize;}
95 
96  float getPointSize() const;
98 
99  int getStyles() const {return on_styles;}
101 
102  UFont& setFamily(const UFontFamily&);
104 
105  UFont& setFamily(const UStr& font_families);
107 
108  UFont& setSize(const UStr& size);
110 
111  UFont& setPixelSize(float pixel_size);
113 
114  UFont& setPointSize(float point_size);
116 
117  UFont& setStyles(int styles);
119 
120  UFont& changeStyles(int styles, bool add);
126  bool isPlain() const;
127  bool isBold() const;
128  bool isItalic() const;
129  bool isFilled() const;
130  bool isUnderlined() const;
131  bool isOverlined() const;
132  bool isStrikethrough() const;
133 
134  UFont& setBold(bool = true);
135  UFont& setItalic(bool = true);
136  UFont& setFilled(bool = true);
137  UFont& setUnderlined(bool = true);
138  UFont& setOverlined(bool = true);
139  UFont& setStrikethrough(bool = true);
140 
141  void merge(const UFont&);
146  virtual void update();
148 
149  // - impl. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
150 
151  virtual void realize(UDisp*);
159  virtual void putProp(UUpdateContext*, UElem&);
160 
161  private:
162  friend class UDisp;
163  friend class UFontDesc;
164  const UFontFamily* family;
165  //short size;
166  float fsize;
167  short on_styles, off_styles; // activated and disactivated styles
168  UFont(const UFontFamily*, int styles, float pixel_size, UConst);
169  };
170 
171  inline UFont& ufont(const UFont& f) {return *new UFont(f);}
173 
174 
175  /* ==================================================== ===== ======= */
179  class UFontFamily : public UObject {
180  public:
181  static UFontFamily sans_serif, serif, monospace;
183 
189  UFontFamily(const UStr& logical_name);
191 
193 
194  const UStr& getName() const {return name;}
195 
196  void setFamily(const char* native_families);
198 
199  void setStyles(const char* normal_styles, const char* italic_styles);
201 
202  void setWeights(const char* normal_weights, const char* bold_weights);
204 
205  void setCompression(const char* compressions);
206 
207  void setEncoding(const char* encodings);
208 
209  void setPreferredSizes(const char* sizes);
210 
211  void setFreeType(const char* regular_files,
212  const char* bold_files,
213  const char* italic_files,
214  const char* bold_italic_files);
220  // - impl. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
221  protected:
222  friend class UFontDesc;
223  friend class UHardFont;
224  friend class UDisp;
225 
226  UFontFamily(const char* logical_name, UConst); // private constr
227  UFontFamily(const UFontFamily&); // forbidden
228 
229  void initSizes() const;
230  int sizeToIndex(float fsize) const;
231 
232  static int family_count;
233  mutable int ffindex;
234  mutable bool ready;
235  UStr name;
236  mutable std::vector<int> fsizes;
237  struct Defs {
238  UStr
239  families,
240  normal_style,
241  italic_style,
242  normal_weight,
243  bold_weight,
244  compression,
245  encoding,
246  preferred_sizes,
247  fty_regular, fty_bold, fty_italic, fty_bold_italic; // freetype
248  } defs;
249  };
250 
251 }
252 #endif
Base class for attributes.
Definition: uattr.hpp:97
Definition: ufont.hpp:237
[Impl] Native Font.
Definition: uhardfont.hpp:35
Definition: uobject.hpp:282
float getPointSize() const
returns the font size (in points).
Definition: ufont.cpp:362
virtual void update()
update parents&#39; graphics.
Definition: ufont.cpp:429
UFont & changeStyles(int styles, bool add)
changes the font style.
Definition: ufont.cpp:376
UFont & setSize(const UStr &size)
changes the font size.
Definition: ufont.cpp:325
Display Context.
Definition: udisp.hpp:44
int getStyles() const
returns the font styles.
Definition: ufont.hpp:99
UFont()
create a new UFont;
Definition: ufont.cpp:229
static UFont monospace
default font family modifiers.
Definition: ufont.hpp:45
float getPixelSize() const
returns the font size (in pixels).
Definition: ufont.hpp:93
[impl] Internal representation for fonts.
Definition: ufontImpl.hpp:24
static UFontFamily defaults
specifies default characteristics used when FontFamilies can&#39;t be found should be changed before crea...
Definition: ufont.hpp:184
static UFont xx_large
default font size modifiers.
Definition: ufont.hpp:48
UFont & setPointSize(float point_size)
changes the font size (in points).
Definition: ufont.cpp:351
UFont & setStyles(int styles)
changes the font styles.
Definition: ufont.cpp:368
A Font Family represents a collection of fonts for all possible sizes and styles. ...
Definition: ufont.hpp:179
const UFontFamily & getFamily() const
returns the font family.
Definition: ufont.hpp:90
lightweight general purpose container.
Definition: uelem.hpp:44
virtual UFont & operator=(const UFont &f)
copies font.
Definition: ufont.hpp:79
virtual bool equals(const UFont &) const
compares fonts.
Definition: ufont.cpp:260
virtual void realize(UDisp *)
[impl] allocates physical resources.
Definition: ufont.cpp:440
UFont & setPixelSize(float pixel_size)
changes the font size (in pixels).
Definition: ufont.cpp:343
void merge(const UFont &)
merge font characteristics.
Definition: ufont.cpp:249
static UFont strikethrough
font style modifiers.
Definition: ufont.hpp:51
UFont & setFamily(const UFontFamily &)
changes the font family.
Font of a UElem or UBox container.
Definition: ufont.hpp:30
Definition: uupdatecontext.hpp:32
Definition: uhardfont.hpp:31
virtual const UStr & getName() const
returns the name of this attribute.
Definition: uattr.hpp:118
static UFontFamily monospace
predefined font families that can be used in UFont(s).
Definition: ufont.hpp:181
Ubit String.
Definition: ustr.hpp:72
virtual void putProp(UUpdateContext *, UElem &)
[impl] changes corresponding value in the UUpdateContext
Definition: ufont.cpp:447
Base class of most Ubit objects (SEE DETAILS!).
Definition: uobject.hpp:113