Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1603)

Unified Diff: Source/platform/fonts/cocoa/FontPlatformDataCocoa.mm

Issue 557823003: Revert "Merge FontPlatformDataHarfBuzz into FontPlatformData" (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/platform/fonts/cocoa/FontPlatformDataCocoa.mm
diff --git a/Source/platform/fonts/cocoa/FontPlatformDataCocoa.mm b/Source/platform/fonts/cocoa/FontPlatformDataCocoa.mm
index b7b8f756fe30a5dd845d4418487cec8a7505a20e..88a346095cb4a09964074ce9da7d8e7560687324 100644
--- a/Source/platform/fonts/cocoa/FontPlatformDataCocoa.mm
+++ b/Source/platform/fonts/cocoa/FontPlatformDataCocoa.mm
@@ -28,8 +28,10 @@
#import <AvailabilityMacros.h>
#import <wtf/text/WTFString.h>
+#if OS(MACOSX)
#import "platform/fonts/harfbuzz/HarfBuzzFace.h"
#include "third_party/skia/include/ports/SkTypeface_mac.h"
+#endif
namespace blink {
@@ -77,16 +79,24 @@ FontPlatformData::FontPlatformData(NSFont *nsFont, float size, bool syntheticBol
m_cgFont.adoptCF(cgFont);
}
+FontPlatformData:: ~FontPlatformData()
+{
+ if (m_font && m_font != reinterpret_cast<NSFont *>(-1))
+ CFRelease(m_font);
+}
+
void FontPlatformData::platformDataInit(const FontPlatformData& f)
{
- m_font = f.m_font ? [f.m_font retain] : f.m_font;
+ m_font = f.m_font && f.m_font != reinterpret_cast<NSFont *>(-1) ? [f.m_font retain] : f.m_font;
m_cgFont = f.m_cgFont;
m_CTFont = f.m_CTFont;
+#if OS(MACOSX)
m_inMemoryFont = f.m_inMemoryFont;
m_harfBuzzFace = f.m_harfBuzzFace;
m_typeface = f.m_typeface;
+#endif
}
const FontPlatformData& FontPlatformData::platformDataAssign(const FontPlatformData& f)
@@ -94,24 +104,31 @@ const FontPlatformData& FontPlatformData::platformDataAssign(const FontPlatformD
m_cgFont = f.m_cgFont;
if (m_font == f.m_font)
return *this;
- if (f.m_font)
+ if (f.m_font && f.m_font != reinterpret_cast<NSFont *>(-1))
CFRetain(f.m_font);
- if (m_font)
+ if (m_font && m_font != reinterpret_cast<NSFont *>(-1))
CFRelease(m_font);
m_font = f.m_font;
m_CTFont = f.m_CTFont;
-
+#if OS(MACOSX)
m_inMemoryFont = f.m_inMemoryFont;
m_harfBuzzFace = f.m_harfBuzzFace;
m_typeface = f.m_typeface;
-
+#endif
return *this;
}
+bool FontPlatformData::platformIsEqual(const FontPlatformData& other) const
+{
+ if (m_font || other.m_font)
+ return m_font == other.m_font;
+ return m_cgFont == other.m_cgFont;
+}
void FontPlatformData::setFont(NSFont *font)
{
ASSERT_ARG(font, font);
+ ASSERT(m_font != reinterpret_cast<NSFont *>(-1));
if (m_font == font)
return;
@@ -126,6 +143,7 @@ void FontPlatformData::setFont(NSFont *font)
NSFont* loadedFont = 0;
loadFont(m_font, m_textSize, loadedFont, cgFont);
+#if OS(MACOSX)
// If loadFont replaced m_font with a fallback font, then release the
// previous font to counter the retain above. Then retain the new font.
if (loadedFont != m_font) {
@@ -133,6 +151,7 @@ void FontPlatformData::setFont(NSFont *font)
CFRetain(loadedFont);
m_font = loadedFont;
}
+#endif
m_cgFont.adoptCF(cgFont);
#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1070
@@ -225,6 +244,11 @@ static CTFontDescriptorRef cascadeToLastResortAndDisableSwashesFontDescriptor()
return descriptor;
}
+String FontPlatformData::fontFamilyName() const
+{
+ return String(CTFontCopyDisplayName(ctFont()));
+}
+
CTFontRef FontPlatformData::ctFont() const
{
if (m_CTFont)
@@ -264,7 +288,16 @@ CTFontRef FontPlatformData::ctFont() const
return m_CTFont.get();
}
-bool FontPlatformData::isAATFont(CTFontRef ctFont) const
+SkTypeface* FontPlatformData::typeface() const {
+ if (m_typeface)
+ return m_typeface.get();
+
+ m_typeface = adoptRef(SkCreateTypefaceFromCTFont(ctFont()));
+ return m_typeface.get();
+}
+
+#if OS(MACOSX)
+static bool isAATFont(CTFontRef ctFont)
{
CFDataRef table = CTFontCopyTable(ctFont, kCTFontTableMort, 0);
if (table) {
@@ -278,5 +311,21 @@ bool FontPlatformData::isAATFont(CTFontRef ctFont) const
}
return false;
}
+#endif
+
+HarfBuzzFace* FontPlatformData::harfBuzzFace() const
+{
+ CTFontRef font = ctFont();
+ // HarfBuzz can't handle AAT font
+ if (isAATFont(font))
+ return 0;
+
+ if (!m_harfBuzzFace) {
+ uint64_t uniqueID = reinterpret_cast<uintptr_t>(font);
+ m_harfBuzzFace = HarfBuzzFace::create(const_cast<FontPlatformData*>(this), uniqueID);
+ }
+ return m_harfBuzzFace.get();
+}
+
} // namespace blink
« no previous file with comments | « Source/platform/fonts/FontPlatformData.cpp ('k') | Source/platform/fonts/harfbuzz/FontPlatformDataHarfBuzz.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698