]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/font.cpp
use facename in wxFontRefData::Init() in Unicode build (part of patch 1671684)
[wxWidgets.git] / src / msw / font.cpp
index bac473af42d39b8c8106a09adc1dbdffab09b572..d7fcfe9b9f6b995f4843bfa17c39883ed5442f07 100644 (file)
@@ -262,7 +262,7 @@ public:
         if ( m_nativeFontInfoOk )
             return m_nativeFontInfo.SetFaceName(faceName);
 
-            m_faceName = faceName;
+        m_faceName = faceName;
         return true;
     }
 
@@ -321,6 +321,8 @@ protected:
     bool             m_nativeFontInfoOk;
 };
 
+#define M_FONTDATA ((wxFontRefData*)m_refData)
+
 // ============================================================================
 // implementation
 // ============================================================================
@@ -855,6 +857,16 @@ wxFont::~wxFont()
 // real implementation
 // ----------------------------------------------------------------------------
 
+wxObjectRefData *wxFont::CreateRefData() const
+{
+    return new wxFontRefData();
+}
+
+wxObjectRefData *wxFont::CloneRefData(const wxObjectRefData *data) const
+{
+    return new wxFontRefData(*wx_static_cast(const wxFontRefData *, data));
+}
+
 bool wxFont::RealizeResource()
 {
     if ( GetResourceHandle() )
@@ -894,28 +906,13 @@ bool wxFont::IsFree() const
     return M_FONTDATA && (M_FONTDATA->GetHFONT() == 0);
 }
 
-void wxFont::Unshare()
-{
-    // Don't change shared data
-    if ( !m_refData )
-    {
-        m_refData = new wxFontRefData();
-    }
-    else
-    {
-        wxFontRefData* ref = new wxFontRefData(*M_FONTDATA);
-        UnRef();
-        m_refData = ref;
-    }
-}
-
 // ----------------------------------------------------------------------------
 // change font attribute: we recreate font when doing it
 // ----------------------------------------------------------------------------
 
 void wxFont::SetPointSize(int pointSize)
 {
-    Unshare();
+    AllocExclusive();
 
     M_FONTDATA->SetPointSize(pointSize);
 
@@ -924,7 +921,7 @@ void wxFont::SetPointSize(int pointSize)
 
 void wxFont::SetPixelSize(const wxSize& pixelSize)
 {
-    Unshare();
+    AllocExclusive();
 
     M_FONTDATA->SetPixelSize(pixelSize);
 
@@ -933,7 +930,7 @@ void wxFont::SetPixelSize(const wxSize& pixelSize)
 
 void wxFont::SetFamily(int family)
 {
-    Unshare();
+    AllocExclusive();
 
     M_FONTDATA->SetFamily(family);
 
@@ -942,7 +939,7 @@ void wxFont::SetFamily(int family)
 
 void wxFont::SetStyle(int style)
 {
-    Unshare();
+    AllocExclusive();
 
     M_FONTDATA->SetStyle(style);
 
@@ -951,7 +948,7 @@ void wxFont::SetStyle(int style)
 
 void wxFont::SetWeight(int weight)
 {
-    Unshare();
+    AllocExclusive();
 
     M_FONTDATA->SetWeight(weight);
 
@@ -960,7 +957,7 @@ void wxFont::SetWeight(int weight)
 
 bool wxFont::SetFaceName(const wxString& faceName)
 {
-    Unshare();
+    AllocExclusive();
 
     bool refdataok = M_FONTDATA->SetFaceName(faceName);
 
@@ -978,7 +975,7 @@ bool wxFont::SetFaceName(const wxString& faceName)
 
 void wxFont::SetUnderlined(bool underlined)
 {
-    Unshare();
+    AllocExclusive();
 
     M_FONTDATA->SetUnderlined(underlined);
 
@@ -987,7 +984,7 @@ void wxFont::SetUnderlined(bool underlined)
 
 void wxFont::SetEncoding(wxFontEncoding encoding)
 {
-    Unshare();
+    AllocExclusive();
 
     M_FONTDATA->SetEncoding(encoding);
 
@@ -996,9 +993,7 @@ void wxFont::SetEncoding(wxFontEncoding encoding)
 
 void wxFont::DoSetNativeFontInfo(const wxNativeFontInfo& info)
 {
-    Unshare();
-
-    FreeResource();
+    AllocExclusive();
 
     *M_FONTDATA = wxFontRefData(info);
 
@@ -1018,6 +1013,8 @@ int wxFont::GetPointSize() const
 
 wxSize wxFont::GetPixelSize() const
 {
+    wxCHECK_MSG( Ok(), wxDefaultSize, wxT("invalid font") );
+
     return M_FONTDATA->GetPixelSize();
 }
 
@@ -1072,12 +1069,14 @@ wxFontEncoding wxFont::GetEncoding() const
 
 const wxNativeFontInfo *wxFont::GetNativeFontInfo() const
 {
-    return M_FONTDATA->HasNativeFontInfo() ? &(M_FONTDATA->GetNativeFontInfo())
+    return Ok() && M_FONTDATA->HasNativeFontInfo() ? &(M_FONTDATA->GetNativeFontInfo())
                                            : NULL;
 }
 
 wxString wxFont::GetNativeFontInfoDesc() const
 {
+    wxCHECK_MSG( Ok(), wxEmptyString, wxT("invalid font") );
+
     // be sure we have an HFONT associated...
     wxConstCast(this, wxFont)->RealizeResource();
     return wxFontBase::GetNativeFontInfoDesc();
@@ -1085,6 +1084,8 @@ wxString wxFont::GetNativeFontInfoDesc() const
 
 wxString wxFont::GetNativeFontInfoUserDesc() const
 {
+    wxCHECK_MSG( Ok(), wxEmptyString, wxT("invalid font") );
+
     // be sure we have an HFONT associated...
     wxConstCast(this, wxFont)->RealizeResource();
     return wxFontBase::GetNativeFontInfoUserDesc();