]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/carbon/font.cpp
make sure we have a default handling the quit command, see #12402
[wxWidgets.git] / src / osx / carbon / font.cpp
index 360a7fa9aa3907e28ea3fcad89e31fdd7ae5e885..d6c35540fb24f33da5deb5b9667364c8ec8321bb 100644 (file)
@@ -31,8 +31,6 @@
 #include <map>
 #include <string>
 
-IMPLEMENT_DYNAMIC_CLASS(wxFont, wxGDIObject)
-
 class WXDLLEXPORT wxFontRefData: public wxGDIRefData
 {
 public:
@@ -139,6 +137,8 @@ public:
     }
 
     wxFontEncoding GetEncoding() const { return m_info.GetEncoding(); }
+    
+    bool IsFixedWidth() const;
 
     void Free();
 
@@ -177,7 +177,7 @@ public:
 
 #define M_FONTDATA ((wxFontRefData*)m_refData)
 
-wxFontRefData::wxFontRefData(const wxFontRefData& data)
+wxFontRefData::wxFontRefData(const wxFontRefData& data) : wxGDIRefData()
 {
     Init();
     m_info = data.m_info;
@@ -274,7 +274,6 @@ wxFontRefData::wxFontRefData(wxOSXSystemFont font, int size)
     Init();
 
 #if wxOSX_USE_CORE_TEXT
-    if (  UMAGetSystemVersion() >= 0x1050 )
     {
         CTFontUIFontType uifont = kCTFontSystemFontType;
         switch( font )
@@ -467,7 +466,6 @@ void wxFontRefData::MacFindFont()
     m_info.EnsureValid();
 
 #if wxOSX_USE_CORE_TEXT
-    if (  UMAGetSystemVersion() >= 0x1050 )
     {
          CTFontSymbolicTraits traits = 0;
 
@@ -544,6 +542,16 @@ void wxFontRefData::MacFindFont()
     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
 // ----------------------------------------------------------------------------
@@ -659,7 +667,7 @@ wxGDIRefData *wxFont::CloneGDIRefData(const wxGDIRefData *data) const
 
 void wxFont::SetPointSize(int pointSize)
 {
-    if ( M_FONTDATA->GetPointSize() == pointSize )
+    if ( M_FONTDATA != NULL && M_FONTDATA->GetPointSize() == pointSize )
         return;
 
     AllocExclusive();
@@ -732,6 +740,16 @@ wxSize wxFont::GetPixelSize() const
 #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();
@@ -814,7 +832,6 @@ void * wxFont::MacGetATSUStyle() const
     return M_FONTDATA->m_macATSUStyle;
 }
 
-#if WXWIN_COMPATIBILITY_2_8
 wxUint32 wxFont::MacGetATSUFontID() const
 {
     wxCHECK_MSG( M_FONTDATA != NULL, 0, wxT("invalid font") );
@@ -836,8 +853,6 @@ wxUint32 wxFont::MacGetATSUAdditionalQDStyles() const
 }
 #endif
 
-#endif
-
 #if wxOSX_USE_CORE_TEXT
 
 CTFontRef wxFont::OSXGetCTFont() const
@@ -898,7 +913,7 @@ UIFont* wxFont::OSXGetUIFont() const
 const wxNativeFontInfo * wxFont::GetNativeFontInfo() const
 {
     wxCHECK_MSG( M_FONTDATA != NULL , NULL, wxT("invalid font") );
-    wxCHECK_MSG( Ok(), NULL, wxT("invalid font") );
+    wxCHECK_MSG( IsOk(), NULL, wxT("invalid font") );
 
     // cast away constness otherwise lazy font resolution is not possible
     const_cast<wxFont *>(this)->RealizeResource();
@@ -1097,7 +1112,16 @@ void wxNativeFontInfo::Init(int size,
                   wxFontEncoding encoding)
 {
     Init();
-    m_pointSize = size;
+
+    // We should use the default font size if the special value wxDEFAULT is
+    // specified and we also handle -1 as a synonym for wxDEFAULT for
+    // compatibility with wxGTK (see #12541).
+    //
+    // Notice that we rely on the fact that wxNORMAL_FONT itself is not
+    // initialized using this ctor, but from native font info.
+    m_pointSize = size == -1 || size == wxDEFAULT
+                    ? wxNORMAL_FONT->GetPointSize()
+                    : size;
     m_family = family;
     m_style = style;
     m_weight = weight;
@@ -1222,6 +1246,12 @@ wxFontEncoding wxNativeFontInfo::GetEncoding() const
     return m_encoding;
 }
 
+bool wxNativeFontInfo::GetStrikethrough() const
+{
+    return false;
+}
+
+
 // changing the font descriptor
 
 void wxNativeFontInfo::SetPointSize(int pointsize)
@@ -1286,3 +1316,9 @@ void wxNativeFontInfo::SetEncoding(wxFontEncoding encoding_)
     m_encoding = encoding_;
     // not reflected in native descriptors
 }
+
+void wxNativeFontInfo::SetStrikethrough(bool WXUNUSED(strikethrough))
+{
+}
+
+