]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/motif/font.h
Added wxNB_LEFT,RIGHT,BOTTOM for notebook tab placement
[wxWidgets.git] / include / wx / motif / font.h
index 8fb340bbb6e5c99fe4a477c3c2f4b98745197bc1..f5b5a2cb6f33ccefd0bb86872f2162f6f9def491 100644 (file)
 #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();