X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dfc5454127ac2195e10deebb216d82c674e757df..e839ce8d9b4f6d696891a1b99507fc1a09b424d7:/include/wx/motif/font.h diff --git a/include/wx/motif/font.h b/include/wx/motif/font.h index b5149ef4dc..f5b5a2cb6f 100644 --- a/include/wx/motif/font.h +++ b/include/wx/motif/font.h @@ -21,6 +21,20 @@ class WXDLLEXPORT wxFont; +// For every wxFont, there must be a font for each display and scale requested. +// So these objects are stored in wxFontRefData::m_fonts +class WXDLLEXPORT wxXFont: public wxObject +{ +public: + wxXFont(); + ~wxXFont(); + + WXFontStructPtr m_fontStruct; // XFontStruct + WXFontList m_fontList; // Motif XmFontList + WXDisplay* m_display; // XDisplay + int m_scale; // Scale * 100 +}; + class WXDLLEXPORT wxFontRefData: public wxGDIRefData { friend class WXDLLEXPORT wxFont; @@ -36,8 +50,8 @@ protected: bool m_underlined; wxString m_faceName; - // A list of XFontStructs indexed by scale (*100) - wxList m_fontsByScale; + // A list of wxXFonts + wxList m_fonts; }; #define M_FONTDATA ((wxFontRefData *)m_refData) @@ -52,7 +66,6 @@ public: wxFont(); wxFont(int pointSize, int family, int style, int weight, bool underlined = FALSE, const wxString& faceName = wxEmptyString); inline wxFont(const wxFont& font) { Ref(font); } - inline wxFont(const wxFont* font) { if (font) Ref(*font); } ~wxFont(); @@ -78,8 +91,8 @@ public: void SetUnderlined(bool underlined); inline wxFont& operator = (const wxFont& font) { if (*this == font) return (*this); Ref(font); return *this; } - inline bool operator == (const wxFont& font) { return m_refData == font.m_refData; } - inline bool operator != (const wxFont& font) { return m_refData != font.m_refData; } + inline bool operator == (const wxFont& font) const { return m_refData == font.m_refData; } + inline bool operator != (const wxFont& font) const { return m_refData != font.m_refData; } // Implementation @@ -87,16 +100,30 @@ public: // based on this wxFont and the given scale. Append the // font to list in the private data for future reference. - // TODO This is a very basic implementation, that doesn't + // TODO This is a fairly basic implementation, that doesn't // allow for different facenames, and also doesn't do a mapping // between 'standard' facenames (e.g. Arial, Helvetica, Times Roman etc.) // and the fonts that are available on a particular system. // Maybe we need to scan the user's machine to build up a profile // of the fonts and a mapping file. - WXFontStructPtr FindOrCreateFontStruct(double scale = 1.0); + // Return font struct, and optionally the Motif font list + wxXFont* GetInternalFont(double scale = 1.0, WXDisplay* display = NULL) const; + + // These two are helper functions for convenient access of the above. + inline WXFontStructPtr GetFontStruct(double scale = 1.0, WXDisplay* display = NULL) const + { + wxXFont* f = GetInternalFont(scale, display); + return (f ? f->m_fontStruct : (WXFontStructPtr) 0); + } + WXFontList GetFontList(double scale = 1.0, WXDisplay* display = NULL) const + { + wxXFont* f = GetInternalFont(scale, display); + return (f ? f->m_fontList : (WXFontList) 0); + } + WXFontStructPtr LoadQueryFont(int pointSize, int family, int style, - int weight, bool underlined); + int weight, bool underlined) const; protected: bool RealizeResource(); void Unshare();