]> git.saurik.com Git - wxWidgets.git/commitdiff
pointer returned by GetNativeFontInfo() is now const and must not be deleted (replace...
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 24 Sep 2003 01:23:37 +0000 (01:23 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 24 Sep 2003 01:23:37 +0000 (01:23 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@23875 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

23 files changed:
include/wx/cocoa/font.h
include/wx/font.h
include/wx/fontutil.h
include/wx/gtk/font.h
include/wx/gtk1/font.h
include/wx/mac/font.h
include/wx/mgl/font.h
include/wx/motif/font.h
include/wx/msw/font.h
include/wx/os2/font.h
include/wx/x11/font.h
src/cocoa/font.cpp
src/common/fontcmn.cpp
src/gtk/font.cpp
src/gtk1/font.cpp
src/mac/carbon/font.cpp
src/mac/font.cpp
src/mgl/font.cpp
src/motif/font.cpp
src/msw/font.cpp
src/msw/fontutil.cpp
src/os2/font.cpp
src/x11/font.cpp

index 65b868c80adfc705f7463e9f2c652e21231cfb07..863837c42831b7416c989efabb5e92be6d1e3f09 100644 (file)
@@ -152,6 +152,7 @@ public:
     virtual bool GetUnderlined() const;
     virtual wxString GetFaceName() const;
     virtual wxFontEncoding GetEncoding() const;
+    virtual const wxNativeFontInfo *GetNativeFontInfo() const;
 
     virtual void SetPointSize(int pointSize);
     virtual void SetFamily(int family);
index 83a00873cca750f307b3691515d4f08fd0e87d78..a8781d4db4d521fbb5f824b717a665e99d4b61a9 100644 (file)
@@ -156,7 +156,7 @@ public:
     virtual bool GetUnderlined() const = 0;
     virtual wxString GetFaceName() const = 0;
     virtual wxFontEncoding GetEncoding() const = 0;
-    virtual wxNativeFontInfo *GetNativeFontInfo() const;
+    virtual const wxNativeFontInfo *GetNativeFontInfo() const = 0;
 
     virtual bool IsFixedWidth() const;
 
index da045f1c535341d7a88b2d908b5cad0a6e8232f9..5ff0cded08285c61db2e8ba71d83b231c72ecf62 100644 (file)
@@ -139,6 +139,28 @@ public:
     // reset to the default state
     void Init();
 
+    // init with the parameters of the given font
+    void InitFromFont(const wxFont& font)
+    {
+        // translate all font parameters
+        SetStyle((wxFontStyle)font.GetStyle());
+        SetWeight((wxFontWeight)font.GetWeight());
+        SetUnderlined(font.GetUnderlined());
+        SetPointSize(font.GetPointSize());
+
+        // set the family/facename
+        SetFamily((wxFontFamily)font.GetFamily());
+        const wxString& facename = font.GetFaceName();
+        if ( !facename.empty() )
+        {
+            SetFaceName(facename);
+        }
+
+        // deal with encoding now (it may override the font family and facename
+        // so do it after setting them)
+        SetEncoding(font.GetEncoding());
+    }
+
     // accessors and modifiers for the font elements
     int GetPointSize() const;
     wxFontStyle GetStyle() const;
index 2465dc3554bd4654ae689b66c81130d430fb1dc7..9d66ddc909c259af15d66460d9ce0f2debbd8368 100644 (file)
@@ -84,7 +84,7 @@ public:
     virtual wxString GetFaceName() const;
     virtual bool GetUnderlined() const;
     virtual wxFontEncoding GetEncoding() const;
-    virtual wxNativeFontInfo *GetNativeFontInfo() const;
+    virtual const wxNativeFontInfo *GetNativeFontInfo() const;
     virtual bool IsFixedWidth() const;
 
     virtual void SetPointSize( int pointSize );
index 2465dc3554bd4654ae689b66c81130d430fb1dc7..9d66ddc909c259af15d66460d9ce0f2debbd8368 100644 (file)
@@ -84,7 +84,7 @@ public:
     virtual wxString GetFaceName() const;
     virtual bool GetUnderlined() const;
     virtual wxFontEncoding GetEncoding() const;
-    virtual wxNativeFontInfo *GetNativeFontInfo() const;
+    virtual const wxNativeFontInfo *GetNativeFontInfo() const;
     virtual bool IsFixedWidth() const;
 
     virtual void SetPointSize( int pointSize );
index d57d048e9b958ef2ab0370ef1b4f3d66912c6efd..08551a88bd167e9022f06fd378c749b5ddb9d980 100644 (file)
     #pragma interface "font.h"
 #endif
 
-class WXDLLEXPORT wxFontRefData: public wxGDIRefData
-{
-    friend class WXDLLEXPORT wxFont;
-public:
-    wxFontRefData()
-        : m_fontId(0)
-        , m_pointSize(10)
-        , m_family(wxDEFAULT)
-        , m_style(wxNORMAL)
-        , m_weight(wxNORMAL)
-        , m_underlined(FALSE)
-        , m_faceName(wxT("Geneva"))
-        , m_encoding(wxFONTENCODING_DEFAULT)
-        , m_macFontNum(0)
-        , m_macFontSize(0)
-        , m_macFontStyle(0)
-        , m_macATSUFontID()
-    {
-        Init(10, wxDEFAULT, wxNORMAL, wxNORMAL, FALSE,
-             wxT("Geneva"), wxFONTENCODING_DEFAULT);
-    }
-
-    wxFontRefData(const wxFontRefData& data)
-        : wxGDIRefData()
-        , m_fontId(data.m_fontId)
-        , m_pointSize(data.m_pointSize)
-        , m_family(data.m_family)
-        , m_style(data.m_style)
-        , m_weight(data.m_weight)
-        , m_underlined(data.m_underlined)
-        , m_faceName(data.m_faceName)
-        , m_encoding(data.m_encoding)
-        , m_macFontNum(data.m_macFontNum)
-        , m_macFontSize(data.m_macFontSize)
-        , m_macFontStyle(data.m_macFontStyle)
-        , m_macATSUFontID(data.m_macATSUFontID)
-    {
-        Init(data.m_pointSize, data.m_family, data.m_style, data.m_weight,
-             data.m_underlined, data.m_faceName, data.m_encoding);
-    }
-
-    wxFontRefData(int size,
-                  int family,
-                  int style,
-                  int weight,
-                  bool underlined,
-                  const wxString& faceName,
-                  wxFontEncoding encoding)
-        : m_fontId(0)
-        , m_pointSize(size)
-        , m_family(family)
-        , m_style(style)
-        , m_weight(weight)
-        , m_underlined(underlined)
-        , m_faceName(faceName)
-        , m_encoding(encoding)
-        , m_macFontNum(0)
-        , m_macFontSize(0)
-        , m_macFontStyle(0)
-        , m_macATSUFontID(0)
-    {
-        Init(size, family, style, weight, underlined, faceName, encoding);
-    }
-
-    virtual ~wxFontRefData();
-    void SetNoAntiAliasing( bool no = TRUE ) { m_noAA = no; }
-    bool GetNoAntiAliasing() { return m_noAA; }
-    
-protected:
-    // common part of all ctors
-    void Init(int size,
-              int family,
-              int style,
-              int weight,
-              bool underlined,
-              const wxString& faceName,
-              wxFontEncoding encoding);
-
-    // font characterstics
-    int            m_fontId;
-    int            m_pointSize;
-    int            m_family;
-    int            m_style;
-    int            m_weight;
-    bool           m_underlined;
-    wxString       m_faceName;
-    wxFontEncoding m_encoding;
-    bool            m_noAA;      // No anti-aliasing
-    
-public:
-    short       m_macFontNum;
-    short       m_macFontSize;
-    unsigned char  m_macFontStyle;
-    wxUint32       m_macATSUFontID;
-public:
-    void        MacFindFont() ;
-};
 // ----------------------------------------------------------------------------
 // wxFont
 // ----------------------------------------------------------------------------
@@ -174,6 +77,7 @@ public:
     virtual bool GetUnderlined() const;
     virtual wxString GetFaceName() const;
     virtual wxFontEncoding GetEncoding() const;
+    virtual const wxNativeFontInfo *GetNativeFontInfo() const;
 
     virtual void SetPointSize(int pointSize);
     virtual void SetFamily(int family);
index 5381f3184d1925230b7c498cfe4e1a78b625b4be..6a105bf6fcc59106c2a3a700b6776dca4794e576 100644 (file)
@@ -81,6 +81,7 @@ public:
     virtual bool GetUnderlined() const;
     virtual wxFontEncoding GetEncoding() const;
     virtual bool IsFixedWidth() const;
+    virtual const wxNativeFontInfo *GetNativeFontInfo() const;
 
     virtual void SetPointSize(int pointSize);
     virtual void SetFamily(int family);
index 62be50f08e018c1cb58192601f72dc1d9e894e46..80d1a4f84115b86665579fba3cbb234331922411 100644 (file)
@@ -67,7 +67,7 @@ public:
     virtual bool GetUnderlined() const;
     virtual wxString GetFaceName() const;
     virtual wxFontEncoding GetEncoding() const;
-    virtual wxNativeFontInfo *GetNativeFontInfo() const;
+    virtual const wxNativeFontInfo *GetNativeFontInfo() const;
 
     virtual void SetPointSize(int pointSize);
     virtual void SetFamily(int family);
index 69acbfcc636590faf63ff043e071a25c976cca9e..13674e03c55d0cb79d0e6951b4ce08d13afadf8e 100644 (file)
@@ -72,7 +72,7 @@ public:
     virtual bool GetUnderlined() const;
     virtual wxString GetFaceName() const;
     virtual wxFontEncoding GetEncoding() const;
-    virtual wxNativeFontInfo* GetNativeFontInfo() const;
+    virtual const wxNativeFontInfo *GetNativeFontInfo() const;
 
     virtual void SetPointSize(int pointSize);
     virtual void SetFamily(int family);
index 53dcf28490837a5090b5ecbe6b1c07229914b6cf..896e5a261c250acbedf3feac29227187b76682ab 100644 (file)
@@ -93,7 +93,7 @@ public:
     virtual bool              GetUnderlined(void) const;
     virtual wxString          GetFaceName(void) const;
     virtual wxFontEncoding    GetEncoding(void) const;
-    virtual wxNativeFontInfo* GetNativeFontInfo() const;
+    virtual const wxNativeFontInfo* GetNativeFontInfo() const;
 
     virtual void SetPointSize(int nPointSize);
     virtual void SetFamily(int nFamily);
index 4887c66551b23ca4ff0533aa7b8477f25d7d233f..a4739023f63d5e58385a27f16e3f9357348b1dc5 100644 (file)
@@ -71,7 +71,7 @@ public:
     virtual bool GetUnderlined() const;
     virtual wxString GetFaceName() const;
     virtual wxFontEncoding GetEncoding() const;
-    virtual wxNativeFontInfo *GetNativeFontInfo() const;
+    virtual const wxNativeFontInfo *GetNativeFontInfo() const;
 
     virtual bool IsFixedWidth() const;
 
index c907342aa524924cbad3934bf1ac4ef50f160c27..485e44765314b4fdefea832c8923629d7b8b22b5 100644 (file)
@@ -80,6 +80,11 @@ int wxFont::GetWeight() const
     return 0;
 }
 
+const wxNativeFontInfo *wxFont::GetNativeFontInfo() const
+{
+    return NULL;
+}
+
 void wxGetNativeFontEncoding(wxFontEncoding, wxNativeEncodingInfo*);
 
 bool wxFont::Create(int pointSize, int family, int style, int weight, bool underlined, const wxString& faceName, wxFontEncoding encoding)
index f1b77746b229f72a34e74b0c5ce92883ae04ed8a..7c3412b48d8345e99382ee0b555d2b0d399507b1 100644 (file)
@@ -131,25 +131,6 @@ bool wxFontBase::IsFixedWidth() const
     return GetFamily() == wxFONTFAMILY_TELETYPE;
 }
 
-wxNativeFontInfo *wxFontBase::GetNativeFontInfo() const
-{
-#ifdef wxNO_NATIVE_FONTINFO
-    wxNativeFontInfo *fontInfo = new wxNativeFontInfo();
-
-    fontInfo->SetPointSize(GetPointSize());
-    fontInfo->SetFamily((wxFontFamily)GetFamily());
-    fontInfo->SetStyle((wxFontStyle)GetStyle());
-    fontInfo->SetWeight((wxFontWeight)GetWeight());
-    fontInfo->SetUnderlined(GetUnderlined());
-    fontInfo->SetFaceName(GetFaceName());
-    fontInfo->SetEncoding(GetEncoding());
-
-    return fontInfo;
-#else
-    return (wxNativeFontInfo *)NULL;
-#endif
-}
-
 void wxFontBase::DoSetNativeFontInfo(const wxNativeFontInfo& info)
 {
 #ifdef wxNO_NATIVE_FONTINFO
@@ -168,11 +149,10 @@ void wxFontBase::DoSetNativeFontInfo(const wxNativeFontInfo& info)
 wxString wxFontBase::GetNativeFontInfoDesc() const
 {
     wxString fontDesc;
-    wxNativeFontInfo *fontInfo = GetNativeFontInfo();
+    const wxNativeFontInfo *fontInfo = GetNativeFontInfo();
     if ( fontInfo )
     {
         fontDesc = fontInfo->ToString();
-        delete fontInfo;
     }
 
     return fontDesc;
@@ -181,11 +161,10 @@ wxString wxFontBase::GetNativeFontInfoDesc() const
 wxString wxFontBase::GetNativeFontInfoUserDesc() const
 {
     wxString fontDesc;
-    wxNativeFontInfo *fontInfo = GetNativeFontInfo();
+    const wxNativeFontInfo *fontInfo = GetNativeFontInfo();
     if ( fontInfo )
     {
         fontDesc = fontInfo->ToUserString();
-        delete fontInfo;
     }
 
     return fontDesc;
@@ -362,7 +341,7 @@ wxString wxNativeFontInfo::ToString() const
 
 void wxNativeFontInfo::Init()
 {
-    pointSize = wxNORMAL_FONT->GetPointSize();
+    pointSize = 0;
     family = wxFONTFAMILY_DEFAULT;
     style = wxFONTSTYLE_NORMAL;
     weight = wxFONTWEIGHT_NORMAL;
index f62f55b84075f1122ecf561b519a0cb332b40016..eef97f198b6735ff8e99a500af5868ee8cf8e371 100644 (file)
@@ -790,7 +790,7 @@ bool wxFont::GetNoAntiAliasing()
     return M_FONTDATA->m_noAA;
 }
 
-wxNativeFontInfo *wxFont::GetNativeFontInfo() const
+const wxNativeFontInfo *wxFont::GetNativeFontInfo() const
 {
     wxCHECK_MSG( Ok(), (wxNativeFontInfo *)NULL, wxT("invalid font") );
 
@@ -799,7 +799,7 @@ wxNativeFontInfo *wxFont::GetNativeFontInfo() const
         GetInternalFont();
 #endif
 
-    return new wxNativeFontInfo(M_FONTDATA->m_nativeFontInfo);
+    return &(M_FONTDATA->m_nativeFontInfo);
 }
 
 bool wxFont::IsFixedWidth() const
index f62f55b84075f1122ecf561b519a0cb332b40016..eef97f198b6735ff8e99a500af5868ee8cf8e371 100644 (file)
@@ -790,7 +790,7 @@ bool wxFont::GetNoAntiAliasing()
     return M_FONTDATA->m_noAA;
 }
 
-wxNativeFontInfo *wxFont::GetNativeFontInfo() const
+const wxNativeFontInfo *wxFont::GetNativeFontInfo() const
 {
     wxCHECK_MSG( Ok(), (wxNativeFontInfo *)NULL, wxT("invalid font") );
 
@@ -799,7 +799,7 @@ wxNativeFontInfo *wxFont::GetNativeFontInfo() const
         GetInternalFont();
 #endif
 
-    return new wxNativeFontInfo(M_FONTDATA->m_nativeFontInfo);
+    return &(M_FONTDATA->m_nativeFontInfo);
 }
 
 bool wxFont::IsFixedWidth() const
index d94805d819a4177cd87b635d7619c5b806cca2a4..bb1c2b4939f4348b1b2b4e96335f40c3118ba916 100644 (file)
@@ -6,7 +6,7 @@
 // Created:     1998-01-01
 // RCS-ID:      $Id$
 // Copyright:   (c) Stefan Csomor
-// Licence:       wxWindows licence
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 #ifdef __GNUG__
 IMPLEMENT_DYNAMIC_CLASS(wxFont, wxGDIObject)
 #endif
 
+class WXDLLEXPORT wxFontRefData: public wxGDIRefData
+{
+    friend class WXDLLEXPORT wxFont;
+public:
+    wxFontRefData()
+        : m_fontId(0)
+        , m_pointSize(10)
+        , m_family(wxDEFAULT)
+        , m_style(wxNORMAL)
+        , m_weight(wxNORMAL)
+        , m_underlined(FALSE)
+        , m_faceName(wxT("Geneva"))
+        , m_encoding(wxFONTENCODING_DEFAULT)
+        , m_macFontNum(0)
+        , m_macFontSize(0)
+        , m_macFontStyle(0)
+        , m_macATSUFontID()
+    {
+        Init(10, wxDEFAULT, wxNORMAL, wxNORMAL, FALSE,
+             wxT("Geneva"), wxFONTENCODING_DEFAULT);
+    }
+
+    wxFontRefData(const wxFontRefData& data)
+        : wxGDIRefData()
+        , m_fontId(data.m_fontId)
+        , m_pointSize(data.m_pointSize)
+        , m_family(data.m_family)
+        , m_style(data.m_style)
+        , m_weight(data.m_weight)
+        , m_underlined(data.m_underlined)
+        , m_faceName(data.m_faceName)
+        , m_encoding(data.m_encoding)
+        , m_macFontNum(data.m_macFontNum)
+        , m_macFontSize(data.m_macFontSize)
+        , m_macFontStyle(data.m_macFontStyle)
+        , m_macATSUFontID(data.m_macATSUFontID)
+    {
+        Init(data.m_pointSize, data.m_family, data.m_style, data.m_weight,
+             data.m_underlined, data.m_faceName, data.m_encoding);
+    }
+
+    wxFontRefData(int size,
+                  int family,
+                  int style,
+                  int weight,
+                  bool underlined,
+                  const wxString& faceName,
+                  wxFontEncoding encoding)
+        : m_fontId(0)
+        , m_pointSize(size)
+        , m_family(family)
+        , m_style(style)
+        , m_weight(weight)
+        , m_underlined(underlined)
+        , m_faceName(faceName)
+        , m_encoding(encoding)
+        , m_macFontNum(0)
+        , m_macFontSize(0)
+        , m_macFontStyle(0)
+        , m_macATSUFontID(0)
+    {
+        Init(size, family, style, weight, underlined, faceName, encoding);
+    }
+
+    virtual ~wxFontRefData();
+    void SetNoAntiAliasing( bool no = TRUE ) { m_noAA = no; }
+    bool GetNoAntiAliasing() { return m_noAA; }
+    
+protected:
+    // common part of all ctors
+    void Init(int size,
+              int family,
+              int style,
+              int weight,
+              bool underlined,
+              const wxString& faceName,
+              wxFontEncoding encoding);
+
+    // font characterstics
+    int            m_fontId;
+    int            m_pointSize;
+    int            m_family;
+    int            m_style;
+    int            m_weight;
+    bool           m_underlined;
+    wxString       m_faceName;
+    wxFontEncoding m_encoding;
+    bool            m_noAA;      // No anti-aliasing
+    
+public:
+    short       m_macFontNum;
+    short       m_macFontSize;
+    unsigned char  m_macFontStyle;
+    wxUint32       m_macATSUFontID;
+
+    wxNativeFontInfo  m_info;
+
+public:
+    void        MacFindFont() ;
+};
 // ============================================================================
 // implementation
 // ============================================================================
@@ -313,3 +413,12 @@ bool wxFont::GetNoAntiAliasing()
     return M_FONTDATA->m_noAA;
 }
 
+const wxNativeFontInfo *wxFont::GetNativeFontInfo() const
+{
+    wxCHECK_MSG( Ok(), NULL, wxT("invalid font") );
+
+    M_FONTDATA->m_info.InitFromFont(*this);
+
+    return &(M_FONTDATA->m_info);
+}
+
index d94805d819a4177cd87b635d7619c5b806cca2a4..bb1c2b4939f4348b1b2b4e96335f40c3118ba916 100644 (file)
@@ -6,7 +6,7 @@
 // Created:     1998-01-01
 // RCS-ID:      $Id$
 // Copyright:   (c) Stefan Csomor
-// Licence:       wxWindows licence
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 #ifdef __GNUG__
 IMPLEMENT_DYNAMIC_CLASS(wxFont, wxGDIObject)
 #endif
 
+class WXDLLEXPORT wxFontRefData: public wxGDIRefData
+{
+    friend class WXDLLEXPORT wxFont;
+public:
+    wxFontRefData()
+        : m_fontId(0)
+        , m_pointSize(10)
+        , m_family(wxDEFAULT)
+        , m_style(wxNORMAL)
+        , m_weight(wxNORMAL)
+        , m_underlined(FALSE)
+        , m_faceName(wxT("Geneva"))
+        , m_encoding(wxFONTENCODING_DEFAULT)
+        , m_macFontNum(0)
+        , m_macFontSize(0)
+        , m_macFontStyle(0)
+        , m_macATSUFontID()
+    {
+        Init(10, wxDEFAULT, wxNORMAL, wxNORMAL, FALSE,
+             wxT("Geneva"), wxFONTENCODING_DEFAULT);
+    }
+
+    wxFontRefData(const wxFontRefData& data)
+        : wxGDIRefData()
+        , m_fontId(data.m_fontId)
+        , m_pointSize(data.m_pointSize)
+        , m_family(data.m_family)
+        , m_style(data.m_style)
+        , m_weight(data.m_weight)
+        , m_underlined(data.m_underlined)
+        , m_faceName(data.m_faceName)
+        , m_encoding(data.m_encoding)
+        , m_macFontNum(data.m_macFontNum)
+        , m_macFontSize(data.m_macFontSize)
+        , m_macFontStyle(data.m_macFontStyle)
+        , m_macATSUFontID(data.m_macATSUFontID)
+    {
+        Init(data.m_pointSize, data.m_family, data.m_style, data.m_weight,
+             data.m_underlined, data.m_faceName, data.m_encoding);
+    }
+
+    wxFontRefData(int size,
+                  int family,
+                  int style,
+                  int weight,
+                  bool underlined,
+                  const wxString& faceName,
+                  wxFontEncoding encoding)
+        : m_fontId(0)
+        , m_pointSize(size)
+        , m_family(family)
+        , m_style(style)
+        , m_weight(weight)
+        , m_underlined(underlined)
+        , m_faceName(faceName)
+        , m_encoding(encoding)
+        , m_macFontNum(0)
+        , m_macFontSize(0)
+        , m_macFontStyle(0)
+        , m_macATSUFontID(0)
+    {
+        Init(size, family, style, weight, underlined, faceName, encoding);
+    }
+
+    virtual ~wxFontRefData();
+    void SetNoAntiAliasing( bool no = TRUE ) { m_noAA = no; }
+    bool GetNoAntiAliasing() { return m_noAA; }
+    
+protected:
+    // common part of all ctors
+    void Init(int size,
+              int family,
+              int style,
+              int weight,
+              bool underlined,
+              const wxString& faceName,
+              wxFontEncoding encoding);
+
+    // font characterstics
+    int            m_fontId;
+    int            m_pointSize;
+    int            m_family;
+    int            m_style;
+    int            m_weight;
+    bool           m_underlined;
+    wxString       m_faceName;
+    wxFontEncoding m_encoding;
+    bool            m_noAA;      // No anti-aliasing
+    
+public:
+    short       m_macFontNum;
+    short       m_macFontSize;
+    unsigned char  m_macFontStyle;
+    wxUint32       m_macATSUFontID;
+
+    wxNativeFontInfo  m_info;
+
+public:
+    void        MacFindFont() ;
+};
 // ============================================================================
 // implementation
 // ============================================================================
@@ -313,3 +413,12 @@ bool wxFont::GetNoAntiAliasing()
     return M_FONTDATA->m_noAA;
 }
 
+const wxNativeFontInfo *wxFont::GetNativeFontInfo() const
+{
+    wxCHECK_MSG( Ok(), NULL, wxT("invalid font") );
+
+    M_FONTDATA->m_info.InitFromFont(*this);
+
+    return &(M_FONTDATA->m_info);
+}
+
index d044a439ce3f701e61891cd1b68df8af8c5eadd7..06d972feeeba94d652d1636b6f04712f97fb2176 100644 (file)
@@ -74,6 +74,8 @@ private:
     wxMGLFontLibrary *m_library;
     bool              m_valid;
 
+    wxNativeFontInfo  m_info;
+
     friend class wxFont;
 };
 
