]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/carbon/font.cpp
Fix crash in wxDC::GetMultiLineTextExtent() after last commit.
[wxWidgets.git] / src / osx / carbon / font.cpp
index d4a458472207305c192dc23d2d83e4474e1e3e04..634453ec6a335b4e4c4b034ceff938301ba91a56 100644 (file)
@@ -137,6 +137,8 @@ public:
     }
 
     wxFontEncoding GetEncoding() const { return m_info.GetEncoding(); }
     }
 
     wxFontEncoding GetEncoding() const { return m_info.GetEncoding(); }
+    
+    bool IsFixedWidth() const;
 
     void Free();
 
 
     void Free();
 
@@ -272,7 +274,6 @@ wxFontRefData::wxFontRefData(wxOSXSystemFont font, int size)
     Init();
 
 #if wxOSX_USE_CORE_TEXT
     Init();
 
 #if wxOSX_USE_CORE_TEXT
-    if (  UMAGetSystemVersion() >= 0x1050 )
     {
         CTFontUIFontType uifont = kCTFontSystemFontType;
         switch( font )
     {
         CTFontUIFontType uifont = kCTFontSystemFontType;
         switch( font )
@@ -465,7 +466,6 @@ void wxFontRefData::MacFindFont()
     m_info.EnsureValid();
 
 #if wxOSX_USE_CORE_TEXT
     m_info.EnsureValid();
 
 #if wxOSX_USE_CORE_TEXT
-    if (  UMAGetSystemVersion() >= 0x1050 )
     {
          CTFontSymbolicTraits traits = 0;
 
     {
          CTFontSymbolicTraits traits = 0;
 
@@ -542,6 +542,16 @@ void wxFontRefData::MacFindFont()
     m_fontValid = true;
 }
 
     m_fontValid = true;
 }
 
+bool wxFontRefData::IsFixedWidth() const
+{
+#if wxOSX_USE_CORE_TEXT
+    CTFontSymbolicTraits traits = CTFontGetSymbolicTraits(m_ctFont);
+    return (traits & kCTFontMonoSpaceTrait) != 0;
+#else
+    return false;
+#endif
+}
+
 // ----------------------------------------------------------------------------
 // wxFont
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 // wxFont
 // ----------------------------------------------------------------------------
@@ -657,7 +667,7 @@ wxGDIRefData *wxFont::CloneGDIRefData(const wxGDIRefData *data) const
 
 void wxFont::SetPointSize(int pointSize)
 {
 
 void wxFont::SetPointSize(int pointSize)
 {
-    if ( M_FONTDATA->GetPointSize() == pointSize )
+    if ( M_FONTDATA != NULL && M_FONTDATA->GetPointSize() == pointSize )
         return;
 
     AllocExclusive();
         return;
 
     AllocExclusive();
@@ -730,6 +740,16 @@ wxSize wxFont::GetPixelSize() const
 #endif
 }
 
 #endif
 }
 
+bool wxFont::IsFixedWidth() const
+{
+    wxCHECK_MSG( M_FONTDATA != NULL , false, wxT("invalid font") );
+    
+    // cast away constness otherwise lazy font resolution is not possible
+    const_cast<wxFont *>(this)->RealizeResource();
+
+    return M_FONTDATA->IsFixedWidth();
+}
+
 wxFontFamily wxFont::DoGetFamily() const
 {
     return M_FONTDATA->GetFamily();
 wxFontFamily wxFont::DoGetFamily() const
 {
     return M_FONTDATA->GetFamily();