]> git.saurik.com Git - wxWidgets.git/commitdiff
wxNativeFontInfo changes
authorVadim Zeitlin <vadim@wxwidgets.org>
Mon, 18 Dec 2000 21:15:16 +0000 (21:15 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Mon, 18 Dec 2000 21:15:16 +0000 (21:15 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@8949 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

17 files changed:
include/wx/cmndata.h
include/wx/defs.h
include/wx/font.h
include/wx/fontenc.h
include/wx/fontmap.h
include/wx/fontutil.h
include/wx/gtk/font.h
include/wx/gtk1/font.h
samples/font/font.cpp
src/common/fontcmn.cpp
src/common/fontmap.cpp
src/gtk/data.cpp
src/gtk/font.cpp
src/gtk/fontdlg.cpp
src/gtk1/data.cpp
src/gtk1/font.cpp
src/gtk1/fontdlg.cpp

index 7cfa51d570fa2b01807fad1e1ffed8132f422a0c..028c27fe4f1d8c481cab74a703365da53fd927d6 100644 (file)
@@ -18,7 +18,6 @@
 
 #include "wx/window.h"
 #include "wx/font.h"
-#include "wx/fontutil.h"
 #include "wx/colour.h"
 #include "wx/gdicmn.h"
 
index 8c13ac9d345698abc6a1f8bf4ad5615c895bc7c6..f1bd9ecc3344511488b07ef14a71b1c1eef79f17 100644 (file)
@@ -1697,9 +1697,16 @@ typedef enum {
     wxPRINT_MODE_PRINTER = 3    // Send to printer
 } wxPrintMode;
 
-// ---------------------------------------------------------------------------
-// Macro to specify "All Files" on different platforms
-// ---------------------------------------------------------------------------
+// ----------------------------------------------------------------------------
+// miscellaneous
+// ----------------------------------------------------------------------------
+
+// define this macro if font handling is done using the X font names
+#if defined(__WXGTK__) || defined(__X__)
+    #define _WX_X_FONTLIKE
+#endif
+
+// macro to specify "All Files" on different platforms
 #if defined(__WXMSW__)
 #   define wxALL_FILES_PATTERN   "*.*"
 #   define wxALL_FILES           gettext_noop("All files (*.*)|*.*")
@@ -1707,6 +1714,7 @@ typedef enum {
 #   define wxALL_FILES_PATTERN   "*"
 #   define wxALL_FILES           gettext_noop("All files (*)|*")
 #endif
+
 // ---------------------------------------------------------------------------
 // macros that enable wxWindows apps to be compiled in absence of the
 // sytem headers, although some platform specific types are used in the
index 3010028809358db7f5ea10890efddf57ac24806f..fe9632599cefe0d8fde6f9766a69656e7a4f5ba1 100644 (file)
@@ -67,50 +67,19 @@ enum wxFontWeight
     wxFONTWEIGHT_MAX
 };
 
-// ----------------------------------------------------------------------------
-// wxNativeFontInfo is platform-specific font representation
-// ----------------------------------------------------------------------------
-
-// this struct should be considered as opaque font description only used by
-// the native functions, the user code can only get the objects of this type
-// from somewhere and pass it somewhere else (possibly save them somewhere
-// using ToString() and restore them using FromString())
-struct WXDLLEXPORT wxNativeFontInfo
-{
-#if defined(__WXGTK__)
-    wxString     xFontName;
-#else // other platforms
-    //
-    //  This is a generic implementation that should work on all ports
-    //  without specific support by the port.
-    //
-    int           pointSize;
-    int           family;
-    int           style;
-    int           weight;
-    bool          underlined;
-    wxString      faceName;
-    wxFontEncoding encoding;
-#endif // platforms
-
-    // it is important to be able to serialize wxNativeFontInfo objects to be
-    // able to store them (in config file, for example)
-    bool FromString(const wxString& s);
-    wxString ToString() const;
-};
-
-WXDLLEXPORT_DATA(extern wxNativeFontInfo) wxNullNativeFontInfo;
-
 // ----------------------------------------------------------------------------
 // wxFontBase represents a font object
 // ----------------------------------------------------------------------------
 
 class WXDLLEXPORT wxFontRefData;
+class WXDLLEXPORT wxNativeFontInfo;
 
 class WXDLLEXPORT wxFontBase : public wxGDIObject
 {
 public:
     // creator function
+
+    // from the font components
     static wxFont *New(
         int pointSize,              // size of the font in points
         int family,                 // see wxFontFamily enum
@@ -119,7 +88,12 @@ public:
         bool underlined = FALSE,    // not underlined by default
         const wxString& face = wxEmptyString,              // facename
         wxFontEncoding encoding = wxFONTENCODING_DEFAULT); // ISO8859-X, ...
-    static wxFont *New(const wxNativeFontInfo& info);
+
+    // from the (opaque) native font description object
+    static wxFont *New(const wxNativeFontInfo& nativeFontDesc);
+
+    // from the string representation of wxNativeFontInfo
+    static wxFont *New(const wxString& strNativeFontDesc);
 
     // was the font successfully created?
     bool Ok() const { return m_refData != NULL; }
@@ -136,7 +110,8 @@ public:
     virtual bool GetUnderlined() const = 0;
     virtual wxString GetFaceName() const = 0;
     virtual wxFontEncoding GetEncoding() const = 0;
-    virtual wxNativeFontInfo GetNativeFontInfo() const;
+    virtual wxNativeFontInfo *GetNativeFontInfo() const;
+    wxString GetNativeFontInfoDesc() const;
 
     // change the font characteristics
     virtual void SetPointSize( int pointSize ) = 0;
@@ -148,6 +123,8 @@ public:
     virtual void SetEncoding(wxFontEncoding encoding) = 0;
     virtual void SetNativeFontInfo(const wxNativeFontInfo& info);
 
+    // VZ: there is no void SetNativeFontInfo(const wxString& info), needed?
+
     // translate the fonts into human-readable string (i.e. GetStyleString()
     // will return "wxITALIC" for an italic font, ...)
     wxString GetFamilyString() const;
index 83300a6f403dcf3e0170fd44eee7e9407d9fa794..4af4ca20d2a6a8bcca2d6d649122b7e362f53018 100644 (file)
@@ -12,6 +12,8 @@
 #ifndef _WX_FONTENC_H_
 #define _WX_FONTENC_H_
 
+#include "wx/string.h"
+
 // font encodings
 enum wxFontEncoding
 {
@@ -68,4 +70,44 @@ enum wxFontEncoding
     wxFONTENCODING_MAX
 };
 
+// ----------------------------------------------------------------------------
+// types
+// ----------------------------------------------------------------------------
+
+// This private structure specifies all the parameters needed to create a font
+// with the given encoding on this platform.
+//
+// Under X, it contains the last 2 elements of the font specifications
+// (registry and encoding).
+//
+// Under Windows, it contains a number which is one of predefined CHARSET_XXX
+// values.
+//
+// Under all platforms it also contains a facename string which should be
+// used, if not empty, to create fonts in this encoding (this is the only way
+// to create a font of non-standard encoding (like KOI8) under Windows - the
+// facename specifies the encoding then)
+
+struct WXDLLEXPORT wxNativeEncodingInfo
+{
+    wxString facename;          // may be empty meaning "any"
+    wxFontEncoding encoding;    // so that we know what this struct represents
+
+#if defined(__WXMSW__) || defined(__WXPM__) || defined(__WXMAC__)
+    wxNativeEncodingInfo() { charset = 0; /* ANSI_CHARSET */ }
+
+    int      charset;
+#elif defined(_WX_X_FONTLIKE)
+    wxString xregistry,
+             xencoding;
+#else
+    #error "Unsupported toolkit"
+#endif
+
+    // this struct is saved in config by wxFontMapper, so it should know to
+    // serialise itself (implemented in platform-specific code)
+    bool FromString(const wxString& s);
+    wxString ToString() const;
+};
+
 #endif // _WX_FONTENC_H_
index 43285146c03632e6c7323cbd5131c433a67c714b..920733ed35b11c6d3684d27042d01616c8550843 100644 (file)
@@ -21,9 +21,6 @@
 // ----------------------------------------------------------------------------
 
 #include "wx/fontenc.h"         // for wxFontEncoding
-#if wxUSE_GUI
-    #include "wx/fontutil.h"    // for wxNativeEncodingInfo
-#endif // wxUSE_GUI
 
 #if wxUSE_CONFIG
     class WXDLLEXPORT wxConfigBase;
index 6eb762401dee2c2ab914dc6be74546293ae0cb17..7defab993de20f0885ea3144dfa3138babc62761 100644 (file)
 
 #include "wx/font.h"        // for wxFont and wxFontEncoding
 
-// for our purposes here, GDK and X are identical
-#if defined(__WXGTK__) || defined(__X__)
-    #define _WX_X_FONTLIKE
-#endif
-
 // ----------------------------------------------------------------------------
 // types
 // ----------------------------------------------------------------------------
 
-// This private structure specifies all the parameters needed to create a font
-// with the given encoding on this platform.
-//
-// Under X, it contains the last 2 elements of the font specifications
-// (registry and encoding).
-//
-// Under Windows, it contains a number which is one of predefined CHARSET_XXX
-// values.
-//
-// Under all platforms it also contains a facename string which should be
-// used, if not empty, to create fonts in this encoding (this is the only way
-// to create a font of non-standard encoding (like KOI8) under Windows - the
-// facename specifies the encoding then)
-
-struct WXDLLEXPORT wxNativeEncodingInfo
+// wxNativeFontInfo is platform-specific font representation: this struct
+// should be considered as opaque font description only used by the native
+// functions, the user code can only get the objects of this type from
+// somewhere and pass it somewhere else (possibly save them somewhere using
+// ToString() and restore them using FromString())
+struct WXDLLEXPORT wxNativeFontInfo
 {
-    wxString facename;          // may be empty meaning "any"
-    wxFontEncoding encoding;    // so that we know what this struct represents
-
-#if defined(__WXMSW__) || defined(__WXPM__) || defined(__WXMAC__)
-    wxNativeEncodingInfo() { charset = 0; /* ANSI_CHARSET */ }
-
-    int      charset;
-#elif defined(_WX_X_FONTLIKE)
-    wxString xregistry,
-             xencoding;
-#else
-    #error "Unsupported toolkit"
-#endif
-
-    // this struct is saved in config by wxFontMapper, so it should know to
-    // serialise itself (implemented in platform-specific code)
+#if defined(__WXGTK__)
+    wxString     xFontName;
+#else // other platforms
+    //
+    //  This is a generic implementation that should work on all ports
+    //  without specific support by the port.
+    //
+    int           pointSize;
+    int           family;
+    int           style;
+    int           weight;
+    bool          underlined;
+    wxString      faceName;
+    wxFontEncoding encoding;
+#endif // platforms
+
+    // it is important to be able to serialize wxNativeFontInfo objects to be
+    // able to store them (in config file, for example)
     bool FromString(const wxString& s);
     wxString ToString() const;
 };
index a15d5b5dcc0f2d51ce59fa0f3e0c01fe09e38f5e..ed7ac95c862efc05f9f83c86d5e4fe08408cded2 100644 (file)
@@ -36,11 +36,15 @@ public:
     // ctors and such
     wxFont() { Init(); }
     wxFont(const wxFont& font) { Init(); Ref(font); }
-    wxFont(const wxString& fontname, const wxFontData& fontdata) { Create(fontname, fontdata); }
-    wxFont(const wxNativeFontInfo& info);
+    wxFont(const wxString& fontname,
+           wxFontEncoding fontenc = wxFONTENCODING_DEFAULT)
+    {
+        Init();
 
-    // assignment
-    wxFont& operator=(const wxFont& font);
+        Create(fontname, fontenc);
+    }
+
+    wxFont(const wxNativeFontInfo& info);
 
     wxFont(int size,
            int family,
@@ -61,13 +65,18 @@ public:
                 int weight,
                 bool underlined = FALSE,
                 const wxString& face = wxEmptyString,
-                wxFontEncoding encoding = wxFONTENCODING_DEFAULT,
-                const wxNativeFontInfo& info = wxNullNativeFontInfo);
+                wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
 
-    bool Create(const wxString& fontname, const wxFontData& fontdata);
+    // wxGTK-specific
+    bool Create(const wxString& fontname,
+                wxFontEncoding fontenc = wxFONTENCODING_DEFAULT);
+    bool Create(const wxNativeFontInfo& fontinfo);
 
     ~wxFont();
 
+    // assignment
+    wxFont& operator=(const wxFont& font);
+
     // implement base class pure virtuals
     virtual int GetPointSize() const;
     virtual int GetFamily() const;
@@ -76,7 +85,7 @@ public:
     virtual wxString GetFaceName() const;
     virtual bool GetUnderlined() const;
     virtual wxFontEncoding GetEncoding() const;
-    virtual wxNativeFontInfo GetNativeFontInfo() const;
+    virtual wxNativeFontInfo *GetNativeFontInfo() const;
 
     virtual void SetPointSize( int pointSize );
     virtual void SetFamily( int family );
index a15d5b5dcc0f2d51ce59fa0f3e0c01fe09e38f5e..ed7ac95c862efc05f9f83c86d5e4fe08408cded2 100644 (file)
@@ -36,11 +36,15 @@ public:
     // ctors and such
     wxFont() { Init(); }
     wxFont(const wxFont& font) { Init(); Ref(font); }
-    wxFont(const wxString& fontname, const wxFontData& fontdata) { Create(fontname, fontdata); }
-    wxFont(const wxNativeFontInfo& info);
+    wxFont(const wxString& fontname,
+           wxFontEncoding fontenc = wxFONTENCODING_DEFAULT)
+    {
+        Init();
 
-    // assignment
-    wxFont& operator=(const wxFont& font);
+        Create(fontname, fontenc);
+    }
+
+    wxFont(const wxNativeFontInfo& info);
 
     wxFont(int size,
            int family,
@@ -61,13 +65,18 @@ public:
                 int weight,
                 bool underlined = FALSE,
                 const wxString& face = wxEmptyString,
-                wxFontEncoding encoding = wxFONTENCODING_DEFAULT,
-                const wxNativeFontInfo& info = wxNullNativeFontInfo);
+                wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
 
-    bool Create(const wxString& fontname, const wxFontData& fontdata);
+    // wxGTK-specific
+    bool Create(const wxString& fontname,
+                wxFontEncoding fontenc = wxFONTENCODING_DEFAULT);
+    bool Create(const wxNativeFontInfo& fontinfo);
 
     ~wxFont();
 
+    // assignment
+    wxFont& operator=(const wxFont& font);
+
     // implement base class pure virtuals
     virtual int GetPointSize() const;
     virtual int GetFamily() const;
@@ -76,7 +85,7 @@ public:
     virtual wxString GetFaceName() const;
     virtual bool GetUnderlined() const;
     virtual wxFontEncoding GetEncoding() const;
-    virtual wxNativeFontInfo GetNativeFontInfo() const;
+    virtual wxNativeFontInfo *GetNativeFontInfo() const;
 
     virtual void SetPointSize( int pointSize );
     virtual void SetFamily( int family );
index 4736134731a22f7d6af0934d21768207a0a476c1..c436ed747d8842bf0d15830db844f87a2918d7b8 100644 (file)
@@ -415,22 +415,20 @@ void MyFrame::OnEnumerateFamiliesForEncoding(wxCommandEvent& WXUNUSED(event))
 
 void MyFrame::OnCheckNativeToFromString(wxCommandEvent& WXUNUSED(event))
 {
-    wxString fontInfo = m_canvas->GetTextFont().GetNativeFontInfo().ToString();
+    wxString fontInfo = m_canvas->GetTextFont().GetNativeFontInfoDesc();
 
-    if(fontInfo.IsEmpty())
-        wxMessageBox("Native font info string is empty!", "Font demo",
-                     wxOK);
+    if ( fontInfo.IsEmpty() )
+    {
+        wxLogError("Native font info string is empty!");
+    }
     else
     {
-        wxNativeFontInfo info;
-        info.FromString(fontInfo);
-        wxFont font(info);
-        if(fontInfo == font.GetNativeFontInfo().ToString())
-            wxMessageBox("wxNativeFontInfo ToString()/FromString() works!",
-                         "Font demo", wxOK);
+        wxFont *font = wxFont::New(fontInfo);
+        if ( fontInfo != font->GetNativeFontInfoDesc() )
+            wxLogError("wxNativeFontInfo ToString()/FromString() broken!");
         else
-            wxMessageBox("wxNativeFontInfo ToString()/FromString() doesn't work!",
-                         "Font demo", wxOK);
+            wxLogError("wxNativeFontInfo works: %s", fontInfo.c_str());
+        delete font;
      }
 }
 
@@ -678,11 +676,12 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) )
 
     dc.DrawText(fontInfo, 5, 5);
 
-    if(m_font.Ok())
+    if ( m_font.Ok() )
     {
-      dc.SetFont(wxFont(m_font.GetNativeFontInfo()));
-      fontInfo.Printf("Native font info: %s", m_font.GetNativeFontInfo().ToString().GetData());
-      dc.DrawText(fontInfo, 5, 5 + dc.GetCharHeight());
+        wxString fontDesc = m_font.GetNativeFontInfoDesc();
+        dc.SetFont(wxFont(fontDesc));
+        fontInfo.Printf("Native font info: %s", fontDesc.c_str());
+        dc.DrawText(fontInfo, 5, 5 + dc.GetCharHeight());
     }
 
     // prepare to draw the font
index c1eec3bd2519963ec3ffaaf773947fefa839a984..5d0050e77f6bc67401fe84de60e7d83dae7605bd 100644 (file)
@@ -30,6 +30,7 @@
 
 #ifndef WX_PRECOMP
     #include "wx/font.h"
+    #include "wx/fontutil.h"
 #endif // WX_PRECOMP
 
 #include "wx/tokenzr.h"
@@ -62,22 +63,32 @@ wxFont *wxFontBase::New(const wxNativeFontInfo& info)
     return new wxFont(info);
 }
 