@@ -264,6 +266,14 @@ bool wxFont::IsFixedWidth() const
     return (bool)(M_FONTDATA->m_library->GetFamily()->GetInfo()->isFixed);
 }
 
+const wxNativeFontInfo *wxFont::GetNativeFontInfo() const
+{
+    wxCHECK_MSG( Ok(), NULL, wxT("invalid font") );
+
+    M_FONTDATA->m_info.InitFromFont(*this);
+
+    return &(M_FONTDATA->m_info);
+}
 
 // ----------------------------------------------------------------------------
 // change font attributes
index c4c0f9fcd6286d17eea3295d47f8f507da105d06..06637b118da1623a8c2bb1283f204ce874b5bc5e 100644 (file)
@@ -485,14 +485,14 @@ wxFontEncoding wxFont::GetEncoding() const
     return M_FONTDATA->m_encoding;
 }
 
-wxNativeFontInfo *wxFont::GetNativeFontInfo() const
+const wxNativeFontInfo *wxFont::GetNativeFontInfo() const
 {
     wxCHECK_MSG( Ok(), (wxNativeFontInfo *)NULL, wxT("invalid font") );
 
     if(M_FONTDATA->m_nativeFontInfo.GetXFontName().IsEmpty())
         GetInternalFont();
 
-    return new wxNativeFontInfo(M_FONTDATA->m_nativeFontInfo);
+    return &(M_FONTDATA->m_nativeFontInfo);
 }
 
 // ----------------------------------------------------------------------------
