X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9b6dbb09746f8f5ee0549a2ff39ae0ac4c725898..f8c4475a3e579655f6a962822824596a7a9cfb66:/include/wx/motif/font.h diff --git a/include/wx/motif/font.h b/include/wx/motif/font.h index 8fb340bbb6..f5b5a2cb6f 100644 --- a/include/wx/motif/font.h +++ b/include/wx/motif/font.h @@ -17,9 +17,24 @@ #endif #include "wx/gdiobj.h" +#include "wx/list.h" 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; @@ -34,9 +49,9 @@ protected: int m_weight; bool m_underlined; wxString m_faceName; -/* TODO: implementation - WXHFONT m_hFont; -*/ + + // A list of wxXFonts + wxList m_fonts; }; #define M_FONTDATA ((wxFontRefData *)m_refData) @@ -51,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(); @@ -77,10 +91,39 @@ 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; } - - // Implementation + 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 + + // Find an existing, or create a new, XFontStruct + // based on this wxFont and the given scale. Append the + // font to list in the private data for future reference. + + // 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. + + // 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) const; protected: bool RealizeResource(); void Unshare();