WebCore:
authormitz@apple.com <mitz@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 12 Mar 2008 18:31:25 +0000 (18:31 +0000)
committermitz@apple.com <mitz@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 12 Mar 2008 18:31:25 +0000 (18:31 +0000)
        Reviewed by Darin Adler and Sam Weinig.

        - <rdar://problem/4433248> use CoreText API instead of SPI on Leopard

        Use CTFontCopyGraphicsFont and CTFontGetPlatformFont on Leopard instead
        of wkGetCGFontFromNSFont and wkGetNSFontATSUFontId, relying on NSFont
        and CTFontRef being toll-free bridged.

        * WebCore.Tiger.exp:
        * WebCore.base.exp:
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs): Changed to use the cgFont() accessor.
        * platform/graphics/mac/FontPlatformData.h:
        Made m_cgFont a RetainPtr on Leopard.
        (WebCore::toCTFontRef): Added a function that encapsulates the
        toll-free bridging.
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::cgFont): Added this accessor method.
        * platform/graphics/mac/FontPlatformDataMac.mm:
        (WebCore::FontPlatformData::FontPlatformData): Changed to use
        CoreText API on Leopard.
        (WebCore::FontPlatformData::setFont): Ditto.
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::initFontData):
        (WebCore::pathFromFont):
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/mac/WebCoreSystemInterface.mm:

WebKit/mac:

        Reviewed by Darin Adler and Sam Weinig.

        - <rdar://problem/4433248> use CoreText API instead of SPI on Leopard

        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface): Made WKGetCGFontFromNSFont and
        WKGetNSFontATSUFontId Tiger-only.

WebKitLibraries:

        Reviewed by Darin Adler and Sam Weinig.

        - <rdar://problem/4433248> use CoreText API instead of SPI on Leopard

        * WebKitSystemInterface.h:
        * libWebKitSystemInterfaceLeopard.a:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@30997 268f45cc-cd09-0410-ab3c-d52691b4dbfc

13 files changed:
WebCore/ChangeLog
WebCore/WebCore.Tiger.exp
WebCore/WebCore.base.exp
WebCore/platform/graphics/mac/FontMac.mm
WebCore/platform/graphics/mac/FontPlatformData.h
WebCore/platform/graphics/mac/FontPlatformDataMac.mm
WebCore/platform/graphics/mac/SimpleFontDataMac.mm
WebCore/platform/mac/WebCoreSystemInterface.mm
WebKit/mac/ChangeLog
WebKit/mac/WebCoreSupport/WebSystemInterface.m
WebKitLibraries/ChangeLog
WebKitLibraries/WebKitSystemInterface.h
WebKitLibraries/libWebKitSystemInterfaceLeopard.a

index bb9160a..be7e115 100644 (file)
@@ -1,3 +1,34 @@
+2008-03-12  Dan Bernstein  <mitz@apple.com>
+
+        Reviewed by Darin Adler and Sam Weinig.
+
+        - <rdar://problem/4433248> use CoreText API instead of SPI on Leopard
+
+        Use CTFontCopyGraphicsFont and CTFontGetPlatformFont on Leopard instead
+        of wkGetCGFontFromNSFont and wkGetNSFontATSUFontId, relying on NSFont
+        and CTFontRef being toll-free bridged.
+
+        * WebCore.Tiger.exp:
+        * WebCore.base.exp:
+        * platform/graphics/mac/FontMac.mm:
+        (WebCore::Font::drawGlyphs): Changed to use the cgFont() accessor.
+        * platform/graphics/mac/FontPlatformData.h:
+        Made m_cgFont a RetainPtr on Leopard.
+        (WebCore::toCTFontRef): Added a function that encapsulates the
+        toll-free bridging.
+        (WebCore::FontPlatformData::FontPlatformData):
+        (WebCore::FontPlatformData::cgFont): Added this accessor method.
+        * platform/graphics/mac/FontPlatformDataMac.mm:
+        (WebCore::FontPlatformData::FontPlatformData): Changed to use
+        CoreText API on Leopard.
+        (WebCore::FontPlatformData::setFont): Ditto.
+        * platform/graphics/mac/SimpleFontDataMac.mm:
+        (WebCore::initFontData):
+        (WebCore::pathFromFont):
+        (WebCore::SimpleFontData::platformInit):
+        (WebCore::SimpleFontData::platformWidthForGlyph):
+        * platform/mac/WebCoreSystemInterface.mm:
+
 2008-03-12  David Harrison  <harrison@apple.com>
 
         Reviewed by Darin.