index 296142c5852e951b1f84cda50a426865d3515e8e..ae8752a780e12781b71d8d9ad6e25e1544046be9 100644 (file)
@@ -948,12 +948,10 @@ wxFontEncoding wxFont::GetEncoding() const
     return M_FONTDATA->GetEncoding();
 }
 
-wxNativeFontInfo *wxFont::GetNativeFontInfo() const
+const wxNativeFontInfo *wxFont::GetNativeFontInfo() const
 {
-    if ( M_FONTDATA->HasNativeFontInfo() )
-        return new wxNativeFontInfo(M_FONTDATA->GetNativeFontInfo());
-
-    return 0;
+    return M_FONTDATA->HasNativeFontInfo() ? &(M_FONTDATA->GetNativeFontInfo())
+                                           : NULL;
 }
 
 bool wxFont::IsFixedWidth() const
index 8f9844def70b4eeb133814bfbc1545c35e65e542..a74885be8ab51a4c4121c8bdba5000e127eb621e 100644 (file)
@@ -234,36 +234,20 @@ wxFontEncoding wxGetFontEncFromCharSet(int cs)
 
 void wxFillLogFont(LOGFONT *logFont, const wxFont *font)
 {
+    wxNativeFontInfo fi;
+
     // maybe we already have LOGFONT for this font?
-    wxNativeFontInfo *fontinfo = font->GetNativeFontInfo();
-    if ( !fontinfo )
+    const wxNativeFontInfo *pFI = font->GetNativeFontInfo();
+    if ( !pFI )
     {
         // use wxNativeFontInfo methods to build a LOGFONT for this font
-        fontinfo = new wxNativeFontInfo;
-
-        // translate all font parameters
-        fontinfo->SetStyle((wxFontStyle)font->GetStyle());
-        fontinfo->SetWeight((wxFontWeight)font->GetWeight());
-        fontinfo->SetUnderlined(font->GetUnderlined());
-        fontinfo->SetPointSize(font->GetPointSize());
-
-        // set the family/facename
-        fontinfo->SetFamily((wxFontFamily)font->GetFamily());
-        wxString facename = font->GetFaceName();
-        if ( !facename.empty() )
-        {
-            fontinfo->SetFaceName(facename);
-        }
+        fi.InitFromFont(*font);
 
-        // deal with encoding now (it may override the font family and facename
-        // so do it after setting them)
-        fontinfo->SetEncoding(font->GetEncoding());
+        pFI = &fi;
     }
 
     // transfer all the data to LOGFONT
-    *logFont = fontinfo->lf;
-
-    delete fontinfo;
+    *logFont = pFI->lf;
 }
 
 wxFont wxCreateFontFromLogFont(const LOGFONT *logFont)