-wxNativeFontInfo wxFontBase::GetNativeFontInfo() const
+/* static */
+wxFont *wxFontBase::New(const wxString& strNativeFontDesc)
 {
-#if !defined(__WXGTK__)
     wxNativeFontInfo fontInfo;
+    if ( !fontInfo.FromString(strNativeFontDesc) )
+        return (wxFont *)NULL;
+
+    return New(fontInfo);
+}
+
+wxNativeFontInfo *wxFontBase::GetNativeFontInfo() const
+{
+#if !defined(__WXGTK__)
+    wxNativeFontInfo *fontInfo = new wxNativeFontInfo;
 
-    fontInfo.pointSize = GetPointSize();
-    fontInfo.family = GetFamily();
-    fontInfo.style = GetStyle();
-    fontInfo.weight = GetWeight();
-    fontInfo.underlined = GetUnderlined();
-    fontInfo.faceName = GetFaceName();
-    fontInfo.encoding = GetEncoding();
+    fontInfo->pointSize = GetPointSize();
+    fontInfo->family = GetFamily();
+    fontInfo->style = GetStyle();
+    fontInfo->weight = GetWeight();
+    fontInfo->underlined = GetUnderlined();
+    fontInfo->faceName = GetFaceName();
+    fontInfo->encoding = GetEncoding();
 
     return fontInfo;
 #else
-    return wxNullNativeFontInfo;
+    return (wxNativeFontInfo *)NULL;
 #endif
 }
 
