<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[177527] trunk/Source</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/177527">177527</a></dd>
<dt>Author</dt> <dd>weinig@apple.com</dd>
<dt>Date</dt> <dd>2014-12-18 14:32:43 -0800 (Thu, 18 Dec 2014)</dd>
</dl>
<h3>Log Message</h3>
<pre>Unify the Mac and iOS implementations of FontPlatformData a bit
https://bugs.webkit.org/show_bug.cgi?id=139721
Reviewed by Anders Carlsson.
Source/WebCore:
This is a first pass of unifying the Mac and iOS implementations of FontPlatformData.
Notable changes:
- Change the storage of the platform font to be CTFontRef across the board. Adds NSFont
setter/getter/constructor as a temporary measures during the transition away from NSFont.
- Removes duplicate code that only differed by whether the type was NSFont or CTFontRef.
- Reduces the number of #ifdefs.
* platform/graphics/FontPlatformData.cpp:
(WebCore::FontPlatformData::FontPlatformData):
(WebCore::FontPlatformData::operator=):
(WebCore::FontPlatformData::openTypeTable): Deleted.
* platform/graphics/FontPlatformData.h:
(WebCore::FontPlatformData::nsFont):
(WebCore::FontPlatformData::setNSFont):
(WebCore::FontPlatformData::hash):
(WebCore::FontPlatformData::operator==):
(WebCore::FontPlatformData::isHashTableDeletedValue):
(WebCore::toCTFontRef): Deleted.
(WebCore::FontPlatformData::font): Deleted.
(WebCore::FontPlatformData::roundsGlyphAdvances): Deleted.
(WebCore::FontPlatformData::cgFont): Deleted.
(WebCore::FontPlatformData::hashTableDeletedFontValue): Deleted.
* platform/graphics/SimpleFontData.h:
* platform/graphics/cocoa/FontPlatformDataCocoa.mm:
(WebCore::FontPlatformData::FontPlatformData):
(WebCore::FontPlatformData::~FontPlatformData):
(WebCore::FontPlatformData::platformDataInit):
(WebCore::FontPlatformData::platformDataAssign):
(WebCore::FontPlatformData::setFont):
(WebCore::FontPlatformData::roundsGlyphAdvances):
(WebCore::FontPlatformData::allowsLigatures):
(WebCore::FontPlatformData::ctFont):
(WebCore::FontPlatformData::openTypeTable):
(WebCore::FontPlatformData::loadFont): Deleted.
* platform/graphics/mac/FontCacheMac.mm:
(WebCore::FontCache::systemFallbackForCharacters):
* platform/graphics/mac/FontMac.mm:
(WebCore::Font::drawGlyphs):
* platform/graphics/mac/SimpleFontDataMac.mm:
(WebCore::SimpleFontData::getCompositeFontReferenceFontData):
(WebCore::SimpleFontData::platformInit):
(WebCore::SimpleFontData::platformCreateScaledFontData):
(WebCore::SimpleFontData::containsCharacters):
(WebCore::SimpleFontData::determinePitch):
(WebCore::SimpleFontData::renderingStyle):
(WebCore::SimpleFontData::advanceForColorBitmapFont):
Source/WebKit/mac:
* WebView/WebHTMLView.mm:
(fontNameForDescription):
Update for new function name.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFontPlatformDatacpp">trunk/Source/WebCore/platform/graphics/FontPlatformData.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFontPlatformDatah">trunk/Source/WebCore/platform/graphics/FontPlatformData.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsSimpleFontDatah">trunk/Source/WebCore/platform/graphics/SimpleFontData.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscocoaFontPlatformDataCocoamm">trunk/Source/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsmacFontCacheMacmm">trunk/Source/WebCore/platform/graphics/mac/FontCacheMac.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsmacFontMacmm">trunk/Source/WebCore/platform/graphics/mac/FontMac.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsmacSimpleFontDataMacmm">trunk/Source/WebCore/platform/graphics/mac/SimpleFontDataMac.mm</a></li>
<li><a href="#trunkSourceWebKitmacChangeLog">trunk/Source/WebKit/mac/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitmacWebViewWebHTMLViewmm">trunk/Source/WebKit/mac/WebView/WebHTMLView.mm</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (177526 => 177527)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-12-18 22:32:37 UTC (rev 177526)
+++ trunk/Source/WebCore/ChangeLog        2014-12-18 22:32:43 UTC (rev 177527)
</span><span class="lines">@@ -1,3 +1,57 @@
</span><ins>+2014-12-16 Sam Weinig <sam@webkit.org>
+
+ Unify the Mac and iOS implementations of FontPlatformData a bit
+ https://bugs.webkit.org/show_bug.cgi?id=139721
+
+ Reviewed by Anders Carlsson.
+
+ This is a first pass of unifying the Mac and iOS implementations of FontPlatformData.
+ Notable changes:
+ - Change the storage of the platform font to be CTFontRef across the board. Adds NSFont
+ setter/getter/constructor as a temporary measures during the transition away from NSFont.
+ - Removes duplicate code that only differed by whether the type was NSFont or CTFontRef.
+ - Reduces the number of #ifdefs.
+
+ * platform/graphics/FontPlatformData.cpp:
+ (WebCore::FontPlatformData::FontPlatformData):
+ (WebCore::FontPlatformData::operator=):
+ (WebCore::FontPlatformData::openTypeTable): Deleted.
+ * platform/graphics/FontPlatformData.h:
+ (WebCore::FontPlatformData::nsFont):
+ (WebCore::FontPlatformData::setNSFont):
+ (WebCore::FontPlatformData::hash):
+ (WebCore::FontPlatformData::operator==):
+ (WebCore::FontPlatformData::isHashTableDeletedValue):
+ (WebCore::toCTFontRef): Deleted.
+ (WebCore::FontPlatformData::font): Deleted.
+ (WebCore::FontPlatformData::roundsGlyphAdvances): Deleted.
+ (WebCore::FontPlatformData::cgFont): Deleted.
+ (WebCore::FontPlatformData::hashTableDeletedFontValue): Deleted.
+ * platform/graphics/SimpleFontData.h:
+ * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
+ (WebCore::FontPlatformData::FontPlatformData):
+ (WebCore::FontPlatformData::~FontPlatformData):
+ (WebCore::FontPlatformData::platformDataInit):
+ (WebCore::FontPlatformData::platformDataAssign):
+ (WebCore::FontPlatformData::setFont):
+ (WebCore::FontPlatformData::roundsGlyphAdvances):
+ (WebCore::FontPlatformData::allowsLigatures):
+ (WebCore::FontPlatformData::ctFont):
+ (WebCore::FontPlatformData::openTypeTable):
+ (WebCore::FontPlatformData::loadFont): Deleted.
+ * platform/graphics/mac/FontCacheMac.mm:
+ (WebCore::FontCache::systemFallbackForCharacters):
+ * platform/graphics/mac/FontMac.mm:
+ (WebCore::Font::drawGlyphs):
+ * platform/graphics/mac/SimpleFontDataMac.mm:
+ (WebCore::SimpleFontData::getCompositeFontReferenceFontData):
+ (WebCore::SimpleFontData::platformInit):
+ (WebCore::SimpleFontData::platformCreateScaledFontData):
+ (WebCore::SimpleFontData::containsCharacters):
+ (WebCore::SimpleFontData::determinePitch):
+ (WebCore::SimpleFontData::renderingStyle):
+ (WebCore::SimpleFontData::advanceForColorBitmapFont):
+
</ins><span class="cx"> 2014-12-18 Anders Carlsson <andersca@apple.com>
</span><span class="cx">
</span><span class="cx"> Build fix.
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFontPlatformDatacpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/FontPlatformData.cpp (177526 => 177527)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/FontPlatformData.cpp        2014-12-18 22:32:37 UTC (rev 177526)
+++ trunk/Source/WebCore/platform/graphics/FontPlatformData.cpp        2014-12-18 22:32:43 UTC (rev 177527)
</span><span class="lines">@@ -35,60 +35,18 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="cx"> FontPlatformData::FontPlatformData(WTF::HashTableDeletedValueType)
</span><del>- : m_syntheticBold(false)
- , m_syntheticOblique(false)
- , m_orientation(Horizontal)
-#if PLATFORM(IOS)
- , m_isEmoji(false)
-#endif
- , m_size(0)
- , m_widthVariant(RegularWidth)
</del><span class="cx"> #if PLATFORM(WIN)
</span><del>- , m_font(WTF::HashTableDeletedValue)
-#elif OS(DARWIN)
- , m_font(hashTableDeletedFontValue())
</del><ins>+ : m_font(WTF::HashTableDeletedValue)
+#elif PLATFORM(COCOA)
+ : m_font(hashTableDeletedFontValue())
</ins><span class="cx"> #endif
</span><del>-#if USE(CG) && PLATFORM(WIN)
- , m_cgFont(0)
-#elif USE(CAIRO)
- , m_scaledFont(hashTableDeletedFontValue())
-#endif
- , m_isColorBitmapFont(false)
- , m_isCompositeFontReference(false)
-#if OS(DARWIN)
- , m_isPrinterFont(false)
-#endif
-#if PLATFORM(WIN)
- , m_useGDI(false)
-#endif
</del><span class="cx"> {
</span><ins>+#if USE(CAIRO)
+ m_scaledFont = hashTableDeletedFontValue();
+#endif
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> FontPlatformData::FontPlatformData()
</span><del>- : m_syntheticBold(false)
- , m_syntheticOblique(false)
- , m_orientation(Horizontal)
-#if PLATFORM(IOS)
- , m_isEmoji(false)
-#endif
- , m_size(0)
- , m_widthVariant(RegularWidth)
-#if OS(DARWIN)
- , m_font(0)
-#endif
-#if USE(CG) && PLATFORM(WIN)
- , m_cgFont(0)
-#elif USE(CAIRO)
- , m_scaledFont(0)
-#endif
- , m_isColorBitmapFont(false)
- , m_isCompositeFontReference(false)
-#if OS(DARWIN)
- , m_isPrinterFont(false)
-#endif
-#if PLATFORM(WIN)
- , m_useGDI(false)
-#endif
</del><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -96,45 +54,19 @@
</span><span class="cx"> : m_syntheticBold(syntheticBold)
</span><span class="cx"> , m_syntheticOblique(syntheticOblique)
</span><span class="cx"> , m_orientation(orientation)
</span><del>-#if PLATFORM(IOS)
- , m_isEmoji(false)
-#endif
</del><span class="cx"> , m_size(size)
</span><span class="cx"> , m_widthVariant(widthVariant)
</span><del>-#if OS(DARWIN)
- , m_font(0)
-#endif
-#if USE(CG) && PLATFORM(WIN)
- , m_cgFont(0)
-#elif USE(CAIRO)
- , m_scaledFont(0)
-#endif
- , m_isColorBitmapFont(false)
- , m_isCompositeFontReference(false)
-#if OS(DARWIN)
- , m_isPrinterFont(false)
-#endif
-#if PLATFORM(WIN)
- , m_useGDI(false)
-#endif
</del><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#if OS(DARWIN) && USE(CG)
</del><ins>+#if USE(CG)
</ins><span class="cx"> FontPlatformData::FontPlatformData(CGFontRef cgFont, float size, bool syntheticBold, bool syntheticOblique, FontOrientation orientation, FontWidthVariant widthVariant)
</span><span class="cx"> : m_syntheticBold(syntheticBold)
</span><span class="cx"> , m_syntheticOblique(syntheticOblique)
</span><span class="cx"> , m_orientation(orientation)
</span><del>-#if PLATFORM(IOS)
- , m_isEmoji(false)
-#endif
</del><span class="cx"> , m_size(size)
</span><span class="cx"> , m_widthVariant(widthVariant)
</span><del>- , m_font(0)
</del><span class="cx"> , m_cgFont(cgFont)
</span><del>- , m_isColorBitmapFont(false)
- , m_isCompositeFontReference(false)
- , m_isPrinterFont(false)
</del><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="lines">@@ -147,9 +79,6 @@
</span><span class="cx"> , m_widthVariant(source.m_widthVariant)
</span><span class="cx"> , m_isColorBitmapFont(source.m_isColorBitmapFont)
</span><span class="cx"> , m_isCompositeFontReference(source.m_isCompositeFontReference)
</span><del>-#if OS(DARWIN)
- , m_isPrinterFont(source.m_isPrinterFont)
-#endif
</del><span class="cx"> {
</span><span class="cx"> platformDataInit(source);
</span><span class="cx"> }
</span><span class="lines">@@ -167,21 +96,8 @@
</span><span class="cx"> m_widthVariant = other.m_widthVariant;
</span><span class="cx"> m_isColorBitmapFont = other.m_isColorBitmapFont;
</span><span class="cx"> m_isCompositeFontReference = other.m_isCompositeFontReference;
</span><del>-#if OS(DARWIN)
- m_isPrinterFont = other.m_isPrinterFont;
-#endif
</del><span class="cx">
</span><span class="cx"> return platformDataAssign(other);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#if OS(DARWIN) && USE(CG)
-PassRefPtr<SharedBuffer> FontPlatformData::openTypeTable(uint32_t table) const
-{
- if (RetainPtr<CFDataRef> data = adoptCF(CGFontCopyTableForTag(cgFont(), table)))
- return SharedBuffer::wrapCFData(data.get());
-
- return nullptr;
</del><span class="cx"> }
</span><del>-#endif
-
-}
</del></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFontPlatformDatah"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/FontPlatformData.h (177526 => 177527)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/FontPlatformData.h        2014-12-18 22:32:37 UTC (rev 177526)
+++ trunk/Source/WebCore/platform/graphics/FontPlatformData.h        2014-12-18 22:32:43 UTC (rev 177527)
</span><span class="lines">@@ -42,17 +42,25 @@
</span><span class="cx"> #include <cairo.h>
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>-#if OS(DARWIN)
-OBJC_CLASS NSFont;
-
</del><ins>+#if PLATFORM(COCOA)
</ins><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx"> #import <CoreGraphics/CoreGraphics.h>
</span><span class="cx"> #endif
</span><ins>+#if USE(APPKIT)
+OBJC_CLASS NSFont;
+#endif
</ins><span class="cx">
</span><del>-typedef struct CGFont* CGFontRef;
</del><span class="cx"> typedef const struct __CTFont* CTFontRef;
</span><ins>+typedef UInt32 FMFont;
+typedef FMFont ATSUFontID;
+typedef UInt32 ATSFontRef;
+
</ins><span class="cx"> #endif
</span><span class="cx">
</span><ins>+#if USE(CG)
+typedef struct CGFont* CGFontRef;
+#endif
+
</ins><span class="cx"> #include <wtf/Forward.h>
</span><span class="cx"> #include <wtf/PassRefPtr.h>
</span><span class="cx"> #include <wtf/RefCounted.h>
</span><span class="lines">@@ -64,25 +72,12 @@
</span><span class="cx"> typedef struct HFONT__* HFONT;
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>-#if USE(CG)
-typedef struct CGFont* CGFontRef;
-#if OS(DARWIN)
-typedef const struct __CTFont* CTFontRef;
-typedef UInt32 FMFont;
-typedef FMFont ATSUFontID;
-typedef UInt32 ATSFontRef;
-#endif
-#endif
</del><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="cx"> class FontDescription;
</span><span class="cx"> class SharedBuffer;
</span><span class="cx">
</span><del>-#if OS(DARWIN) && USE(APPKIT)
-inline CTFontRef toCTFontRef(NSFont *nsFont) { return reinterpret_cast<CTFontRef>(nsFont); }
-#endif
-
</del><span class="cx"> class FontPlatformData {
</span><span class="cx"> WTF_MAKE_FAST_ALLOCATED;
</span><span class="cx"> public:
</span><span class="lines">@@ -92,21 +87,21 @@
</span><span class="cx"> FontPlatformData(const FontDescription&, const AtomicString& family);
</span><span class="cx"> FontPlatformData(float size, bool syntheticBold, bool syntheticOblique, FontOrientation = Horizontal, FontWidthVariant = RegularWidth);
</span><span class="cx">
</span><del>-#if OS(DARWIN)
</del><ins>+#if PLATFORM(COCOA)
+ WEBCORE_EXPORT FontPlatformData(CTFontRef, float size, bool isPrinterFont = false, bool syntheticBold = false, bool syntheticOblique = false, FontOrientation = Horizontal, FontWidthVariant = RegularWidth);
</ins><span class="cx"> #if USE(APPKIT)
</span><del>- WEBCORE_EXPORT FontPlatformData(NSFont*, float size, bool isPrinterFont = false, bool syntheticBold = false, bool syntheticOblique = false,
- FontOrientation = Horizontal, FontWidthVariant = RegularWidth);
-#else
- WEBCORE_EXPORT FontPlatformData(CTFontRef, float size, bool isPrinterFont = false, bool syntheticBold = false, bool syntheticOblique = false,
- FontOrientation = Horizontal, FontWidthVariant = RegularWidth);
</del><ins>+ // FIXME: Remove this when all NSFont usage is removed.
+ WEBCORE_EXPORT FontPlatformData(NSFont *, float size, bool isPrinterFont = false, bool syntheticBold = false, bool syntheticOblique = false, FontOrientation = Horizontal, FontWidthVariant = RegularWidth);
</ins><span class="cx"> #endif
</span><ins>+#endif
</ins><span class="cx">
</span><span class="cx"> #if USE(CG)
</span><span class="cx"> FontPlatformData(CGFontRef, float size, bool syntheticBold, bool syntheticOblique, FontOrientation, FontWidthVariant);
</span><span class="cx"> #endif
</span><del>-#endif
</del><ins>+
</ins><span class="cx"> #if PLATFORM(WIN)
</span><span class="cx"> FontPlatformData(GDIObject<HFONT>, float size, bool syntheticBold, bool syntheticOblique, bool useGDI);
</span><ins>+
</ins><span class="cx"> #if USE(CG)
</span><span class="cx"> FontPlatformData(GDIObject<HFONT>, CGFontRef, float size, bool syntheticBold, bool syntheticOblique, bool useGDI);
</span><span class="cx"> #elif USE(CAIRO)
</span><span class="lines">@@ -114,38 +109,33 @@
</span><span class="cx"> #endif
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>-#if PLATFORM(IOS)
- FontPlatformData(CTFontRef, float size, bool syntheticBold = false, bool syntheticOblique = false, FontOrientation = Horizontal, FontWidthVariant = RegularWidth);
-#endif
-
</del><span class="cx"> WEBCORE_EXPORT ~FontPlatformData();
</span><span class="cx">
</span><span class="cx"> #if PLATFORM(WIN)
</span><span class="cx"> HFONT hfont() const { return m_font ? m_font->get() : 0; }
</span><span class="cx"> bool useGDI() const { return m_useGDI; }
</span><del>-#elif PLATFORM(IOS)
</del><ins>+#elif PLATFORM(COCOA)
+ //
</ins><span class="cx"> CTFontRef font() const { return m_font; }
</span><span class="cx"> void setFont(CTFontRef);
</span><del>-#elif OS(DARWIN)
- NSFont* font() const { return m_font; }
- void setFont(NSFont*);
-#endif
</del><span class="cx">
</span><del>-#if USE(CG)
-#if OS(DARWIN)
- CGFontRef cgFont() const { return m_cgFont.get(); }
</del><span class="cx"> CTFontRef ctFont() const;
</span><span class="cx">
</span><del>-#if !PLATFORM(IOS)
</del><ins>+ bool allowsLigatures() const;
</ins><span class="cx"> bool roundsGlyphAdvances() const;
</span><del>-#else
- bool roundsGlyphAdvances() const { return false; }
-#endif // !PLATFORM(IOS)
</del><span class="cx">
</span><del>- bool allowsLigatures() const;
-#else
</del><ins>+#if USE(APPKIT)
+ // FIXME: Remove this when all NSFont usage is removed.
+ NSFont *nsFont() const { return (NSFont *)m_font; }
+ void setNSFont(NSFont *font) { setFont((CTFontRef)font); }
+#endif
+#endif
+
+#if USE(CG)
</ins><span class="cx"> CGFontRef cgFont() const { return m_cgFont.get(); }
</span><span class="cx"> #endif
</span><ins>+
+#if PLATFORM(COCOA)
</ins><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> bool isFixedPitch() const;
</span><span class="lines">@@ -155,7 +145,7 @@
</span><span class="cx"> bool syntheticOblique() const { return m_syntheticOblique; }
</span><span class="cx"> bool isColorBitmapFont() const { return m_isColorBitmapFont; }
</span><span class="cx"> bool isCompositeFontReference() const { return m_isCompositeFontReference; }
</span><del>-#if OS(DARWIN)
</del><ins>+#if PLATFORM(COCOA)
</ins><span class="cx"> bool isPrinterFont() const { return m_isPrinterFont; }
</span><span class="cx"> #endif
</span><span class="cx"> FontOrientation orientation() const { return m_orientation; }
</span><span class="lines">@@ -172,10 +162,8 @@
</span><span class="cx"> #if PLATFORM(WIN) && !USE(CAIRO)
</span><span class="cx"> return m_font ? m_font->hash() : 0;
</span><span class="cx"> #elif OS(DARWIN)
</span><del>-#if !PLATFORM(IOS)
-#if USE(CG)
</del><ins>+#if USE(APPKIT)
</ins><span class="cx"> ASSERT(m_font || !m_cgFont);
</span><del>-#endif
</del><span class="cx"> uintptr_t hashCodes[3] = { (uintptr_t)m_font, m_widthVariant, static_cast<uintptr_t>(m_isPrinterFont << 3 | m_orientation << 2 | m_syntheticBold << 1 | m_syntheticOblique) };
</span><span class="cx"> #else
</span><span class="cx"> ASSERT(m_font || !m_cgFont || m_isEmoji);
</span><span class="lines">@@ -197,7 +185,7 @@
</span><span class="cx"> && m_syntheticOblique == other.m_syntheticOblique
</span><span class="cx"> && m_isColorBitmapFont == other.m_isColorBitmapFont
</span><span class="cx"> && m_isCompositeFontReference == other.m_isCompositeFontReference
</span><del>-#if OS(DARWIN)
</del><ins>+#if PLATFORM(COCOA)
</ins><span class="cx"> && m_isPrinterFont == other.m_isPrinterFont
</span><span class="cx"> #endif
</span><span class="cx"> && m_orientation == other.m_orientation
</span><span class="lines">@@ -208,14 +196,14 @@
</span><span class="cx"> {
</span><span class="cx"> #if PLATFORM(WIN) && !USE(CAIRO)
</span><span class="cx"> return m_font.isHashTableDeletedValue();
</span><del>-#elif OS(DARWIN)
</del><ins>+#elif PLATFORM(COCOA)
</ins><span class="cx"> return m_font == hashTableDeletedFontValue();
</span><span class="cx"> #elif USE(CAIRO)
</span><span class="cx"> return m_scaledFont == hashTableDeletedFontValue();
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#if (OS(DARWIN) && USE(CG)) || (PLATFORM(WIN) && (USE(CG) || USE(CAIRO)))
</del><ins>+#if PLATFORM(COCOA) || PLATFORM(WIN)
</ins><span class="cx"> PassRefPtr<SharedBuffer> openTypeTable(uint32_t table) const;
</span><span class="cx"> #endif
</span><span class="cx">
</span><span class="lines">@@ -227,60 +215,49 @@
</span><span class="cx"> bool platformIsEqual(const FontPlatformData&) const;
</span><span class="cx"> void platformDataInit(const FontPlatformData&);
</span><span class="cx"> const FontPlatformData& platformDataAssign(const FontPlatformData&);
</span><del>-#if PLATFORM(IOS)
</del><ins>+#if PLATFORM(COCOA)
</ins><span class="cx"> static CTFontRef hashTableDeletedFontValue() { return reinterpret_cast<CTFontRef>(-1); }
</span><del>-#elif OS(DARWIN)
- // Load various data about the font specified by |nsFont| with the size fontSize into the following output paramters:
- void loadFont(NSFont*, float fontSize, NSFont*& outNSFont, CGFontRef&);
- static NSFont* hashTableDeletedFontValue() { return reinterpret_cast<NSFont *>(-1); }
-#elif PLATFORM(WIN)
</del><ins>+#endif
+#if PLATFORM(WIN)
</ins><span class="cx"> void platformDataInit(HFONT, float size, HDC, WCHAR* faceName);
</span><span class="cx"> #endif
</span><del>-
</del><span class="cx"> #if USE(CAIRO)
</span><span class="cx"> static cairo_scaled_font_t* hashTableDeletedFontValue() { return reinterpret_cast<cairo_scaled_font_t*>(-1); }
</span><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> public:
</span><del>- bool m_syntheticBold;
- bool m_syntheticOblique;
- FontOrientation m_orientation;
</del><ins>+ bool m_syntheticBold { false };
+ bool m_syntheticOblique { false };
+ FontOrientation m_orientation { Horizontal };
</ins><span class="cx"> #if PLATFORM(IOS)
</span><del>- bool m_isEmoji;
</del><ins>+ bool m_isEmoji { false };
</ins><span class="cx"> #endif
</span><del>- float m_size;
- FontWidthVariant m_widthVariant;
</del><ins>+ float m_size { 0 };
+ FontWidthVariant m_widthVariant { RegularWidth };
</ins><span class="cx">
</span><span class="cx"> private:
</span><del>-#if PLATFORM(IOS)
- CTFontRef m_font;
-#elif OS(DARWIN)
- NSFont* m_font;
</del><ins>+#if PLATFORM(COCOA)
+ CTFontRef m_font { nullptr };
+ mutable RetainPtr<CTFontRef> m_ctFont;
</ins><span class="cx"> #elif PLATFORM(WIN)
</span><span class="cx"> RefPtr<SharedGDIObject<HFONT>> m_font;
</span><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> #if USE(CG)
</span><del>-#if PLATFORM(WIN)
</del><span class="cx"> RetainPtr<CGFontRef> m_cgFont;
</span><del>-#else
- RetainPtr<CGFontRef> m_cgFont;
- mutable RetainPtr<CTFontRef> m_CTFont;
</del><span class="cx"> #endif
</span><del>-#endif
-
</del><span class="cx"> #if USE(CAIRO)
</span><del>- cairo_scaled_font_t* m_scaledFont;
</del><ins>+ cairo_scaled_font_t* m_scaledFont { nullptr };
</ins><span class="cx"> #endif
</span><span class="cx">
</span><del>- bool m_isColorBitmapFont;
- bool m_isCompositeFontReference;
-#if OS(DARWIN)
- bool m_isPrinterFont;
</del><ins>+ bool m_isColorBitmapFont { false };
+ bool m_isCompositeFontReference { false };
+#if PLATFORM(COCOA)
+ bool m_isPrinterFont { false };
</ins><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> #if PLATFORM(WIN)
</span><del>- bool m_useGDI;
</del><ins>+ bool m_useGDI { false };
</ins><span class="cx"> #endif
</span><span class="cx"> };
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsSimpleFontDatah"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/SimpleFontData.h (177526 => 177527)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/SimpleFontData.h        2014-12-18 22:32:37 UTC (rev 177526)
+++ trunk/Source/WebCore/platform/graphics/SimpleFontData.h        2014-12-18 22:32:43 UTC (rev 177527)
</span><span class="lines">@@ -189,7 +189,7 @@
</span><span class="cx">
</span><span class="cx"> #if USE(APPKIT)
</span><span class="cx"> const SimpleFontData* getCompositeFontReferenceFontData(NSFont *key) const;
</span><del>- NSFont* getNSFont() const { return m_platformData.font(); }
</del><ins>+ NSFont* getNSFont() const { return m_platformData.nsFont(); }
</ins><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> #if PLATFORM(IOS)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscocoaFontPlatformDataCocoamm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm (177526 => 177527)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm        2014-12-18 22:32:37 UTC (rev 177526)
+++ trunk/Source/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm        2014-12-18 22:32:43 UTC (rev 177527)
</span><span class="lines">@@ -24,7 +24,10 @@
</span><span class="cx"> #import "config.h"
</span><span class="cx"> #import "FontPlatformData.h"
</span><span class="cx">
</span><ins>+#import "SharedBuffer.h"
</ins><span class="cx"> #import "WebCoreSystemInterface.h"
</span><ins>+#import <wtf/text/WTFString.h>
+
</ins><span class="cx"> #if !PLATFORM(IOS)
</span><span class="cx"> #import <AppKit/NSFont.h>
</span><span class="cx"> #else
</span><span class="lines">@@ -32,91 +35,51 @@
</span><span class="cx"> #import <CoreText/CoreText.h>
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>-#import <wtf/text/WTFString.h>
-
</del><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="cx"> // These CoreText Text Spacing feature selectors are not defined in CoreText.
</span><span class="cx"> enum TextSpacingCTFeatureSelector { TextSpacingProportional, TextSpacingFullWidth, TextSpacingHalfWidth, TextSpacingThirdWidth, TextSpacingQuarterWidth };
</span><span class="cx">
</span><del>-#if PLATFORM(MAC)
-void FontPlatformData::loadFont(NSFont* nsFont, float, NSFont*& outNSFont, CGFontRef& cgFont)
-{
- outNSFont = nsFont;
- cgFont = CTFontCopyGraphicsFont(toCTFontRef(nsFont), 0);
-}
-#endif // PLATFORM(MAC)
-
-#if !PLATFORM(IOS)
-FontPlatformData::FontPlatformData(NSFont *nsFont, float size, bool isPrinterFont, bool syntheticBold, bool syntheticOblique, FontOrientation orientation, FontWidthVariant widthVariant)
</del><ins>+FontPlatformData::FontPlatformData(CTFontRef font, float size, bool isPrinterFont, bool syntheticBold, bool syntheticOblique, FontOrientation orientation, FontWidthVariant widthVariant)
</ins><span class="cx"> : m_syntheticBold(syntheticBold)
</span><span class="cx"> , m_syntheticOblique(syntheticOblique)
</span><span class="cx"> , m_orientation(orientation)
</span><span class="cx"> , m_size(size)
</span><span class="cx"> , m_widthVariant(widthVariant)
</span><del>- , m_font(nsFont)
- , m_isColorBitmapFont(false)
-#else
-FontPlatformData::FontPlatformData(CTFontRef ctFont, float size, bool isPrinterFont, bool syntheticBold, bool syntheticOblique, FontOrientation orientation, FontWidthVariant widthVariant)
- : m_syntheticBold(syntheticBold)
- , m_syntheticOblique(syntheticOblique)
- , m_orientation(orientation)
- , m_isEmoji(false)
- , m_size(size)
- , m_widthVariant(widthVariant)
- , m_font(ctFont)
- , m_cgFont(adoptCF(CTFontCopyGraphicsFont(ctFont, NULL)))
- , m_isColorBitmapFont(CTFontGetSymbolicTraits(ctFont) & kCTFontTraitColorGlyphs)
-#endif // !PLATFORM(IOS)
- , m_isCompositeFontReference(false)
</del><ins>+ , m_font(font)
+ , m_cgFont(adoptCF(CTFontCopyGraphicsFont(font, NULL)))
+ , m_isColorBitmapFont(CTFontGetSymbolicTraits(font) & kCTFontTraitColorGlyphs)
+ , m_isCompositeFontReference(CTFontGetSymbolicTraits(font) & kCTFontCompositeTrait)
</ins><span class="cx"> , m_isPrinterFont(isPrinterFont)
</span><span class="cx"> {
</span><del>-#if !PLATFORM(IOS)
- ASSERT_ARG(nsFont, nsFont);
</del><ins>+ ASSERT_ARG(font, font);
+ CFRetain(m_font);
+}
</ins><span class="cx">
</span><del>- CGFontRef cgFont = 0;
- loadFont(nsFont, size, m_font, cgFont);
- {
- CTFontSymbolicTraits traits = CTFontGetSymbolicTraits(toCTFontRef(m_font));
- m_isColorBitmapFont = traits & kCTFontColorGlyphsTrait;
- m_isCompositeFontReference = traits & kCTFontCompositeTrait;
- }
-
- if (m_font)
- CFRetain(m_font);
-
- m_cgFont = adoptCF(cgFont);
-#else
- ASSERT_ARG(ctFont, ctFont);
-
- CFRetain(ctFont);
-#endif // !PLATFORM(IOS)
</del><ins>+#if USE(APPKIT)
+// FIXME: Remove this when all NSFont usage is removed.
+FontPlatformData::FontPlatformData(NSFont *font, float size, bool isPrinterFont, bool syntheticBold, bool syntheticOblique, FontOrientation orientation, FontWidthVariant widthVariant)
+ : FontPlatformData((CTFontRef)font, size, isPrinterFont, syntheticBold, syntheticOblique, orientation, widthVariant)
+{
</ins><span class="cx"> }
</span><ins>+#endif
</ins><span class="cx">
</span><span class="cx"> FontPlatformData::~FontPlatformData()
</span><span class="cx"> {
</span><del>-#if !PLATFORM(IOS)
- if (m_font && m_font != reinterpret_cast<NSFont *>(-1))
- CFRelease(m_font);
-#else
</del><span class="cx"> if (m_font && m_font != reinterpret_cast<CTFontRef>(-1))
</span><span class="cx"> CFRelease(m_font);
</span><del>-#endif
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void FontPlatformData::platformDataInit(const FontPlatformData& f)
</span><span class="cx"> {
</span><del>-#if !PLATFORM(IOS)
- m_font = f.m_font && f.m_font != reinterpret_cast<NSFont *>(-1) ? const_cast<NSFont *>(static_cast<const NSFont *>(CFRetain(f.m_font))) : f.m_font;
-#else
</del><span class="cx"> m_font = f.m_font && f.m_font != reinterpret_cast<CTFontRef>(-1) ? static_cast<CTFontRef>(const_cast<void *>(CFRetain(f.m_font))) : f.m_font;
</span><del>-#endif
</del><span class="cx">
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx"> m_isEmoji = f.m_isEmoji;
</span><span class="cx"> #endif
</span><span class="cx"> m_cgFont = f.m_cgFont;
</span><del>- m_CTFont = f.m_CTFont;
</del><ins>+ m_ctFont = f.m_ctFont;
+ m_isPrinterFont = f.m_isPrinterFont;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> const FontPlatformData& FontPlatformData::platformDataAssign(const FontPlatformData& f)
</span><span class="lines">@@ -125,23 +88,16 @@
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx"> m_isEmoji = f.m_isEmoji;
</span><span class="cx"> #endif
</span><del>-#if !PLATFORM(IOS)
- if (m_font == f.m_font)
- return *this;
- if (f.m_font && f.m_font != reinterpret_cast<NSFont *>(-1))
- CFRetain(f.m_font);
- if (m_font && m_font != reinterpret_cast<NSFont *>(-1))
- CFRelease(m_font);
-#else
</del><span class="cx"> if (m_font && m_font != reinterpret_cast<CTFontRef>(-1) && f.m_font && f.m_font != reinterpret_cast<CTFontRef>(-1) && CFEqual(m_font, f.m_font))
</span><span class="cx"> return *this;
</span><span class="cx"> if (f.m_font && f.m_font != reinterpret_cast<CTFontRef>(-1))
</span><span class="cx"> CFRetain(f.m_font);
</span><span class="cx"> if (m_font && m_font != reinterpret_cast<CTFontRef>(-1))
</span><span class="cx"> CFRelease(m_font);
</span><del>-#endif
</del><span class="cx"> m_font = f.m_font;
</span><del>- m_CTFont = f.m_CTFont;
</del><ins>+ m_ctFont = f.m_ctFont;
+ m_isPrinterFont = f.m_isPrinterFont;
+
</ins><span class="cx"> return *this;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -169,34 +125,6 @@
</span><span class="cx"> return m_cgFont == other.m_cgFont;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#if !PLATFORM(IOS)
-void FontPlatformData::setFont(NSFont *font)
-{
- ASSERT_ARG(font, font);
- ASSERT(m_font != reinterpret_cast<NSFont *>(-1));
-
- if (m_font == font)
- return;
-
- CFRetain(font);
- if (m_font)
- CFRelease(m_font);
- m_font = font;
- m_size = [font pointSize];
-
- CGFontRef cgFont = 0;
- NSFont* loadedFont = 0;
- loadFont(m_font, m_size, loadedFont, cgFont);
-
- m_cgFont = adoptCF(cgFont);
- {
- CTFontSymbolicTraits traits = CTFontGetSymbolicTraits(toCTFontRef(m_font));
- m_isColorBitmapFont = traits & kCTFontColorGlyphsTrait;
- m_isCompositeFontReference = traits & kCTFontCompositeTrait;
- }
- m_CTFont = 0;
-}
-#else
</del><span class="cx"> void FontPlatformData::setFont(CTFontRef font)
</span><span class="cx"> {
</span><span class="cx"> ASSERT_ARG(font, font);
</span><span class="lines">@@ -211,21 +139,28 @@
</span><span class="cx"> m_font = font;
</span><span class="cx"> m_size = CTFontGetSize(font);
</span><span class="cx"> m_cgFont = adoptCF(CTFontCopyGraphicsFont(font, nullptr));
</span><del>- m_isColorBitmapFont = CTFontGetSymbolicTraits(font) & kCTFontTraitColorGlyphs;
</del><ins>+
+ CTFontSymbolicTraits traits = CTFontGetSymbolicTraits(m_font);
+ m_isColorBitmapFont = traits & kCTFontTraitColorGlyphs;
+ m_isCompositeFontReference = traits & kCTFontCompositeTrait;
+
+ m_ctFont = nullptr;
</ins><span class="cx"> }
</span><del>-#endif
</del><span class="cx">
</span><del>-#if !PLATFORM(IOS)
</del><span class="cx"> bool FontPlatformData::roundsGlyphAdvances() const
</span><span class="cx"> {
</span><del>- return [m_font renderingMode] == NSFontAntialiasedIntegerAdvancementsRenderingMode;
-}
</del><ins>+#if USE(APPKIT)
+ return [(NSFont *)m_font renderingMode] == NSFontAntialiasedIntegerAdvancementsRenderingMode;
+#else
+ return false;
</ins><span class="cx"> #endif
</span><ins>+}
</ins><span class="cx">
</span><ins>+
</ins><span class="cx"> bool FontPlatformData::allowsLigatures() const
</span><span class="cx"> {
</span><del>-#if !PLATFORM(IOS)
- return ![[m_font coveredCharacterSet] characterIsMember:'a'];
</del><ins>+#if USE(APPKIT)
+ return ![[(NSFont *)m_font coveredCharacterSet] characterIsMember:'a'];
</ins><span class="cx"> #else
</span><span class="cx"> if (!m_font)
</span><span class="cx"> return false;
</span><span class="lines">@@ -309,23 +244,23 @@
</span><span class="cx">
</span><span class="cx"> CTFontRef FontPlatformData::ctFont() const
</span><span class="cx"> {
</span><del>- if (m_CTFont)
- return m_CTFont.get();
</del><ins>+ if (m_ctFont)
+ return m_ctFont.get();
</ins><span class="cx">
</span><span class="cx"> ASSERT(m_cgFont.get());
</span><span class="cx"> #if !PLATFORM(IOS)
</span><del>- m_CTFont = toCTFontRef(m_font);
- if (m_CTFont) {
</del><ins>+ m_ctFont = m_font;
+ if (m_ctFont) {
</ins><span class="cx"> CTFontDescriptorRef fontDescriptor;
</span><del>- RetainPtr<CFStringRef> postScriptName = adoptCF(CTFontCopyPostScriptName(m_CTFont.get()));
</del><ins>+ RetainPtr<CFStringRef> postScriptName = adoptCF(CTFontCopyPostScriptName(m_ctFont.get()));
</ins><span class="cx"> // Hoefler Text Italic has line-initial and -final swashes enabled by default, so disable them.
</span><span class="cx"> if (CFEqual(postScriptName.get(), CFSTR("HoeflerText-Italic")) || CFEqual(postScriptName.get(), CFSTR("HoeflerText-BlackItalic")))
</span><span class="cx"> fontDescriptor = cascadeToLastResortAndDisableSwashesFontDescriptor();
</span><span class="cx"> else
</span><span class="cx"> fontDescriptor = cascadeToLastResortFontDescriptor();
</span><del>- m_CTFont = adoptCF(CTFontCreateCopyWithAttributes(m_CTFont.get(), m_size, 0, fontDescriptor));
</del><ins>+ m_ctFont = adoptCF(CTFontCreateCopyWithAttributes(m_ctFont.get(), m_size, 0, fontDescriptor));
</ins><span class="cx"> } else
</span><del>- m_CTFont = adoptCF(CTFontCreateWithGraphicsFont(m_cgFont.get(), m_size, 0, cascadeToLastResortFontDescriptor()));
</del><ins>+ m_ctFont = adoptCF(CTFontCreateWithGraphicsFont(m_cgFont.get(), m_size, 0, cascadeToLastResortFontDescriptor()));
</ins><span class="cx"> #else
</span><span class="cx"> // Apple Color Emoji size is adjusted (and then re-adjusted by Core Text) and capped.
</span><span class="cx"> CGFloat size = !m_isEmoji ? m_size : m_size <= 15 ? 4 * (m_size + 2) / static_cast<CGFloat>(5) : 16;
</span><span class="lines">@@ -335,25 +270,33 @@
</span><span class="cx"> fontDescriptor = cascadeToLastResortAndDisableSwashesFontDescriptor();
</span><span class="cx"> else
</span><span class="cx"> fontDescriptor = cascadeToLastResortFontDescriptor();
</span><del>- m_CTFont = adoptCF(CTFontCreateWithGraphicsFont(m_cgFont.get(), size, 0, fontDescriptor));
</del><ins>+ m_ctFont = adoptCF(CTFontCreateWithGraphicsFont(m_cgFont.get(), size, 0, fontDescriptor));
</ins><span class="cx"> #endif // !PLATFORM(IOS)
</span><span class="cx">
</span><span class="cx"> if (m_widthVariant != RegularWidth) {
</span><span class="cx"> int featureTypeValue = kTextSpacingType;
</span><span class="cx"> int featureSelectorValue = mapFontWidthVariantToCTFeatureSelector(m_widthVariant);
</span><del>- RetainPtr<CTFontDescriptorRef> sourceDescriptor = adoptCF(CTFontCopyFontDescriptor(m_CTFont.get()));
</del><ins>+ RetainPtr<CTFontDescriptorRef> sourceDescriptor = adoptCF(CTFontCopyFontDescriptor(m_ctFont.get()));
</ins><span class="cx"> RetainPtr<CFNumberRef> featureType = adoptCF(CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &featureTypeValue));
</span><span class="cx"> RetainPtr<CFNumberRef> featureSelector = adoptCF(CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &featureSelectorValue));
</span><span class="cx"> RetainPtr<CTFontDescriptorRef> newDescriptor = adoptCF(CTFontDescriptorCreateCopyWithFeature(sourceDescriptor.get(), featureType.get(), featureSelector.get()));
</span><span class="cx"> RetainPtr<CTFontRef> newFont = adoptCF(CTFontCreateWithFontDescriptor(newDescriptor.get(), m_size, 0));
</span><span class="cx">
</span><span class="cx"> if (newFont)
</span><del>- m_CTFont = newFont;
</del><ins>+ m_ctFont = newFont;
</ins><span class="cx"> }
</span><span class="cx">
</span><del>- return m_CTFont.get();
</del><ins>+ return m_ctFont.get();
</ins><span class="cx"> }
</span><span class="cx">
</span><ins>+PassRefPtr<SharedBuffer> FontPlatformData::openTypeTable(uint32_t table) const
+{
+ if (RetainPtr<CFDataRef> data = adoptCF(CGFontCopyTableForTag(cgFont(), table)))
+ return SharedBuffer::wrapCFData(data.get());
+
+ return nullptr;
+}
+
</ins><span class="cx"> #ifndef NDEBUG
</span><span class="cx"> String FontPlatformData::description() const
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsmacFontCacheMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/mac/FontCacheMac.mm (177526 => 177527)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/mac/FontCacheMac.mm        2014-12-18 22:32:37 UTC (rev 177526)
+++ trunk/Source/WebCore/platform/graphics/mac/FontCacheMac.mm        2014-12-18 22:32:43 UTC (rev 177527)
</span><span class="lines">@@ -342,7 +342,7 @@
</span><span class="cx"> UChar32 character;
</span><span class="cx"> U16_GET(characters, 0, 0, length, character);
</span><span class="cx"> const FontPlatformData& platformData = originalFontData->platformData();
</span><del>- NSFont *nsFont = platformData.font();
</del><ins>+ NSFont *nsFont = platformData.nsFont();
</ins><span class="cx">
</span><span class="cx"> NSString *string = [[NSString alloc] initWithCharactersNoCopy:const_cast<UChar*>(characters) length:length freeWhenDone:NO];
</span><span class="cx"> NSFont *substituteFont = [NSFont findFontLike:nsFont forString:string withRange:NSMakeRange(0, [string length]) inLanguage:nil];
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsmacFontMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/mac/FontMac.mm (177526 => 177527)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/mac/FontMac.mm        2014-12-18 22:32:37 UTC (rev 177526)
+++ trunk/Source/WebCore/platform/graphics/mac/FontMac.mm        2014-12-18 22:32:43 UTC (rev 177527)
</span><span class="lines">@@ -248,16 +248,18 @@
</span><span class="cx"> #if !PLATFORM(IOS)
</span><span class="cx"> NSFont* drawFont;
</span><span class="cx"> if (!isPrinterFont()) {
</span><del>- drawFont = [platformData.font() screenFont];
- if (drawFont != platformData.font())
</del><ins>+ drawFont = [platformData.nsFont() screenFont];
+ if (drawFont != platformData.nsFont()) {
</ins><span class="cx"> // We are getting this in too many places (3406411); use ERROR so it only prints on debug versions for now. (We should debug this also, eventually).
</span><span class="cx"> LOG_ERROR("Attempting to set non-screen font (%@) when drawing to screen. Using screen font anyway, may result in incorrect metrics.",
</span><del>- [[[platformData.font() fontDescriptor] fontAttributes] objectForKey:NSFontNameAttribute]);
</del><ins>+ [[[platformData.nsFont() fontDescriptor] fontAttributes] objectForKey:NSFontNameAttribute]);
+ }
</ins><span class="cx"> } else {
</span><del>- drawFont = [platformData.font() printerFont];
- if (drawFont != platformData.font())
</del><ins>+ drawFont = [platformData.nsFont() printerFont];
+ if (drawFont != platformData.nsFont()) {
</ins><span class="cx"> NSLog(@"Attempting to set non-printer font (%@) when printing. Using printer font anyway, may result in incorrect metrics.",
</span><del>- [[[platformData.font() fontDescriptor] fontAttributes] objectForKey:NSFontNameAttribute]);
</del><ins>+ [[[platformData.nsFont() fontDescriptor] fontAttributes] objectForKey:NSFontNameAttribute]);
+ }
</ins><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsmacSimpleFontDataMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/mac/SimpleFontDataMac.mm (177526 => 177527)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/mac/SimpleFontDataMac.mm        2014-12-18 22:32:37 UTC (rev 177526)
+++ trunk/Source/WebCore/platform/graphics/mac/SimpleFontDataMac.mm        2014-12-18 22:32:43 UTC (rev 177527)
</span><span class="lines">@@ -101,7 +101,7 @@
</span><span class="cx"> bool isUsingPrinterFont = platformData().isPrinterFont();
</span><span class="cx"> NSFont *substituteFont = isUsingPrinterFont ? [key printerFont] : [key screenFont];
</span><span class="cx">
</span><del>- CTFontSymbolicTraits traits = CTFontGetSymbolicTraits(toCTFontRef(substituteFont));
</del><ins>+ CTFontSymbolicTraits traits = CTFontGetSymbolicTraits((CTFontRef)substituteFont);
</ins><span class="cx"> bool syntheticBold = platformData().syntheticBold() && !(traits & kCTFontBoldTrait);
</span><span class="cx"> bool syntheticOblique = platformData().syntheticOblique() && !(traits & kCTFontItalicTrait);
</span><span class="cx">
</span><span class="lines">@@ -130,7 +130,7 @@
</span><span class="cx"> // It overrides the normal "Times" family font.
</span><span class="cx"> // It also appears to have a corrupt regular variant.
</span><span class="cx"> NSString *fallbackFontFamily;
</span><del>- if ([[m_platformData.font() familyName] isEqual:@"Times"])
</del><ins>+ if ([[m_platformData.nsFont() familyName] isEqual:@"Times"])
</ins><span class="cx"> fallbackFontFamily = @"Times New Roman";
</span><span class="cx"> else
</span><span class="cx"> fallbackFontFamily = webFallbackFontFamily();
</span><span class="lines">@@ -138,17 +138,17 @@
</span><span class="cx"> // Try setting up the alternate font.
</span><span class="cx"> // This is a last ditch effort to use a substitute font when something has gone wrong.
</span><span class="cx"> #if !ERROR_DISABLED
</span><del>- RetainPtr<NSFont> initialFont = m_platformData.font();
</del><ins>+ RetainPtr<NSFont> initialFont = m_platformData.nsFont();
</ins><span class="cx"> #endif
</span><span class="cx"> if (m_platformData.font())
</span><del>- m_platformData.setFont([[NSFontManager sharedFontManager] convertFont:m_platformData.font() toFamily:fallbackFontFamily]);
</del><ins>+ m_platformData.setNSFont([[NSFontManager sharedFontManager] convertFont:m_platformData.nsFont() toFamily:fallbackFontFamily]);
</ins><span class="cx"> else
</span><del>- m_platformData.setFont([NSFont fontWithName:fallbackFontFamily size:m_platformData.size()]);
</del><ins>+ m_platformData.setNSFont([NSFont fontWithName:fallbackFontFamily size:m_platformData.size()]);
</ins><span class="cx"> if (!initFontData(this)) {
</span><span class="cx"> if ([fallbackFontFamily isEqual:@"Times New Roman"]) {
</span><span class="cx"> // OK, couldn't setup Times New Roman as an alternate to Times, fallback
</span><span class="cx"> // on the system font. If this fails we have no alternative left.
</span><del>- m_platformData.setFont([[NSFontManager sharedFontManager] convertFont:m_platformData.font() toFamily:webFallbackFontFamily()]);
</del><ins>+ m_platformData.setNSFont([[NSFontManager sharedFontManager] convertFont:m_platformData.nsFont() toFamily:webFallbackFontFamily()]);
</ins><span class="cx"> if (!initFontData(this)) {
</span><span class="cx"> // We tried, Times, Times New Roman, and the system font. No joy. We have to give up.
</span><span class="cx"> LOG_ERROR("unable to initialize with font %@", initialFont.get());
</span><span class="lines">@@ -163,13 +163,13 @@
</span><span class="cx">
</span><span class="cx"> // Report the problem.
</span><span class="cx"> LOG_ERROR("Corrupt font detected, using %@ in place of %@.",
</span><del>- [m_platformData.font() familyName], [initialFont.get() familyName]);
</del><ins>+ [m_platformData.nsFont() familyName], [initialFont.get() familyName]);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // If all else fails, try to set up using the system font.
</span><span class="cx"> // This is probably because Times and Times New Roman are both unavailable.
</span><span class="cx"> if (failedSetup) {
</span><del>- m_platformData.setFont([NSFont systemFontOfSize:[m_platformData.font() pointSize]]);
</del><ins>+ m_platformData.setNSFont([NSFont systemFontOfSize:[m_platformData.nsFont() pointSize]]);
</ins><span class="cx"> LOG_ERROR("failed to set up font, using system font %s", m_platformData.font());
</span><span class="cx"> initFontData(this);
</span><span class="cx"> }
</span><span class="lines">@@ -199,7 +199,7 @@
</span><span class="cx"> // web standard. The AppKit adjustment of 20% is too big and is
</span><span class="cx"> // incorrectly added to line spacing, so we use a 15% adjustment instead
</span><span class="cx"> // and add it to the ascent.
</span><del>- NSString *familyName = [m_platformData.font() familyName];
</del><ins>+ NSString *familyName = [m_platformData.nsFont() familyName];
</ins><span class="cx"> if ([familyName isEqualToString:@"Times"] || [familyName isEqualToString:@"Helvetica"] || [familyName isEqualToString:@"Courier"])
</span><span class="cx"> ascent += floorf(((ascent + descent) * 0.15f) + 0.5f);
</span><span class="cx">
</span><span class="lines">@@ -294,22 +294,22 @@
</span><span class="cx">
</span><span class="cx"> BEGIN_BLOCK_OBJC_EXCEPTIONS;
</span><span class="cx"> float size = m_platformData.size() * scaleFactor;
</span><del>- FontPlatformData scaledFontData([[NSFontManager sharedFontManager] convertFont:m_platformData.font() toSize:size], size, m_platformData.isPrinterFont(), false, false, m_platformData.orientation());
</del><ins>+ FontPlatformData scaledFontData([[NSFontManager sharedFontManager] convertFont:m_platformData.nsFont() toSize:size], size, m_platformData.isPrinterFont(), false, false, m_platformData.orientation());
</ins><span class="cx">
</span><span class="cx"> // AppKit resets the type information (screen/printer) when you convert a font to a different size.
</span><span class="cx"> // We have to fix up the font that we're handed back.
</span><del>- scaledFontData.setFont(fontDescription.usePrinterFont() ? [scaledFontData.font() printerFont] : [scaledFontData.font() screenFont]);
</del><ins>+ scaledFontData.setNSFont(fontDescription.usePrinterFont() ? [scaledFontData.nsFont() printerFont] : [scaledFontData.nsFont() screenFont]);
</ins><span class="cx">
</span><span class="cx"> if (scaledFontData.font()) {
</span><span class="cx"> NSFontManager *fontManager = [NSFontManager sharedFontManager];
</span><del>- NSFontTraitMask fontTraits = [fontManager traitsOfFont:m_platformData.font()];
</del><ins>+ NSFontTraitMask fontTraits = [fontManager traitsOfFont:m_platformData.nsFont()];
</ins><span class="cx">
</span><span class="cx"> if (m_platformData.m_syntheticBold)
</span><span class="cx"> fontTraits |= NSBoldFontMask;
</span><span class="cx"> if (m_platformData.m_syntheticOblique)
</span><span class="cx"> fontTraits |= NSItalicFontMask;
</span><span class="cx">
</span><del>- NSFontTraitMask scaledFontTraits = [fontManager traitsOfFont:scaledFontData.font()];
</del><ins>+ NSFontTraitMask scaledFontTraits = [fontManager traitsOfFont:scaledFontData.nsFont()];
</ins><span class="cx"> scaledFontData.m_syntheticBold = (fontTraits & NSBoldFontMask) && !(scaledFontTraits & NSBoldFontMask);
</span><span class="cx"> scaledFontData.m_syntheticOblique = (fontTraits & NSItalicFontMask) && !(scaledFontTraits & NSItalicFontMask);
</span><span class="cx">
</span><span class="lines">@@ -326,7 +326,7 @@
</span><span class="cx"> bool SimpleFontData::containsCharacters(const UChar* characters, int length) const
</span><span class="cx"> {
</span><span class="cx"> NSString *string = [[NSString alloc] initWithCharactersNoCopy:const_cast<unichar*>(characters) length:length freeWhenDone:NO];
</span><del>- NSCharacterSet *set = [[m_platformData.font() coveredCharacterSet] invertedSet];
</del><ins>+ NSCharacterSet *set = [[m_platformData.nsFont() coveredCharacterSet] invertedSet];
</ins><span class="cx"> bool result = set && [string rangeOfCharacterFromSet:set].location == NSNotFound;
</span><span class="cx"> [string release];
</span><span class="cx"> return result;
</span><span class="lines">@@ -334,7 +334,7 @@
</span><span class="cx">
</span><span class="cx"> void SimpleFontData::determinePitch()
</span><span class="cx"> {
</span><del>- NSFont* f = m_platformData.font();
</del><ins>+ NSFont* f = m_platformData.nsFont();
</ins><span class="cx"> // Special case Osaka-Mono.
</span><span class="cx"> // According to <rdar://problem/3999467>, we should treat Osaka-Mono as fixed pitch.
</span><span class="cx"> // Note that the AppKit does not report Osaka-Mono as fixed pitch.
</span><span class="lines">@@ -370,7 +370,7 @@
</span><span class="cx"> inline CGFontRenderingStyle SimpleFontData::renderingStyle() const
</span><span class="cx"> {
</span><span class="cx"> CGFontRenderingStyle style = kCGFontRenderingStyleAntialiasing | kCGFontRenderingStyleSubpixelPositioning | kCGFontRenderingStyleSubpixelQuantization;
</span><del>- NSFont *font = platformData().font();
</del><ins>+ NSFont *font = platformData().nsFont();
</ins><span class="cx"> if (font) {
</span><span class="cx"> switch ([font renderingMode]) {
</span><span class="cx"> case NSFontIntegerAdvancementsRenderingMode:
</span><span class="lines">@@ -388,7 +388,7 @@
</span><span class="cx">
</span><span class="cx"> inline bool SimpleFontData::advanceForColorBitmapFont(Glyph glyph, CGSize& advance) const
</span><span class="cx"> {
</span><del>- NSFont *font = platformData().font();
</del><ins>+ NSFont *font = platformData().nsFont();
</ins><span class="cx"> if (!font || !platformData().isColorBitmapFont())
</span><span class="cx"> return false;
</span><span class="cx"> advance = NSSizeToCGSize([font advancementForGlyph:glyph]);
</span></span></pre></div>
<a id="trunkSourceWebKitmacChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/ChangeLog (177526 => 177527)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/ChangeLog        2014-12-18 22:32:37 UTC (rev 177526)
+++ trunk/Source/WebKit/mac/ChangeLog        2014-12-18 22:32:43 UTC (rev 177527)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2014-12-16 Sam Weinig <sam@webkit.org>
+
+ Unify the Mac and iOS implementations of FontPlatformData a bit
+ https://bugs.webkit.org/show_bug.cgi?id=139721
+
+ Reviewed by Anders Carlsson.
+
+ * WebView/WebHTMLView.mm:
+ (fontNameForDescription):
+ Update for new function name.
+
</ins><span class="cx"> 2014-12-18 Antti Koivisto <antti@apple.com>
</span><span class="cx">
</span><span class="cx"> Remove alwaysUseBaselineOfPrimaryFont setting
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebViewWebHTMLViewmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebView/WebHTMLView.mm (177526 => 177527)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebView/WebHTMLView.mm        2014-12-18 22:32:37 UTC (rev 177526)
+++ trunk/Source/WebKit/mac/WebView/WebHTMLView.mm        2014-12-18 22:32:43 UTC (rev 177527)
</span><span class="lines">@@ -4880,7 +4880,7 @@
</span><span class="cx"> fontDescription.setSpecifiedSize(pointSize);
</span><span class="cx"> FontCachePurgePreventer purgePreventer;
</span><span class="cx"> RefPtr<SimpleFontData> simpleFontData = fontCache().getCachedFontData(fontDescription, familyName, false, WebCore::FontCache::DoNotRetain);
</span><del>- return [simpleFontData->platformData().font() fontName];
</del><ins>+ return [simpleFontData->platformData().nsFont() fontName];
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> - (void)_addToStyle:(DOMCSSStyleDeclaration *)style fontA:(NSFont *)a fontB:(NSFont *)b
</span></span></pre>
</div>
</div>
</body>
</html>