index 52e3ec4d2e103970e2424eacaa661b8b8a267af6..5588a0a0134688d7347ea163d0c930543c3d1dc5 100644 (file)
@@ -1140,11 +1140,10 @@ wxFontEncoding wxFont::GetEncoding() const
     return M_FONTDATA->GetEncoding();
 } // end of wxFont::GetEncoding
 
-wxNativeFontInfo* wxFont::GetNativeFontInfo() const
+const wxNativeFontInfo* wxFont::GetNativeFontInfo() const
 {
-    if (M_FONTDATA->HasNativeFontInfo())
-        return new wxNativeFontInfo(M_FONTDATA->GetNativeFontInfo());
-    return 0;
+    return M_FONTDATA->HasNativeFontInfo() ? &(M_FONTDATA->GetNativeFontInfo())
+                                           : NULL;
 } // end of wxFont::GetNativeFontInfo
 
 //
index 773246bbe6ca62777a88e4ce9249ac6ad312d51a..bc698ba148965a6324970058d356977bf35ba0f9 100644 (file)
@@ -752,7 +752,7 @@ bool wxFont::GetNoAntiAliasing()
     return M_FONTDATA->m_noAA;
 }
 
-wxNativeFontInfo *wxFont::GetNativeFontInfo() const
+const wxNativeFontInfo *wxFont::GetNativeFontInfo() const
 {
     wxCHECK_MSG( Ok(), (wxNativeFontInfo *)NULL, wxT("invalid font") );
 
@@ -762,7 +762,7 @@ wxNativeFontInfo *wxFont::GetNativeFontInfo() const
         GetInternalFont();
 #endif
 
-    return new wxNativeFontInfo(M_FONTDATA->m_nativeFontInfo);
+    return &(M_FONTDATA->m_nativeFontInfo);
 }
 
 bool wxFont::IsFixedWidth() const