]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/carbon/font.cpp
better native types for carbon
[wxWidgets.git] / src / osx / carbon / font.cpp
index c3426f807bb1e0ee6d57f77e1333fa32fcfd90a7..f9b5bc90d20d7379f8b71d2041a0f3c4b9e6ae5c 100644 (file)
@@ -170,9 +170,10 @@ public:
 #if wxOSX_USE_CORE_TEXT
     wxCFRef<CTFontRef> m_ctFont;
 #endif
-#if wxOSX_USE_CORE_TEXT || wxOSX_USE_ATSU_TEXT
+#if wxOSX_USE_ATSU_TEXT
     ATSUStyle       m_macATSUStyle ;
 #endif
+    wxCFRef<CGFontRef> m_cgFont;
 #if wxOSX_USE_COCOA
     WX_NSFont       m_nsFont;
 #endif
@@ -195,8 +196,9 @@ wxFontRefData::wxFontRefData(const wxFontRefData& data)
 #endif
 #if wxOSX_USE_CORE_TEXT
     m_ctFont = data.m_ctFont;
-#endif
-#if wxOSX_USE_CORE_TEXT || wxOSX_USE_ATSU_TEXT
+#endif 
+    m_cgFont = data.m_cgFont;
+#if wxOSX_USE_ATSU_TEXT
     if ( data.m_macATSUStyle != NULL )
     {
         ATSUCreateStyle(&m_macATSUStyle) ;
@@ -226,7 +228,7 @@ void wxFontRefData::Init()
 #if wxOSX_USE_CARBON && wxOSX_USE_ATSU_TEXT
     m_macThemeFontID = kThemeCurrentPortFont ;
 #endif
-#if wxOSX_USE_CORE_TEXT || wxOSX_USE_ATSU_TEXT
+#if wxOSX_USE_ATSU_TEXT
     m_macATSUStyle = NULL ;
 #endif
 #if wxOSX_USE_COCOA
@@ -248,7 +250,8 @@ void wxFontRefData::Free()
 #if wxOSX_USE_CORE_TEXT
     m_ctFont.reset();
 #endif
-#if wxOSX_USE_CORE_TEXT || wxOSX_USE_ATSU_TEXT
+    m_cgFont.reset();
+#if wxOSX_USE_ATSU_TEXT
     if ( m_macATSUStyle )
     {
         ::ATSUDisposeStyle((ATSUStyle)m_macATSUStyle);
@@ -280,7 +283,7 @@ wxFontRefData::wxFontRefData(wxOSXSystemFont font, int size)
 #if wxOSX_USE_CORE_TEXT
     if (  UMAGetSystemVersion() >= 0x1050 )
     {
-        CTFontUIFontType uifont;
+        CTFontUIFontType uifont = kCTFontSystemFontType;
         switch( font )
         {
             case wxOSX_SYSTEM_FONT_NORMAL:
@@ -320,7 +323,7 @@ wxFontRefData::wxFontRefData(wxOSXSystemFont font, int size)
     {
 #if !wxOSX_USE_CARBON
         // not needed outside
-        ThemeFontID m_macThemeFontID;
+        ThemeFontID m_macThemeFontID = kThemeSystemFont;
 #endif
         switch( font )
         {
@@ -381,10 +384,10 @@ wxFontRefData::wxFontRefData(wxOSXSystemFont font, int size)
     }
 #endif
 #if wxOSX_USE_COCOA
-    m_nsFont = wxFont::CreateNSFont( font, &m_info );
+    m_nsFont = wxFont::OSXCreateNSFont( font, &m_info );
 #endif
 #if wxOSX_USE_IPHONE
-    m_uiFont = wxFont::CreateUIFont( font, &m_info );
+    m_uiFont = wxFont::OSXCreateUIFont( font, &m_info );
 #endif
 }
 
@@ -414,6 +417,7 @@ void wxFontRefData::MacFindFont()
         {
             m_ctFont.reset( CTFontCreateWithFontDescriptor( m_info.m_ctFontDescriptor, 0/*m_pointSize */, NULL ) );
         }
+        m_cgFont.reset(CTFontCopyGraphicsFont(m_ctFont, NULL));
     }
 
 #endif
@@ -471,14 +475,18 @@ void wxFontRefData::MacFindFont()
                                      atsuTags, atsuSizes, atsuValues);
 
         wxASSERT_MSG( status == noErr , wxT("couldn't modify ATSU style") );
-        return;
+        if ( m_cgFont.get() == NULL )
+        {
+            ATSFontRef fontRef = FMGetATSFontRefFromFont(m_info.m_atsuFontID);
+            m_cgFont.reset( CGFontCreateWithPlatformFont( &fontRef ) );
+        }
     }
 #endif
 #if wxOSX_USE_COCOA
-    m_nsFont = wxFont::CreateNSFont( &m_info );
+    m_nsFont = wxFont::OSXCreateNSFont( &m_info );
 #endif
 #if wxOSX_USE_IPHONE
-    m_uiFont = wxFont::CreateUIFont( &m_info );
+    m_uiFont = wxFont::OSXCreateUIFont( &m_info );
 #endif
     m_fontValid = true;
 }