index 0a25d23..3197e06 100644 (file)
@@ -1,2 +1,4 @@
+_wkGetCGFontFromNSFont
 _wkGetFontMetrics
+_wkGetNSFontATSUFontId
 _wkSupportsMultipartXMixedReplace
index ab69551..fa8d883 100644 (file)
@@ -744,7 +744,6 @@ _wkDrawMediaUnMuteButton
 _wkDrawTextFieldCellFocusRing
 _wkFontSmoothingModeIsLCD
 _wkGetATSStyleGroup
-_wkGetCGFontFromNSFont
 _wkGetExtensionsForMIMEType
 _wkGetFontInLanguageForCharacter
 _wkGetFontInLanguageForRange
@@ -753,7 +752,6 @@ _wkGetGlyphVectorFirstRecord
 _wkGetGlyphVectorNumGlyphs
 _wkGetGlyphVectorRecordSize
 _wkGetMIMETypeForExtension
-_wkGetNSFontATSUFontId
 _wkGetNSURLResponseCalculatedExpiration
 _wkGetNSURLResponseLastModifiedDate
 _wkGetNSURLResponseMustRevalidate
index 06d8d9e..9ce59aa 100644 (file)
@@ -628,7 +628,7 @@ void Font::drawGlyphs(GraphicsContext* context, const SimpleFontData* font, cons
                 [[[platformData.font() fontDescriptor] fontAttributes] objectForKey:NSFontNameAttribute]);
     }
     
-    CGContextSetFont(cgContext, platformData.m_cgFont);
+    CGContextSetFont(cgContext, platformData.cgFont());
 
     CGAffineTransform matrix = CGAffineTransformIdentity;
     if (drawFont)
index 8f118e0..1848311 100644 (file)
@@ -34,33 +34,51 @@ class NSFont;
 
 typedef struct CGFont* CGFontRef;
 typedef UInt32 ATSUFontID;
+#ifndef BUILDING_ON_TIGER
+typedef const struct __CTFont* CTFontRef;
+#endif
 
 #include <CoreFoundation/CFBase.h>
 #include <objc/objc-auto.h>
