]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/motif/font.h
Corrected wxlistBox, wxRadioBox, wxComboBox and
[wxWidgets.git] / include / wx / motif / font.h
index b5149ef4dc93e37da04219964237bb1288855ee2..f5b5a2cb6f33ccefd0bb86872f2162f6f9def491 100644 (file)
 
 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();