#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;
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)
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();
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();