+#include <wtf/RetainPtr.h>
 
 namespace WebCore {
 
+#ifndef BUILDING_ON_TIGER
+inline CTFontRef toCTFontRef(NSFont *nsFont) { return reinterpret_cast<CTFontRef>(nsFont); }
+#endif
+
 struct FontPlatformData {
     class Deleted {};
 
     FontPlatformData(Deleted)
-    : m_syntheticBold(false), m_syntheticOblique(false), m_cgFont(0), m_atsuFontID(0), m_size(0), m_font((NSFont*)-1)
-    {}
+        : m_syntheticBold(false)
+        , m_syntheticOblique(false)
+        , m_atsuFontID(0)
+        , m_size(0)
+        , m_font((NSFont*)-1)
+#ifdef BUILDING_ON_TIGER
+        , m_cgFont(0)
+#endif
+    {
+    }
 
     FontPlatformData(float s, bool b, bool o)
         : m_syntheticBold(b)
         , m_syntheticOblique(o)
-        , m_cgFont(0)
         , m_atsuFontID(0)
         , m_size(s)
         , m_font(0)
+#ifdef BUILDING_ON_TIGER
+        , m_cgFont(0)
+#endif
     {
     }
 
     FontPlatformData(NSFont* f = 0, bool b = false, bool o = false);
     
     FontPlatformData(CGFontRef f, ATSUFontID fontID, float s, bool b , bool o)
-    : m_syntheticBold(b), m_syntheticOblique(o), m_cgFont(f), m_atsuFontID(fontID), m_size(s), m_font(0)
+    : m_syntheticBold(b), m_syntheticOblique(o), m_atsuFontID(fontID), m_size(s), m_font(0), m_cgFont(f)
     {
     }
 
@@ -72,8 +90,7 @@ struct FontPlatformData {
 
     bool m_syntheticBold;
     bool m_syntheticOblique;
-    
-    CGFontRef m_cgFont; // It is not necessary to refcount this, since either an NSFont owns it or some CachedFont has it referenced.
+
     ATSUFontID m_atsuFontID;
     float m_size;
 
@@ -93,8 +110,19 @@ struct FontPlatformData {
     NSFont *font() const { return m_font; }
     void setFont(NSFont* font);
 
+#ifndef BUILDING_ON_TIGER
+    CGFontRef cgFont() const { return m_cgFont.get(); }
+#else
+    CGFontRef cgFont() const { return m_cgFont; }
+#endif
+
 private:
     NSFont *m_font;
+#ifndef BUILDING_ON_TIGER
+    RetainPtr<CGFontRef> m_cgFont;
+#else
+    CGFontRef m_cgFont; // It is not necessary to refcount this, since either an NSFont owns it or some CachedFont has it referenced.
+#endif
 };
 
 }
index d1e00d1..472edb0 100644 (file)
@@ -33,8 +33,13 @@ FontPlatformData::FontPlatformData(NSFont* f, bool b , bool o)
     if (f)
         CFRetain(f);
     m_size = f ? [f pointSize] : 0.0f;
+#ifndef BUILDING_ON_TIGER
+    m_cgFont = CTFontCopyGraphicsFont(toCTFontRef(f), 0);
+    m_atsuFontID = CTFontGetPlatformFont(toCTFontRef(f), 0);
+#else
     m_cgFont = wkGetCGFontFromNSFont(f);
     m_atsuFontID = wkGetNSFontATSUFontId(f);
+#endif
 }
 
 FontPlatformData::FontPlatformData(const FontPlatformData& f)
@@ -62,8 +67,13 @@ void FontPlatformData::setFont(NSFont* font) {
         CFRelease(m_font);
     m_font = font;
     m_size = font ? [font pointSize] : 0.0f;
+#ifndef BUILDING_ON_TIGER
+    m_cgFont = CTFontCopyGraphicsFont(toCTFontRef(font), 0);
+    m_atsuFontID = CTFontGetPlatformFont(toCTFontRef(font), 0);
+#else
     m_cgFont = wkGetCGFontFromNSFont(font);
     m_atsuFontID = wkGetNSFontATSUFontId(font);
+#endif
 }
 
 }