@@ -754,7 +762,7 @@ wxUint16 wxFont::MacGetThemeFontID() const
 
 #endif
 
-#if wxOSX_USE_CORE_TEXT || wxOSX_USE_ATSU_TEXT
+#if wxOSX_USE_ATSU_TEXT
 void * wxFont::MacGetATSUStyle() const
 {
     wxCHECK_MSG( M_FONTDATA != NULL , NULL, wxT("invalid font") );
@@ -764,11 +772,34 @@ void * wxFont::MacGetATSUStyle() const
     
     return M_FONTDATA->m_macATSUStyle;
 }
+
+#if WXWIN_COMPATIBILITY_2_8
+wxUint32 wxFont::MacGetATSUFontID() const 
+{
+    wxCHECK_MSG( M_FONTDATA != NULL , NULL, wxT("invalid font") );
+
+    // cast away constness otherwise lazy font resolution is not possible
+    const_cast<wxFont *>(this)->RealizeResource();
+    
+    return M_FONTDATA->m_info.m_atsuFontID;
+}
+
+wxUint32 wxFont::MacGetATSUAdditionalQDStyles() const
+{
+    wxCHECK_MSG( M_FONTDATA != NULL , NULL, wxT("invalid font") );
+
+    // cast away constness otherwise lazy font resolution is not possible
+    const_cast<wxFont *>(this)->RealizeResource();
+    
+    return M_FONTDATA->m_info.m_atsuAdditionalQDStyles;
+}
+#endif
+
 #endif
 
 #if wxOSX_USE_CORE_TEXT
 
-CTFontRef wxFont::GetCTFont() const
+CTFontRef wxFont::OSXGetCTFont() const
 {
     wxCHECK_MSG( M_FONTDATA != NULL , 0, wxT("invalid font") );
 
@@ -780,9 +811,24 @@ CTFontRef wxFont::GetCTFont() const
 
 #endif
 
+#if wxOSX_USE_COCOA_OR_CARBON
+
+CGFontRef wxFont::OSXGetCGFont() const
+{
+    wxCHECK_MSG( M_FONTDATA != NULL , 0, wxT("invalid font") );
+
+    // cast away constness otherwise lazy font resolution is not possible
+    const_cast<wxFont *>(this)->RealizeResource();
+    
+    return (M_FONTDATA->m_cgFont);
+}
+
+#endif
+
+
 #if wxOSX_USE_COCOA
 
-NSFont* wxFont::GetNSFont() const
+NSFont* wxFont::OSXGetNSFont() const
 {
     wxCHECK_MSG( M_FONTDATA != NULL , 0, wxT("invalid font") );
 
@@ -1011,7 +1057,7 @@ void wxNativeFontInfo::EnsureValid()
 #endif
 #if wxOSX_USE_COCOA
     if ( m_nsFontDescriptor == NULL )
-        ValidateNSFontDescriptor();
+        OSXValidateNSFontDescriptor();
 #endif
 #if wxOSX_USE_IPHONE
     // TODO