1 ///////////////////////////////////////////////////////////////////////////// 2 // Name: wx/private/fontmgr.h 3 // Purpose: font management for ports that don't have their own 4 // Author: Vaclav Slavik 5 // Created: 2006-11-18 6 // RCS-ID: $Id: fontmgr.h 43855 2006-12-07 08:57:44Z PC $ 7 // Copyright: (c) 2001-2002 SciTech Software, Inc. (www.scitechsoft.com) 8 // (c) 2006 REA Elektronik GmbH 9 // Licence: wxWindows licence 10 ///////////////////////////////////////////////////////////////////////////// 11 12 #ifndef _WX_PRIVATE_FONTMGR_H_ 13 #define _WX_PRIVATE_FONTMGR_H_ 14 15 #include "wx/list.h" 16 #include "wx/fontutil.h" 17 18 class wxFontsManager; 19 class wxFontInstance; 20 class wxFontInstanceList; 21 class wxFontFace; 22 class wxFontBundle; 23 class wxFontBundleHash; 24 class wxFontMgrFontRefData; 25 26 WX_DECLARE_LIST(wxFontBundle, wxFontBundleList); 27 28 /** 29 This class represents single font face with set parameters (point size, 30 antialiasing). 31 */ 32 class wxFontInstanceBase 33 { 34 protected: wxFontInstanceBase(float ptSize,bool aa)35 wxFontInstanceBase(float ptSize, bool aa) : m_ptSize(ptSize), m_aa(aa) {} ~wxFontInstanceBase()36 virtual ~wxFontInstanceBase() {} 37 38 public: GetPointSize()39 float GetPointSize() const { return m_ptSize; } IsAntiAliased()40 bool IsAntiAliased() const { return m_aa; } 41 42 protected: 43 float m_ptSize; 44 bool m_aa; 45 }; 46 47 48 /// This class represents loaded font face (bundle+weight+italics). 49 class wxFontFaceBase 50 { 51 protected: 52 /// Ctor. Creates object with reference count = 0, Acquire() must be 53 /// called after the object is created. 54 wxFontFaceBase(); 55 virtual ~wxFontFaceBase(); 56 57 public: 58 /// Increases reference count of the face 59 virtual void Acquire(); 60 61 /** 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. 66 */ 67 virtual void Release(); 68 69 /** 70 Returns instance of the font at given size. 71 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? 76 */ 77 virtual wxFontInstance *GetFontInstance(float ptSize, bool aa); 78 79 protected: 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; 83 84 protected: 85 unsigned m_refCnt; 86 wxFontInstanceList *m_instances; 87 }; 88 89 /** 90 This class represents font bundle. Font bundle is set of faces that have 91 the same name, but differ in weight and italics. 92 */ 93 class wxFontBundleBase 94 { 95 public: 96 wxFontBundleBase(); 97 virtual ~wxFontBundleBase(); 98 99 /// Returns name of the bundle 100 virtual wxString GetName() const = 0; 101 102 /// Returns true if the font is fixe-width 103 virtual bool IsFixed() const = 0; 104 105 /// Type of faces in the bundle 106 enum FaceType 107 { 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, 111 FaceType_Italic = 1, 112 FaceType_Bold = 2, 113 FaceType_BoldItalic = FaceType_Italic | FaceType_Bold, 114 115 FaceType_Max 116 }; 117 118 /// Returns true if the given face is available HasFace(FaceType type)119 bool HasFace(FaceType type) const { return m_faces[type] != NULL; } 120 121 /** 122 Returns font face object that can be used to render font of given type. 123 124 Note that this method can only be called if HasFace(type) returns true. 125 126 Acquire() was called on the returned object, you must call Release() 127 when you stop using it. 128 */ 129 wxFontFace *GetFace(FaceType type) const; 130 131 /** 132 Returns font face object that can be used to render given font. 133 134 Acquire() was called on the returned object, you must call Release() 135 when you stop using it. 136 */ 137 wxFontFace *GetFaceForFont(const wxFontMgrFontRefData& font) const; 138 139 protected: 140 wxFontFace *m_faces[FaceType_Max]; 141 }; 142 143 144 /** 145 Base class for wxFontsManager class, which manages the list of all 146 available fonts and their loaded instances. 147 */ 148 class wxFontsManagerBase 149 { 150 protected: 151 wxFontsManagerBase(); 152 virtual ~wxFontsManagerBase(); 153 154 public: 155 /// Returns the font manager singleton, creating it if it doesn't exist 156 static wxFontsManager *Get(); 157 158 /// Called by wxApp to shut down the manager 159 static void CleanUp(); 160 161 /// Returns list of all available font bundles GetBundles()162 const wxFontBundleList& GetBundles() const { return *m_list; } 163 164 /** 165 Returns object representing font bundle with the given name. 166 167 The returned object is owned by wxFontsManager, you must not delete it. 168 */ 169 wxFontBundle *GetBundle(const wxString& name) const; 170 171 /** 172 Returns object representing font bundle that can be used to render 173 given font. 174 175 The returned object is owned by wxFontsManager, you must not delete it. 176 */ 177 wxFontBundle *GetBundleForFont(const wxFontMgrFontRefData& font) const; 178 179 /// This method must be called by derived 180 void AddBundle(wxFontBundle *bundle); 181 182 /// Returns default facename for given wxFont family 183 virtual wxString GetDefaultFacename(wxFontFamily family) const = 0; 184 185 private: 186 wxFontBundleHash *m_hash; 187 wxFontBundleList *m_list; 188 189 protected: 190 static wxFontsManager *ms_instance; 191 }; 192 193 194 195 #if defined(__WXMGL__) 196 #include "wx/mgl/private/fontmgr.h" 197 #elif defined(__WXDFB__) 198 #include "wx/dfb/private/fontmgr.h" 199 #endif 200 201 202 203 /// wxFontMgrFontRefData implementation using wxFontsManager classes 204 class wxFontMgrFontRefData : public wxObjectRefData 205 { 206 public: 207 wxFontMgrFontRefData(int size = wxDEFAULT, 208 int family = wxDEFAULT, 209 int style = wxDEFAULT, 210 int weight = wxDEFAULT, 211 bool underlined = false, 212 const wxString& faceName = wxEmptyString, 213 wxFontEncoding encoding = wxFONTENCODING_DEFAULT); 214 wxFontMgrFontRefData(const wxFontMgrFontRefData& data); 215 ~wxFontMgrFontRefData(); 216 217 wxFontBundle *GetFontBundle() const; 218 wxFontInstance *GetFontInstance(float scale, bool antialiased) const; 219 IsFixedWidth()220 bool IsFixedWidth() const { return GetFontBundle()->IsFixed(); } 221 GetNativeFontInfo()222 const wxNativeFontInfo *GetNativeFontInfo() const { return &m_info; } 223 GetPointSize()224 int GetPointSize() const { return m_info.pointSize; } GetFaceName()225 wxString GetFaceName() const { return m_info.faceName; } GetFamily()226 int GetFamily() const { return m_info.family; } GetStyle()227 int GetStyle() const { return m_info.style; } GetWeight()228 int GetWeight() const { return m_info.weight; } GetUnderlined()229 bool GetUnderlined() const { return m_info.underlined; } GetEncoding()230 wxFontEncoding GetEncoding() const { return m_info.encoding; } 231 232 void SetPointSize(int pointSize); 233 void SetFamily(int family); 234 void SetStyle(int style); 235 void SetWeight(int weight); 236 void SetFaceName(const wxString& faceName); 237 void SetUnderlined(bool underlined); 238 void SetEncoding(wxFontEncoding encoding); 239 240 // Unofficial API, don't use 241 void SetNoAntiAliasing(bool no); GetNoAntiAliasing()242 bool GetNoAntiAliasing() const { return m_noAA; } 243 244 private: 245 void EnsureValidFont(); 246 247 wxNativeFontInfo m_info; 248 bool m_noAA; 249 250 wxFontFace *m_fontFace; 251 wxFontBundle *m_fontBundle; 252 bool m_fontValid; 253 }; 254 255 #endif // _WX_PRIVATE_FONTMGR_H_ 256