@@ -94,6 +105,19 @@ void wxFontBase::SetNativeFontInfo(const wxNativeFontInfo& info)
 #endif
 }
 
+wxString wxFontBase::GetNativeFontInfoDesc() const
+{
+    wxString fontDesc;
+    wxNativeFontInfo *fontInfo = GetNativeFontInfo();
+    if ( fontInfo )
+    {
+        fontDesc = fontInfo->ToString();
+        delete fontInfo;
+    }
+
+    return fontDesc;
+}
+
 wxFont& wxFont::operator=(const wxFont& font)
 {
     if ( this != &font )
@@ -213,7 +237,7 @@ wxString wxNativeFontInfo::ToString() const
 {
     wxString s;
 
-    s.Printf("%d;%d;%d;%d;%d;%s;%d",
+    s.Printf(_T("%d;%d;%d;%d;%d;%s;%d"),
              pointSize,
              family,
              style,
@@ -225,5 +249,5 @@ wxString wxNativeFontInfo::ToString() const
     return s;
 }
 
-#endif
+#endif // generic wxNativeFontInfo implementation
 
index 7e76472727bcfd76985b0c6f3798e59b6296b1fc..5032eeb6bf7b881db5fbdec65f97fe9d6c234ea2 100644 (file)
@@ -32,6 +32,7 @@
     #include "wx/app.h"
     #include "wx/log.h"
     #include "wx/intl.h"
+    #include "wx/fontutil.h"
 #endif // PCH
 
 #include "wx/fontmap.h"
@@ -685,10 +686,10 @@ bool wxFontMapper::GetAltForEncoding(wxFontEncoding encoding,
                 wxFont font = retData.GetChosenFont();
 
                 *info = retData.EncodingInfo();
-                info -> encoding = retData.GetEncoding();
+                info->encoding = retData.GetEncoding();
 
 #if wxUSE_CONFIG
-            // remember this in the config
+                // remember this in the config
                 if ( ChangePath(FONTMAPPER_FONT_FROM_ENCODING_PATH, &pathOld) )
                 {
                     GetConfig()->Write(configEntry, info->ToString());
index 932a0d00c250841ae68b8f423fa5c13e61ed9627..dc6b6523a8562816e30755763106bcb225ee4fc2 100644 (file)
@@ -126,7 +126,6 @@ wxBrush    wxNullBrush;
 wxFont     wxNullFont;
 wxColour   wxNullColour;
 wxPalette  wxNullPalette;
-wxNativeFontInfo wxNullNativeFontInfo;
 
 /* Default window names */
 const wxChar *wxControlNameStr = wxT("control");
index 0dbf09dd4d352889a2c89e73d657643db92c31fe..c58aca2e818c1a1ba41929c0ed121fe9fdc9b85d 100644 (file)
@@ -47,8 +47,7 @@ public:
                   int weight = wxDEFAULT,
                   bool underlined = FALSE,
                   const wxString& faceName = wxEmptyString,
-                  wxFontEncoding encoding = wxFONTENCODING_DEFAULT,
-                  const wxNativeFontInfo& info = wxNullNativeFontInfo);
+                  wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
     wxFontRefData( const wxFontRefData& data );
     virtual ~wxFontRefData();
 
@@ -60,8 +59,7 @@ protected:
               int weight,
               bool underlined,
               const wxString& faceName,
-              wxFontEncoding encoding,
-              const wxNativeFontInfo& info);
+              wxFontEncoding encoding);
 
 private:
     wxList          m_scaled_xfonts;
@@ -72,6 +70,7 @@ private:
     bool            m_underlined;
     wxString        m_faceName;
     wxFontEncoding  m_encoding;
+
     wxNativeFontInfo m_nativeFontInfo;
 
     friend class wxFont;
@@ -91,8 +90,7 @@ void wxFontRefData::Init(int pointSize,
                          int weight,
                          bool underlined,
                          const wxString& faceName,
-                         wxFontEncoding encoding,
-                         const wxNativeFontInfo& info = wxNullNativeFontInfo)
+                         wxFontEncoding encoding)
 {
     if (family == wxDEFAULT)
         m_family = wxSWISS;
@@ -118,24 +116,22 @@ void wxFontRefData::Init(int pointSize,
 
     m_underlined = underlined;
     m_encoding = encoding;
-    m_nativeFontInfo = info;
 }
 
 wxFontRefData::wxFontRefData( const wxFontRefData& data )
     : m_scaled_xfonts(wxKEY_INTEGER)
 {
     Init(data.m_pointSize, data.m_family, data.m_style, data.m_weight,
-        data.m_underlined, data.m_faceName, data.m_encoding,
-        data.m_nativeFontInfo );
+         data.m_underlined, data.m_faceName, data.m_encoding);
 }
 
 wxFontRefData::wxFontRefData(int size, int family, int style,
-    int weight, bool underlined, const wxString& faceName, wxFontEncoding encoding,
-    const wxNativeFontInfo& info = wxNullNativeFontInfo)
+                             int weight, bool underlined,
+                             const wxString& faceName,
+                             wxFontEncoding encoding)
     : m_scaled_xfonts(wxKEY_INTEGER)
 {
-    Init(size, family, style, weight,
-        underlined, faceName, encoding, info);
+    Init(size, family, style, weight, underlined, faceName, encoding);
 }
 
 wxFontRefData::~wxFontRefData()
