| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: wx/private/fontmgr.h
- // Purpose: font management for ports that don't have their own
- // Author: Vaclav Slavik
- // Created: 2006-11-18
- // Copyright: (c) 2001-2002 SciTech Software, Inc. (www.scitechsoft.com)
- // (c) 2006 REA Elektronik GmbH
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_PRIVATE_FONTMGR_H_
- #define _WX_PRIVATE_FONTMGR_H_
- #include "wx/list.h"
- #include "wx/fontutil.h"
- class wxFontsManager;
- class wxFontInstance;
- class wxFontInstanceList;
- class wxFontFace;
- class wxFontBundle;
- class wxFontBundleHash;
- class wxFontMgrFontRefData;
- WX_DECLARE_LIST(wxFontBundle, wxFontBundleList);
- /**
- This class represents single font face with set parameters (point size,
- antialiasing).
- */
- class wxFontInstanceBase
- {
- protected:
- wxFontInstanceBase(float ptSize, bool aa) : m_ptSize(ptSize), m_aa(aa) {}
- virtual ~wxFontInstanceBase() {}
- public:
- float GetPointSize() const { return m_ptSize; }
- bool IsAntiAliased() const { return m_aa; }
- protected:
- float m_ptSize;
- bool m_aa;
- };
- /// This class represents loaded font face (bundle+weight+italics).
- class wxFontFaceBase
- {
- protected:
- /// Ctor. Creates object with reference count = 0, Acquire() must be
- /// called after the object is created.
- wxFontFaceBase();
- virtual ~wxFontFaceBase();
- public:
- /// Increases reference count of the face
- virtual void Acquire();
- /**
- Decreases reference count of the face. Call this when you no longer
- use the object returned by wxFontBundle. Note that this doesn't destroy
- the object, but only optionally shuts it down, so it's possible to
- call Acquire() and Release() more than once.
- */
- virtual void Release();
- /**
- Returns instance of the font at given size.
- @param ptSize point size of the font to create; note that this is
- a float and not integer, it should be wxFont's point
- size multipled by wxDC's scale factor
- @param aa should the font be antialiased?
- */
- virtual wxFontInstance *GetFontInstance(float ptSize, bool aa);
- protected:
- /// Called to create a new instance of the font by GetFontInstance() if
- /// it wasn't found it cache.
- virtual wxFontInstance *CreateFontInstance(float ptSize, bool aa) = 0;
- protected:
- unsigned m_refCnt;
- wxFontInstanceList *m_instances;
- };
- /**
- This class represents font bundle. Font bundle is set of faces that have
- the same name, but differ in weight and italics.
- */
- class wxFontBundleBase
- {
- public:
- wxFontBundleBase();
- virtual ~wxFontBundleBase();
- /// Returns name of the bundle
- virtual wxString GetName() const = 0;
- /// Returns true if the font is fixe-width
- virtual bool IsFixed() const = 0;
- /// Type of faces in the bundle
- enum FaceType
- {
- // NB: values of these constants are set so that it's possible to
- // make OR-combinations of them and still get valid enum element
- FaceType_Regular = 0,
- FaceType_Italic = 1,
- FaceType_Bold = 2,
- FaceType_BoldItalic = FaceType_Italic | FaceType_Bold,
- FaceType_Max
- };
- /// Returns true if the given face is available
- bool HasFace(FaceType type) const { return m_faces[type] != NULL; }
- /**
- Returns font face object that can be used to render font of given type.
- Note that this method can only be called if HasFace(type) returns true.
- Acquire() was called on the returned object, you must call Release()
- when you stop using it.
- */
- wxFontFace *GetFace(FaceType type) const;
- /**
- Returns font face object that can be used to render given font.
- Acquire() was called on the returned object, you must call Release()
- when you stop using it.
- */
- wxFontFace *GetFaceForFont(const wxFontMgrFontRefData& font) const;
- protected:
- wxFontFace *m_faces[FaceType_Max];
- };
- /**
- Base class for wxFontsManager class, which manages the list of all
- available fonts and their loaded instances.
- */
- class wxFontsManagerBase
- {
- protected:
- wxFontsManagerBase();
- virtual ~wxFontsManagerBase();
- public:
- /// Returns the font manager singleton, creating it if it doesn't exist
- static wxFontsManager *Get();
- /// Called by wxApp to shut down the manager
- static void CleanUp();
- /// Returns list of all available font bundles
- const wxFontBundleList& GetBundles() const { return *m_list; }
- /**
- Returns object representing font bundle with the given name.
- The returned object is owned by wxFontsManager, you must not delete it.
- */
- wxFontBundle *GetBundle(const wxString& name) const;
- /**
- Returns object representing font bundle that can be used to render
- given font.
- The returned object is owned by wxFontsManager, you must not delete it.
- */
- wxFontBundle *GetBundleForFont(const wxFontMgrFontRefData& font) const;
- /// This method must be called by derived
- void AddBundle(wxFontBundle *bundle);
- /// Returns default facename for given wxFont family
- virtual wxString GetDefaultFacename(wxFontFamily family) const = 0;
- private:
- wxFontBundleHash *m_hash;
- wxFontBundleList *m_list;
- protected:
- static wxFontsManager *ms_instance;
- };
- #if defined(__WXDFB__)
- #include "wx/dfb/private/fontmgr.h"
- #endif
- /// wxFontMgrFontRefData implementation using wxFontsManager classes
- class wxFontMgrFontRefData : public wxGDIRefData
- {
- public:
- wxFontMgrFontRefData(int size = wxDEFAULT,
- wxFontFamily family = wxFONTFAMILY_DEFAULT,
- wxFontStyle style = wxFONTSTYLE_NORMAL,
- wxFontWeight weight = wxFONTWEIGHT_NORMAL,
- bool underlined = false,
- const wxString& faceName = wxEmptyString,
- wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
- wxFontMgrFontRefData(const wxFontMgrFontRefData& data);
- ~wxFontMgrFontRefData();
- wxFontBundle *GetFontBundle() const;
- wxFontInstance *GetFontInstance(float scale, bool antialiased) const;
- bool IsFixedWidth() const { return GetFontBundle()->IsFixed(); }
- const wxNativeFontInfo *GetNativeFontInfo() const { return &m_info; }
- int GetPointSize() const { return m_info.pointSize; }
- wxString GetFaceName() const { return m_info.faceName; }
- wxFontFamily GetFamily() const { return m_info.family; }
- wxFontStyle GetStyle() const { return m_info.style; }
- wxFontWeight GetWeight() const { return m_info.weight; }
- bool GetUnderlined() const { return m_info.underlined; }
- wxFontEncoding GetEncoding() const { return m_info.encoding; }
- void SetPointSize(int pointSize);
- void SetFamily(wxFontFamily family);
- void SetStyle(wxFontStyle style);
- void SetWeight(wxFontWeight weight);
- void SetFaceName(const wxString& faceName);
- void SetUnderlined(bool underlined);
- void SetEncoding(wxFontEncoding encoding);
- private:
- void EnsureValidFont();
- wxNativeFontInfo m_info;
- wxFontFace *m_fontFace;
- wxFontBundle *m_fontBundle;
- bool m_fontValid;
- };
- #endif // _WX_PRIVATE_FONTMGR_H_
|