index 5d90514..826bc5b 100644 (file)
@@ -56,7 +56,7 @@ static inline float scaleEmToUnits(float x, unsigned unitsPerEm) { return x * (c
 
 bool initFontData(SimpleFontData* fontData)
 {
-    if (!fontData->m_font.m_cgFont)
+    if (!fontData->m_font.cgFont())
         return false;
 
     ATSUStyle fontStyle;
@@ -107,7 +107,11 @@ static NSString* pathFromFont(NSFont*)
 #else
 static NSString* pathFromFont(NSFont *font)
 {
+#ifndef BUILDING_ON_TIGER
+    ATSFontRef atsFont = FMGetATSFontRefFromFont(CTFontGetPlatformFont(toCTFontRef(font), 0));
+#else
     ATSFontRef atsFont = FMGetATSFontRefFromFont(wkGetNSFontATSUFontId(font));
+#endif
     FSRef fileRef;
 
 #ifndef BUILDING_ON_TIGER
@@ -205,12 +209,12 @@ void SimpleFontData::platformInit()
     int iDescent;
     int iLineGap;
 #ifdef BUILDING_ON_TIGER
-    wkGetFontMetrics(m_font.m_cgFont, &iAscent, &iDescent, &iLineGap, &m_unitsPerEm);
+    wkGetFontMetrics(m_font.cgFont(), &iAscent, &iDescent, &iLineGap, &m_unitsPerEm);
 #else
-    iAscent = CGFontGetAscent(m_font.m_cgFont);
-    iDescent = CGFontGetDescent(m_font.m_cgFont);
-    iLineGap = CGFontGetLeading(m_font.m_cgFont);
-    m_unitsPerEm = CGFontGetUnitsPerEm(m_font.m_cgFont);
+    iAscent = CGFontGetAscent(m_font.cgFont());
+    iDescent = CGFontGetDescent(m_font.cgFont());
+    iLineGap = CGFontGetLeading(m_font.cgFont());
+    m_unitsPerEm = CGFontGetUnitsPerEm(m_font.cgFont());
 #endif
 
     float pointSize = m_font.m_size;
@@ -337,7 +341,7 @@ float SimpleFontData::platformWidthForGlyph(Glyph glyph) const
     float pointSize = m_font.m_size;
     CGAffineTransform m = CGAffineTransformMakeScale(pointSize, pointSize);
     CGSize advance;
-    if (!wkGetGlyphTransformedAdvances(m_font.m_cgFont, font, &m, &glyph, &advance)) {
+    if (!wkGetGlyphTransformedAdvances(m_font.cgFont(), font, &m, &glyph, &advance)) {
         LOG_ERROR("Unable to cache glyph widths for %@ %f", [font displayName], pointSize);
         advance.width = 0;
     }
index 6fea621..e827009 100644 (file)
@@ -38,7 +38,6 @@ void (*wkDrawBezeledTextArea)(NSRect, BOOL enabled);
 void (*wkDrawFocusRing)(CGContextRef, CGColorRef, int radius);
 BOOL (*wkFontSmoothingModeIsLCD)(int mode);
 OSStatus (*wkGetATSStyleGroup)(ATSUStyle, void** styleGroup);
-CGFontRef (*wkGetCGFontFromNSFont)(NSFont*);
 NSFont* (*wkGetFontInLanguageForRange)(NSFont*, NSString*, NSRange);
 NSFont* (*wkGetFontInLanguageForCharacter)(NSFont*, UniChar);
 BOOL (*wkGetGlyphTransformedAdvances)(CGFontRef, NSFont*, CGAffineTransform*, ATSGlyphRef*, CGSize* advance);
@@ -57,7 +56,6 @@ void (*wkDrawMediaUnMuteButton)(CGContextRef context, CGRect rect, BOOL active);
 NSString* (*wkGetPreferredExtensionForMIMEType)(NSString*);
 NSArray* (*wkGetExtensionsForMIMEType)(NSString*);
 NSString* (*wkGetMIMETypeForExtension)(NSString*);
-ATSUFontID (*wkGetNSFontATSUFontId)(NSFont*);
 NSTimeInterval (*wkGetNSURLResponseCalculatedExpiration)(NSURLResponse *response);
 NSDate *(*wkGetNSURLResponseLastModifiedDate)(NSURLResponse *response);
 BOOL (*wkGetNSURLResponseMustRevalidate)(NSURLResponse *response);
@@ -90,6 +88,8 @@ void (*wkSetNSURLRequestShouldContentSniff)(NSMutableURLRequest *, BOOL);
 id (*wkCreateNSURLConnectionDelegateProxy)(void);
 
 #ifdef BUILDING_ON_TIGER
+CGFontRef (*wkGetCGFontFromNSFont)(NSFont*);
 void (*wkGetFontMetrics)(CGFontRef, int* ascent, int* descent, int* lineGap, unsigned* unitsPerEm);
+ATSUFontID (*wkGetNSFontATSUFontId)(NSFont*);
 BOOL (*wkSupportsMultipartXMixedReplace)(NSMutableURLRequest *);
 #endif
index 0fa4535..2f96006 100644 (file)
@@ -1,3 +1,13 @@
+2008-03-12  Dan Bernstein  <mitz@apple.com>
+
+        Reviewed by Darin Adler and Sam Weinig.
+
+        - <rdar://problem/4433248> use CoreText API instead of SPI on Leopard
+
+        * WebCoreSupport/WebSystemInterface.m:
+        (InitWebCoreSystemInterface): Made WKGetCGFontFromNSFont and
+        WKGetNSFontATSUFontId Tiger-only.
+
 2008-03-12  Darin Adler  <darin@apple.com>
 
         - fix http://bugs.webkit.org/show_bug.cgi?id=17794
index 2e8376c..43d21bb 100644 (file)
@@ -60,7 +60,6 @@ void InitWebCoreSystemInterface(void)
     INIT(DrawTextFieldCellFocusRing);
     INIT(FontSmoothingModeIsLCD);
     INIT(GetATSStyleGroup);
-    INIT(GetCGFontFromNSFont);
     INIT(GetExtensionsForMIMEType);
     INIT(GetFontInLanguageForCharacter);
     INIT(GetFontInLanguageForRange);
@@ -69,7 +68,6 @@ void InitWebCoreSystemInterface(void)
     INIT(GetGlyphVectorNumGlyphs);
     INIT(GetGlyphVectorRecordSize);
     INIT(GetMIMETypeForExtension);
-    INIT(GetNSFontATSUFontId);
     INIT(GetNSURLResponseLastModifiedDate);
     INIT(GetPreferredExtensionForMIMEType);
     INIT(GetWheelEventDeltas);
@@ -91,7 +89,9 @@ void InitWebCoreSystemInterface(void)
     INIT(QTMovieViewSetDrawSynchronously);
 
 #ifdef BUILDING_ON_TIGER
+    INIT(GetCGFontFromNSFont);
     INIT(GetFontMetrics);
+    INIT(GetNSFontATSUFontId);
     INIT(SupportsMultipartXMixedReplace);
 #endif
 
index 252f527..b275aa0 100644 (file)
@@ -1,3 +1,12 @@
+2008-03-12  Dan Bernstein  <mitz@apple.com>
+
+        Reviewed by Darin Adler and Sam Weinig.
+
+        - <rdar://problem/4433248> use CoreText API instead of SPI on Leopard
+
+        * WebKitSystemInterface.h:
+        * libWebKitSystemInterfaceLeopard.a:
+
 2008-03-11  Steve Falkenburg  <sfalken@apple.com>
 
         Disable two PGO/LTCG specific warnings.
index eb64426..7355243 100644 (file)
@@ -110,17 +110,19 @@ void WKCallDrawingNotification(CGrafPtr port, Rect *bounds);
 #endif
 
 BOOL WKGetGlyphTransformedAdvances(CGFontRef, NSFont*, CGAffineTransform *m, ATSGlyphRef *glyph, CGSize *advance);
-CGFontRef WKGetCGFontFromNSFont(NSFont *font);
 NSFont *WKGetFontInLanguageForRange(NSFont *font, NSString *string, NSRange range);
 NSFont *WKGetFontInLanguageForCharacter(NSFont *font, UniChar ch);
 void WKSetCGFontRenderingMode(CGContextRef cgContext, NSFont *font);
-ATSUFontID WKGetNSFontATSUFontId(NSFont *font);
 void WKReleaseStyleGroup(void *group);
 BOOL WKCGContextGetShouldSmoothFonts(CGContextRef cgContext);
 
 #ifdef BUILDING_ON_TIGER
 // CGFontGetAscent, CGFontGetDescent, CGFontGetLeading and CGFontGetUnitsPerEm were not available until Leopard
 void WKGetFontMetrics(CGFontRef font, int *ascent, int *descent, int *lineGap, unsigned *unitsPerEm);
+// CTFontCopyGraphicsFont was not available until Leopard
+CGFontRef WKGetCGFontFromNSFont(NSFont *font);
+// CTFontGetPlatformFont was not available until Leopard
+ATSUFontID WKGetNSFontATSUFontId(NSFont *font);
 #endif
 
 void WKSetPatternBaseCTM(CGContextRef, CGAffineTransform);
index c7ba1d0..951291c 100644 (file)
Binary files a/WebKitLibraries/libWebKitSystemInterfaceLeopard.a and b/WebKitLibraries/libWebKitSystemInterfaceLeopard.a differ