@@ -179,7 +175,14 @@ void wxFont::Init()
 
 wxFont::wxFont(const wxNativeFontInfo& info)
 {
-    Create(info.xFontName, wxFontData());
+    Init();
+
+    Create(info.ToString());
+}
+
+bool wxFont::Create(const wxNativeFontInfo& info)
+{
+    return Create(info.xFontName);
 }
 
 bool wxFont::Create( int pointSize,
@@ -188,20 +191,19 @@ bool wxFont::Create( int pointSize,
                      int weight,
                      bool underlined,
                      const wxString& face,
-                     wxFontEncoding encoding,
-                     const wxNativeFontInfo& info )
+                     wxFontEncoding encoding)
 {
     m_refData = new wxFontRefData(pointSize, family, style, weight,
-                                  underlined, face, encoding, info);
+                                  underlined, face, encoding);
 
     return TRUE;
 }
 
-bool wxFont::Create(const wxString& fontname, const wxFontData& fontdata)
+bool wxFont::Create(const wxString& fontname, wxFontEncoding enc)
 {
     Init();
 
-    if(!fontname)
+    if( !fontname )
     {
          *this = wxSystemSettings::GetSystemFont( wxSYS_DEFAULT_GUI_FONT);
          return TRUE;
@@ -267,7 +269,7 @@ bool wxFont::Create(const wxString& fontname, const wxFontData& fontdata)
     tn.GetNextToken();                           // avg width
 
     // deal with font encoding
-    M_FONTDATA->m_encoding = fontdata.GetEncoding();
+    M_FONTDATA->m_encoding = enc;
     if ( M_FONTDATA->m_encoding == wxFONTENCODING_SYSTEM )
     {
         wxString registry = tn.GetNextToken().MakeUpper(),
@@ -376,13 +378,14 @@ wxFontEncoding wxFont::GetEncoding() const
     return M_FONTDATA->m_encoding;
 }
 
-wxNativeFontInfo wxFont::GetNativeFontInfo() const
+wxNativeFontInfo *wxFont::GetNativeFontInfo() const
 {
-    wxCHECK_MSG( Ok(), wxNullNativeFontInfo, wxT("invalid font") );
+    wxCHECK_MSG( Ok(), (wxNativeFontInfo *)NULL, wxT("invalid font") );
 
     if(M_FONTDATA->m_nativeFontInfo.xFontName.IsEmpty())
         GetInternalFont();
-    return M_FONTDATA->m_nativeFontInfo;
+
+    return new wxNativeFontInfo(M_FONTDATA->m_nativeFontInfo);
 }
 
 
index 47a34e1bcc3c31a6cd36707be5bd851fb459e6d1..4b26ff00af42d2b17e5d4b8d13549c6147184491 100644 (file)
@@ -11,6 +11,7 @@
 #pragma implementation "fontdlg.h"
 #endif
 
+#include "wx/fontutil.h"
 #include "wx/fontdlg.h"
 #include "wx/utils.h"
 #include "wx/intl.h"
@@ -64,7 +65,8 @@ void gtk_fontdialog_ok_callback( GtkWidget *WXUNUSED(widget), wxFontDialog *dial
 
     if (!gfont)
     {
-        wxMessageBox(_("Please choose a valid font."), _("Error"), wxOK);
+        wxMessageBox(_("Please choose a valid font."), _("Error"),
+                     wxOK | wxICON_ERROR);
         return;
     }
 
@@ -101,13 +103,12 @@ void gtk_fontdialog_ok_callback( GtkWidget *WXUNUSED(widget), wxFontDialog *dial
 
     // we ignore the facename here - should be enough to choose an arbitrary
     // one if the registry/encoding are specified
-    //  dialog->m_fontData.EncodingInfo().facename = xfamily;
     fontdata.EncodingInfo().xregistry = xregistry;
     fontdata.EncodingInfo().xencoding = xencoding;
 
     // pass fontdata to wxFont ctor so that it can get the encoding from there
     // if it is already known (otherwise it will try to deduce it itself)
-    dialog->m_fontData.SetChosenFont( wxFont(fontname, fontdata) );
+    dialog->m_fontData.SetChosenFont(wxFont(fontname, fontdata.GetEncoding()));
 
     g_free( fontname );
 
@@ -178,11 +179,21 @@ wxFontDialog::wxFontDialog( wxWindow *parent, wxFontData *fontdata )
     wxFont font = m_fontData.GetInitialFont();
     if( font.Ok() )
     {
-        wxNativeFontInfo info = font.GetNativeFontInfo();
+        wxNativeFontInfo *info = font.GetNativeFontInfo();
 
-        if( info.xFontName.IsEmpty() )
-            font.GetInternalFont();
-        gtk_font_selection_dialog_set_font_name(sel, wxConvCurrent->cWX2MB(info.xFontName.GetData()));
+        if ( info )
+        {
+            const wxString& fontname = info->xFontName;
+            if ( !fontname )
+                font.GetInternalFont();
+            gtk_font_selection_dialog_set_font_name(sel,
+                                                    wxConvCurrent->cWX2MB(fontname));
+        }
+        else
+        {
+            // this is not supposed to happen!
+            wxFAIL_MSG(_T("font is ok but no native font info?"));
+        }
     }
 }
 
index 932a0d00c250841ae68b8f423fa5c13e61ed9627..dc6b6523a8562816e30755763106bcb225ee4fc2 100644 (file)
@@ -126,7 +126,6 @@ wxBrush    wxNullBrush;
 wxFont     wxNullFont;
 wxColour   wxNullColour;
 wxPalette  wxNullPalette;
-wxNativeFontInfo wxNullNativeFontInfo;
 
 /* Default window names */
 const wxChar *wxControlNameStr = wxT("control");
index 0dbf09dd4d352889a2c89e73d657643db92c31fe..c58aca2e818c1a1ba41929c0ed121fe9fdc9b85d 100644 (file)
@@ -47,8 +47,7 @@ public:
                   int weight = wxDEFAULT,
                   bool underlined = FALSE,
                   const wxString& faceName = wxEmptyString,
-                  wxFontEncoding encoding = wxFONTENCODING_DEFAULT,
-                  const wxNativeFontInfo& info = wxNullNativeFontInfo);
+                  wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
     wxFontRefData( const wxFontRefData& data );
     virtual ~wxFontRefData();
 
@@ -60,8 +59,7 @@ protected:
               int weight,
               bool underlined,
               const wxString& faceName,
-              wxFontEncoding encoding,
-              const wxNativeFontInfo& info);
+              wxFontEncoding encoding);
 
 private:
     wxList          m_scaled_xfonts;
