1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/private/fontmgr.h
3 // Purpose: font management for ports that don't have their own
4 // Author: Vaclav Slavik
7 // Copyright: (c) 2001-2002 SciTech Software, Inc. (www.scitechsoft.com)
8 // (c) 2006 REA Elektronik GmbH
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 #ifndef _WX_PRIVATE_FONTMGR_H_
13 #define _WX_PRIVATE_FONTMGR_H_
16 #include "wx/fontutil.h"
20 class wxFontInstanceList
;
23 class wxFontBundleHash
;
24 class wxFontMgrFontRefData
;
26 WX_DECLARE_LIST(wxFontBundle
, wxFontBundleList
);
29 This class represents single font face with set parameters (point size,
32 class wxFontInstanceBase
35 wxFontInstanceBase(float ptSize
, bool aa
) : m_ptSize(ptSize
), m_aa(aa
) {}
36 virtual ~wxFontInstanceBase() {}
39 float GetPointSize() const { return m_ptSize
; }
40 bool IsAntiAliased() const { return m_aa
; }
48 /// This class represents loaded font face (bundle+weight+italics).
52 /// Ctor. Creates object with reference count = 0, Acquire() must be
53 /// called after the object is created.
55 virtual ~wxFontFaceBase();
58 /// Increases reference count of the face
59 virtual void Acquire();
62 Decreases reference count of the face. Call this when you no longer
63 use the object returned by wxFontBundle. Note that this doesn't destroy
64 the object, but only optionally shuts it down, so it's possible to
65 call Acquire() and Release() more than once.
67 virtual void Release();
70 Returns instance of the font at given size.
72 @param ptSize point size of the font to create; note that this is
73 a float and not integer, it should be wxFont's point
74 size multipled by wxDC's scale factor
75 @param aa should the font be antialiased?
77 virtual wxFontInstance
*GetFontInstance(float ptSize
, bool aa
);
80 /// Called to create a new instance of the font by GetFontInstance() if
81 /// it wasn't found it cache.
82 virtual wxFontInstance
*CreateFontInstance(float ptSize
, bool aa
) = 0;
86 wxFontInstanceList
*m_instances
;
90 This class represents font bundle. Font bundle is set of faces that have
91 the same name, but differ in weight and italics.
93 class wxFontBundleBase
97 virtual ~wxFontBundleBase();
99 /// Returns name of the bundle
100 virtual wxString
GetName() const = 0;
102 /// Returns true if the font is fixe-width
103 virtual bool IsFixed() const = 0;
105 /// Type of faces in the bundle
108 // NB: values of these constants are set so that it's possible to
109 // make OR-combinations of them and still get valid enum element
110 FaceType_Regular
= 0,
113 FaceType_BoldItalic
= FaceType_Italic
| FaceType_Bold
,
118 /// Returns true if the given face is available
119 bool HasFace(FaceType type
) const { return m_faces
[type
] != NULL
; }
122 Returns font face object that can be used to render font of given type.
124 Note that this method can only be called if HasFace(type) returns true.
126 Acquire() was called on the returned object, you must call Release()
127 when you stop using it.
129 wxFontFace
*GetFace(FaceType type
) const;
132 Returns font face object that can be used to render given font.
134 Acquire() was called on the returned object, you must call Release()
135 when you stop using it.
137 wxFontFace
*GetFaceForFont(const wxFontMgrFontRefData
& font
) const;
140 wxFontFace
*m_faces
[FaceType_Max
];
145 Base class for wxFontsManager class, which manages the list of all
146 available fonts and their loaded instances.
148 class wxFontsManagerBase
151 wxFontsManagerBase();
152 virtual ~wxFontsManagerBase();
155 /// Returns the font manager singleton, creating it if it doesn't exist
156 static wxFontsManager
*Get();
158 /// Called by wxApp to shut down the manager
159 static void CleanUp();
161 /// Returns list of all available font bundles
162 const wxFontBundleList
& GetBundles() const { return *m_list
; }
165 Returns object representing font bundle with the given name.
167 The returned object is owned by wxFontsManager, you must not delete it.
169 wxFontBundle
*GetBundle(const wxString
& name
) const;
172 Returns object representing font bundle that can be used to render
175 The returned object is owned by wxFontsManager, you must not delete it.
177 wxFontBundle
*GetBundleForFont(const wxFontMgrFontRefData
& font
) const;
179 /// This method must be called by derived
180 void AddBundle(wxFontBundle
*bundle
);
182 /// Returns default facename for given wxFont family
183 virtual wxString
GetDefaultFacename(wxFontFamily family
) const = 0;
186 wxFontBundleHash
*m_hash
;
187 wxFontBundleList
*m_list
;
190 static wxFontsManager
*ms_instance
;
195 #if defined(__WXDFB__)
196 #include "wx/dfb/private/fontmgr.h"
201 /// wxFontMgrFontRefData implementation using wxFontsManager classes
202 class wxFontMgrFontRefData
: public wxGDIRefData
205 wxFontMgrFontRefData(int size
= wxDEFAULT
,
206 wxFontFamily family
= wxFONTFAMILY_DEFAULT
,
207 wxFontStyle style
= wxFONTSTYLE_NORMAL
,
208 wxFontWeight weight
= wxFONTWEIGHT_NORMAL
,
209 bool underlined
= false,
210 const wxString
& faceName
= wxEmptyString
,
211 wxFontEncoding encoding
= wxFONTENCODING_DEFAULT
);
212 wxFontMgrFontRefData(const wxFontMgrFontRefData
& data
);
213 ~wxFontMgrFontRefData();
215 wxFontBundle
*GetFontBundle() const;
216 wxFontInstance
*GetFontInstance(float scale
, bool antialiased
) const;
218 bool IsFixedWidth() const { return GetFontBundle()->IsFixed(); }
220 const wxNativeFontInfo
*GetNativeFontInfo() const { return &m_info
; }
222 int GetPointSize() const { return m_info
.pointSize
; }
223 wxString
GetFaceName() const { return m_info
.faceName
; }
224 wxFontFamily
GetFamily() const { return m_info
.family
; }
225 wxFontStyle
GetStyle() const { return m_info
.style
; }
226 wxFontWeight
GetWeight() const { return m_info
.weight
; }
227 bool GetUnderlined() const { return m_info
.underlined
; }
228 wxFontEncoding
GetEncoding() const { return m_info
.encoding
; }
230 void SetPointSize(int pointSize
);
231 void SetFamily(wxFontFamily family
);
232 void SetStyle(wxFontStyle style
);
233 void SetWeight(wxFontWeight weight
);
234 void SetFaceName(const wxString
& faceName
);
235 void SetUnderlined(bool underlined
);
236 void SetEncoding(wxFontEncoding encoding
);
239 void EnsureValidFont();
241 wxNativeFontInfo m_info
;
243 wxFontFace
*m_fontFace
;
244 wxFontBundle
*m_fontBundle
;
248 #endif // _WX_PRIVATE_FONTMGR_H_