@@ -72,6 +70,7 @@ private:
     bool            m_underlined;
     wxString        m_faceName;
     wxFontEncoding  m_encoding;
+
     wxNativeFontInfo m_nativeFontInfo;
 
     friend class wxFont;
@@ -91,8 +90,7 @@ void wxFontRefData::Init(int pointSize,
                          int weight,
                          bool underlined,
                          const wxString& faceName,
-                         wxFontEncoding encoding,
-                         const wxNativeFontInfo& info = wxNullNativeFontInfo)
+                         wxFontEncoding encoding)
 {
     if (family == wxDEFAULT)
         m_family = wxSWISS;
@@ -118,24 +116,22 @@ void wxFontRefData::Init(int pointSize,
 
     m_underlined = underlined;
     m_encoding = encoding;
-    m_nativeFontInfo = info;
 }
 
 wxFontRefData::wxFontRefData( const wxFontRefData& data )
     : m_scaled_xfonts(wxKEY_INTEGER)
 {
     Init(data.m_pointSize, data.m_family, data.m_style, data.m_weight,
-        data.m_underlined, data.m_faceName, data.m_encoding,
-        data.m_nativeFontInfo );
+         data.m_underlined, data.m_faceName, data.m_encoding);
 }
 
 wxFontRefData::wxFontRefData(int size, int family, int style,
-    int weight, bool underlined, const wxString& faceName, wxFontEncoding encoding,
-    const wxNativeFontInfo& info = wxNullNativeFontInfo)
+                             int weight, bool underlined,
+                             const wxString& faceName,
+                             wxFontEncoding encoding)
     : m_scaled_xfonts(wxKEY_INTEGER)
 {
-    Init(size, family, style, weight,
-        underlined, faceName, encoding, info);
+    Init(size, family, style, weight, underlined, faceName, encoding);
 }
 
 wxFontRefData::~wxFontRefData()
@@ -179,7 +175,14 @@ void wxFont::Init()
 
 wxFont::wxFont(const wxNativeFontInfo& info)
 {
-    Create(info.xFontName, wxFontData());
+    Init();
+
+    Create(info.ToString());
+}
+
+bool wxFont::Create(const wxNativeFontInfo& info)
+{
+    return Create(info.xFontName);
 }
 
 bool wxFont::Create( int pointSize,
@@ -188,20 +191,19 @@ bool wxFont::Create( int pointSize,
                      int weight,
                      bool underlined,
                      const wxString& face,
-                     wxFontEncoding encoding,
-                     const wxNativeFontInfo& info )
+                     wxFontEncoding encoding)
 {
     m_refData = new wxFontRefData(pointSize, family, style, weight,
-                                  underlined, face, encoding, info);
+                                  underlined, face, encoding);
 
     return TRUE;
 }
 
-bool wxFont::Create(const wxString& fontname, const wxFontData& fontdata)
+bool wxFont::Create(const wxString& fontname, wxFontEncoding enc)
 {
     Init();
 
-    if(!fontname)
+    if( !fontname )
     {
          *this = wxSystemSettings::GetSystemFont( wxSYS_DEFAULT_GUI_FONT);
          return TRUE;
@@ -267,7 +269,7 @@ bool wxFont::Create(const wxString& fontname, const wxFontData& fontdata)
     tn.GetNextToken();                           // avg width
 
     // deal with font encoding
-    M_FONTDATA->m_encoding = fontdata.GetEncoding();
+    M_FONTDATA->m_encoding = enc;
     if ( M_FONTDATA->m_encoding == wxFONTENCODING_SYSTEM )
     {
         wxString registry = tn.GetNextToken().MakeUpper(),
@@ -376,13 +378,14 @@ wxFontEncoding wxFont::GetEncoding() const
     return M_FONTDATA->m_encoding;
 }
 
-wxNativeFontInfo wxFont::GetNativeFontInfo() const
+wxNativeFontInfo *wxFont::GetNativeFontInfo() const
 {
-    wxCHECK_MSG( Ok(), wxNullNativeFontInfo, wxT("invalid font") );
+    wxCHECK_MSG( Ok(), (wxNativeFontInfo *)NULL, wxT("invalid font") );
 
     if(M_FONTDATA->m_nativeFontInfo.xFontName.IsEmpty())
         GetInternalFont();
-    return M_FONTDATA->m_nativeFontInfo;
+
+    return new wxNativeFontInfo(M_FONTDATA->m_nativeFontInfo);
 }
 
 
index 47a34e1bcc3c31a6cd36707be5bd851fb459e6d1..4b26ff00af42d2b17e5d4b8d13549c6147184491 100644 (file)
@@ -11,6 +11,7 @@
 #pragma implementation "fontdlg.h"
 #endif
 
+#include "wx/fontutil.h"
 #include "wx/fontdlg.h"
 #include "wx/utils.h"
 #include "wx/intl.h"
@@ -64,7 +65,8 @@ void gtk_fontdialog_ok_callback( GtkWidget *WXUNUSED(widget), wxFontDialog *dial
 
     if (!gfont)
     {
-        wxMessageBox(_("Please choose a valid font."), _("Error"), wxOK);
+        wxMessageBox(_("Please choose a valid font."), _("Error"),
+                     wxOK | wxICON_ERROR);
         return;
     }
 
@@ -101,13 +103,12 @@ void gtk_fontdialog_ok_callback( GtkWidget *WXUNUSED(widget), wxFontDialog *dial
 
     // we ignore the facename here - should be enough to choose an arbitrary
     // one if the registry/encoding are specified
-    //  dialog->m_fontData.EncodingInfo().facename = xfamily;
     fontdata.EncodingInfo().xregistry = xregistry;
     fontdata.EncodingInfo().xencoding = xencoding;
 
     // pass fontdata to wxFont ctor so that it can get the encoding from there
     // if it is already known (otherwise it will try to deduce it itself)
-    dialog->m_fontData.SetChosenFont( wxFont(fontname, fontdata) );
+    dialog->m_fontData.SetChosenFont(wxFont(fontname, fontdata.GetEncoding()));
 
     g_free( fontname );
 
@@ -178,11 +179,21 @@ wxFontDialog::wxFontDialog( wxWindow *parent, wxFontData *fontdata )
     wxFont font = m_fontData.GetInitialFont();
     if( font.Ok() )
     {
-        wxNativeFontInfo info = font.GetNativeFontInfo();
+        wxNativeFontInfo *info = font.GetNativeFontInfo();
 
-        if( info.xFontName.IsEmpty() )
-            font.GetInternalFont();
-        gtk_font_selection_dialog_set_font_name(sel, wxConvCurrent->cWX2MB(info.xFontName.GetData()));
+        if ( info )
+        {
+            const wxString& fontname = info->xFontName;
+            if ( !fontname )
+                font.GetInternalFont();
+            gtk_font_selection_dialog_set_font_name(sel,
+                                                    wxConvCurrent->cWX2MB(fontname));
+        }
+        else
+        {
+            // this is not supposed to happen!
+            wxFAIL_MSG(_T("font is ok but no native font info?"));
+        }
     }
 }