Diff
Modified: trunk/LayoutTests/ChangeLog (215286 => 215287)
--- trunk/LayoutTests/ChangeLog 2017-04-12 20:47:31 UTC (rev 215286)
+++ trunk/LayoutTests/ChangeLog 2017-04-12 20:54:02 UTC (rev 215287)
@@ -1,3 +1,13 @@
+2017-04-12 Myles C. Maxfield <mmaxfi...@apple.com>
+
+ Well-known variations should clamp to the values listed in the @font-face block
+ https://bugs.webkit.org/show_bug.cgi?id=169260
+
+ Reviewed by Dean Jackson.
+
+ * fast/text/variations/font-face-clamp-expected.html: Added.
+ * fast/text/variations/font-face-clamp.html: Added.
+
2017-04-12 Jonathan Bedard <jbed...@apple.com>
Remove two passing canvas tests from ios expectations
Added: trunk/LayoutTests/fast/text/variations/font-face-clamp-expected.html (0 => 215287)
--- trunk/LayoutTests/fast/text/variations/font-face-clamp-expected.html (rev 0)
+++ trunk/LayoutTests/fast/text/variations/font-face-clamp-expected.html 2017-04-12 20:54:02 UTC (rev 215287)
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+<head>
+<style>
+@font-face {
+ font-family: "Boxis";
+ src: url("resources/Boxis-VF.ttf");
+ font-stretch: 998% 999%;
+}
+</style>
+</head>
+<body>
+This test makes sure that the font selection properties are clamped by their values in the @font-face block.
+<div style="font-family: Boxis; font-variation-settings: 'wdth' 3.495; transform: scale(100, 1); transform-origin: left top;">Hello</div>
+</body>
+</html>
Added: trunk/LayoutTests/fast/text/variations/font-face-clamp.html (0 => 215287)
--- trunk/LayoutTests/fast/text/variations/font-face-clamp.html (rev 0)
+++ trunk/LayoutTests/fast/text/variations/font-face-clamp.html 2017-04-12 20:54:02 UTC (rev 215287)
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+<head>
+<style>
+@font-face {
+ font-family: "Boxis";
+ src: url("resources/Boxis-VF.ttf");
+ font-stretch: 998% 999%;
+}
+</style>
+</head>
+<body>
+This test makes sure that the font selection properties are clamped by their values in the @font-face block.
+<div style="font-family: Boxis; font-stretch: 100%; transform: scale(100, 1); transform-origin: left top;">Hello</div>
+</body>
+</html>
Modified: trunk/Source/WebCore/ChangeLog (215286 => 215287)
--- trunk/Source/WebCore/ChangeLog 2017-04-12 20:47:31 UTC (rev 215286)
+++ trunk/Source/WebCore/ChangeLog 2017-04-12 20:54:02 UTC (rev 215287)
@@ -1,3 +1,72 @@
+2017-04-12 Myles C. Maxfield <mmaxfi...@apple.com>
+
+ Well-known variations should clamp to the values listed in the @font-face block
+ https://bugs.webkit.org/show_bug.cgi?id=169260
+
+ Reviewed by Dean Jackson.
+
+ Most of this patch is plumbing the variation ranges from the CSSFontFace object
+ to preparePlatformFont() where variation values get applied.
+
+ Beyond that, there is one other piece of this patch - a nonspecified value in an
+ @font-face block shouldn't perform any clamping, but a specified value should be
+ clamped. This means that we need to retain whether or not a value is specified.
+ This patch does this by migrating CSSFontFace from using FontSelectionCapabilities
+ to using FontSelectionSpecifiedCapabilities, which has its internals behind
+ std::optionals which represent whether or not the value was specified. For the
+ purposes of font selection, these unspecified values are replaced with default
+ values.
+
+ Test: fast/text/variations/font-face-clamp.html
+
+ * css/CSSFontFace.cpp:
+ (WebCore::CSSFontFace::font):
+ * css/CSSFontFace.h:
+ * css/CSSFontFaceSource.cpp:
+ (WebCore::CSSFontFaceSource::font):
+ * css/CSSFontFaceSource.h:
+ * css/CSSFontSelector.cpp:
+ (WebCore::CSSFontSelector::addFontFaceRule):
+ * loader/cache/CachedFont.cpp:
+ (WebCore::CachedFont::createFont):
+ (WebCore::CachedFont::platformDataFromCustomData):
+ * loader/cache/CachedFont.h:
+ * loader/cache/CachedSVGFont.cpp:
+ (WebCore::CachedSVGFont::createFont):
+ (WebCore::CachedSVGFont::platformDataFromCustomData):
+ * loader/cache/CachedSVGFont.h:
+ * platform/graphics/FontCache.cpp:
+ (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey):
+ (WebCore::FontPlatformDataCacheKey::operator==):
+ (WebCore::FontPlatformDataCacheKeyHash::hash):
+ (WebCore::FontCache::getCachedFontPlatformData):
+ (WebCore::FontCache::fontForFamily):
+ * platform/graphics/FontCache.h:
+ (WebCore::FontCache::fontForFamily):
+ (WebCore::FontCache::getCachedFontPlatformData):
+ (WebCore::FontCache::createFontPlatformDataForTesting):
+ * platform/graphics/FontSelectionAlgorithm.h:
+ (WebCore::FontSelectionRange::uniqueValue):
+ (WebCore::FontSelectionCapabilities::operator==):
+ (WebCore::FontSelectionCapabilities::operator!=):
+ (WebCore::FontSelectionSpecifiedCapabilities::computeFontSelectionCapabilities):
+ (WebCore::FontSelectionSpecifiedCapabilities::operator==):
+ (WebCore::FontSelectionSpecifiedCapabilities::operator!=):
+ (WebCore::FontSelectionSpecifiedCapabilities::operator=):
+ (WebCore::FontSelectionSpecifiedCapabilities::computeWeight):
+ (WebCore::FontSelectionSpecifiedCapabilities::computeWidth):
+ (WebCore::FontSelectionSpecifiedCapabilities::computeSlope):
+ * platform/graphics/cocoa/FontCacheCoreText.cpp:
+ (WebCore::preparePlatformFont):
+ (WebCore::fontWithFamily):
+ (WebCore::FontCache::createFontPlatformData):
+ (WebCore::FontCache::systemFallbackForCharacters):
+ * platform/graphics/mac/FontCacheMac.mm:
+ (WebCore::FontCache::lastResortFallbackFont):
+ * platform/graphics/mac/FontCustomPlatformData.cpp:
+ (WebCore::FontCustomPlatformData::fontPlatformData):
+ * platform/graphics/mac/FontCustomPlatformData.h:
+
2017-04-12 Beth Dakin <bda...@apple.com>
Speculative open source build fix.
Modified: trunk/Source/WebCore/css/CSSFontFace.cpp (215286 => 215287)
--- trunk/Source/WebCore/css/CSSFontFace.cpp 2017-04-12 20:47:31 UTC (rev 215286)
+++ trunk/Source/WebCore/css/CSSFontFace.cpp 2017-04-12 20:54:02 UTC (rev 215287)
@@ -629,7 +629,7 @@
continue;
return Font::create(FontCache::singleton().lastResortFallbackFontForEveryCharacter(fontDescription)->platformData(), true, true);
case CSSFontFaceSource::Status::Success:
- if (RefPtr<Font> result = source->font(fontDescription, syntheticBold, syntheticItalic, m_featureSettings, m_variantSettings))
+ if (RefPtr<Font> result = source->font(fontDescription, syntheticBold, syntheticItalic, m_featureSettings, m_variantSettings, m_fontSelectionCapabilities))
return result;
break;
case CSSFontFaceSource::Status::Failure:
Modified: trunk/Source/WebCore/css/CSSFontFace.h (215286 => 215287)
--- trunk/Source/WebCore/css/CSSFontFace.h 2017-04-12 20:47:31 UTC (rev 215286)
+++ trunk/Source/WebCore/css/CSSFontFace.h 2017-04-12 20:54:02 UTC (rev 215287)
@@ -80,10 +80,10 @@
enum class Status;
struct UnicodeRange;
const CSSValueList* families() const { return m_families.get(); }
- FontSelectionRange weight() const { return m_fontSelectionCapabilities.weight; }
- FontSelectionRange stretch() const { return m_fontSelectionCapabilities.width; }
- FontSelectionRange italic() const { return m_fontSelectionCapabilities.slope; }
- FontSelectionCapabilities fontSelectionCapabilities() const { return m_fontSelectionCapabilities; }
+ FontSelectionRange weight() const { return m_fontSelectionCapabilities.computeWeight(); }
+ FontSelectionRange stretch() const { return m_fontSelectionCapabilities.computeWidth(); }
+ FontSelectionRange italic() const { return m_fontSelectionCapabilities.computeSlope(); }
+ FontSelectionCapabilities fontSelectionCapabilities() const { return m_fontSelectionCapabilities.computeFontSelectionCapabilities(); }
const Vector<UnicodeRange>& ranges() const { return m_ranges; }
const FontFeatureSettings& featureSettings() const { return m_featureSettings; }
const FontVariantSettings& variantSettings() const { return m_variantSettings; }
@@ -177,7 +177,7 @@
RefPtr<StyleRuleFontFace> m_cssConnection;
HashSet<Client*> m_clients;
WeakPtr<FontFace> m_wrapper;
- FontSelectionCapabilities m_fontSelectionCapabilities;
+ FontSelectionSpecifiedCapabilities m_fontSelectionCapabilities;
Status m_status { Status::Pending };
bool m_isLocalFallback { false };
bool m_sourcesPopulated { false };
Modified: trunk/Source/WebCore/css/CSSFontFaceSource.cpp (215286 => 215287)
--- trunk/Source/WebCore/css/CSSFontFaceSource.cpp 2017-04-12 20:47:31 UTC (rev 215286)
+++ trunk/Source/WebCore/css/CSSFontFaceSource.cpp 2017-04-12 20:54:02 UTC (rev 215287)
@@ -136,7 +136,7 @@
fontSelector.beginLoadingFontSoon(*m_font);
}
-RefPtr<Font> CSSFontFaceSource::font(const FontDescription& fontDescription, bool syntheticBold, bool syntheticItalic, const FontFeatureSettings& fontFaceFeatures, const FontVariantSettings& fontFaceVariantSettings)
+RefPtr<Font> CSSFontFaceSource::font(const FontDescription& fontDescription, bool syntheticBold, bool syntheticItalic, const FontFeatureSettings& fontFaceFeatures, const FontVariantSettings& fontFaceVariantSettings, FontSelectionSpecifiedCapabilities fontFaceCapabilities)
{
ASSERT(status() == Status::Success);
@@ -154,12 +154,12 @@
m_immediateFontCustomPlatformData = CachedFont::createCustomFontData(*buffer, wrapping);
} if (!m_immediateFontCustomPlatformData)
return nullptr;
- return Font::create(CachedFont::platformDataFromCustomData(*m_immediateFontCustomPlatformData, fontDescription, syntheticBold, syntheticItalic, fontFaceFeatures, fontFaceVariantSettings), true);
+ return Font::create(CachedFont::platformDataFromCustomData(*m_immediateFontCustomPlatformData, fontDescription, syntheticBold, syntheticItalic, fontFaceFeatures, fontFaceVariantSettings, fontFaceCapabilities), true);
}
// We're local. Just return a Font from the normal cache.
// We don't want to check alternate font family names here, so pass true as the checkingAlternateName parameter.
- return FontCache::singleton().fontForFamily(fontDescription, m_familyNameOrURI, &fontFaceFeatures, &fontFaceVariantSettings, true);
+ return FontCache::singleton().fontForFamily(fontDescription, m_familyNameOrURI, &fontFaceFeatures, &fontFaceVariantSettings, fontFaceCapabilities, true);
}
if (m_font) {
@@ -166,7 +166,7 @@
if (!m_font->ensureCustomFontData(m_familyNameOrURI))
return nullptr;
- return m_font->createFont(fontDescription, m_familyNameOrURI, syntheticBold, syntheticItalic, fontFaceFeatures, fontFaceVariantSettings);
+ return m_font->createFont(fontDescription, m_familyNameOrURI, syntheticBold, syntheticItalic, fontFaceFeatures, fontFaceVariantSettings, fontFaceCapabilities);
}
// In-Document SVG Fonts
@@ -187,7 +187,7 @@
if (!m_inDocumentCustomPlatformData)
return nullptr;
#if PLATFORM(COCOA)
- return Font::create(m_inDocumentCustomPlatformData->fontPlatformData(fontDescription, syntheticBold, syntheticItalic, fontFaceFeatures, fontFaceVariantSettings), true, false);
+ return Font::create(m_inDocumentCustomPlatformData->fontPlatformData(fontDescription, syntheticBold, syntheticItalic, fontFaceFeatures, fontFaceVariantSettings, fontFaceCapabilities), true, false);
#else
return Font::create(m_inDocumentCustomPlatformData->fontPlatformData(fontDescription, syntheticBold, syntheticItalic), true, false);
#endif
Modified: trunk/Source/WebCore/css/CSSFontFaceSource.h (215286 => 215287)
--- trunk/Source/WebCore/css/CSSFontFaceSource.h 2017-04-12 20:47:31 UTC (rev 215286)
+++ trunk/Source/WebCore/css/CSSFontFaceSource.h 2017-04-12 20:54:02 UTC (rev 215287)
@@ -37,6 +37,7 @@
class Font;
struct FontCustomPlatformData;
class FontDescription;
+struct FontSelectionSpecifiedCapabilities;
struct FontVariantSettings;
class SVGFontFaceElement;
class SharedBuffer;
@@ -66,7 +67,7 @@
const AtomicString& familyNameOrURI() const { return m_familyNameOrURI; }
void load(CSSFontSelector&);
- RefPtr<Font> font(const FontDescription&, bool syntheticBold, bool syntheticItalic, const FontFeatureSettings&, const FontVariantSettings&);
+ RefPtr<Font> font(const FontDescription&, bool syntheticBold, bool syntheticItalic, const FontFeatureSettings&, const FontVariantSettings&, FontSelectionSpecifiedCapabilities);
#if ENABLE(SVG_FONTS)
bool isSVGFontFaceSource() const;
Modified: trunk/Source/WebCore/css/CSSFontSelector.cpp (215286 => 215287)
--- trunk/Source/WebCore/css/CSSFontSelector.cpp 2017-04-12 20:47:31 UTC (rev 215286)
+++ trunk/Source/WebCore/css/CSSFontSelector.cpp 2017-04-12 20:54:02 UTC (rev 215287)
@@ -164,15 +164,6 @@
if (!familyList.length())
return;
- if (!fontStyle)
- fontStyle = CSSFontStyleRangeValue::create(CSSValuePool::singleton().createIdentifierValue(CSSValueNormal));
-
- if (!fontWeight)
- fontWeight = CSSValuePool::singleton().createIdentifierValue(CSSValueNormal);
-
- if (!fontStretch)
- fontStretch = CSSValuePool::singleton().createIdentifierValue(CSSValueNormal);
-
CSSValueList* rangeList = downcast<CSSValueList>(unicodeRange.get());
CSSValueList& srcList = downcast<CSSValueList>(*src);
@@ -184,9 +175,12 @@
if (!fontFace->setFamilies(*fontFamily))
return;
- fontFace->setStyle(*fontStyle);
- fontFace->setWeight(*fontWeight);
- fontFace->setStretch(*fontStretch);
+ if (fontStyle)
+ fontFace->setStyle(*fontStyle);
+ if (fontWeight)
+ fontFace->setWeight(*fontWeight);
+ if (fontStretch)
+ fontFace->setStretch(*fontStretch);
if (rangeList && !fontFace->setUnicodeRange(*rangeList))
return;
if (variantLigatures && !fontFace->setVariantLigatures(*variantLigatures))
Modified: trunk/Source/WebCore/loader/cache/CachedFont.cpp (215286 => 215287)
--- trunk/Source/WebCore/loader/cache/CachedFont.cpp 2017-04-12 20:47:31 UTC (rev 215286)
+++ trunk/Source/WebCore/loader/cache/CachedFont.cpp 2017-04-12 20:54:02 UTC (rev 215287)
@@ -122,24 +122,25 @@
return createFontCustomPlatformData(bytes);
}
-RefPtr<Font> CachedFont::createFont(const FontDescription& fontDescription, const AtomicString&, bool syntheticBold, bool syntheticItalic, const FontFeatureSettings& fontFaceFeatures, const FontVariantSettings& fontFaceVariantSettings)
+RefPtr<Font> CachedFont::createFont(const FontDescription& fontDescription, const AtomicString&, bool syntheticBold, bool syntheticItalic, const FontFeatureSettings& fontFaceFeatures, const FontVariantSettings& fontFaceVariantSettings, FontSelectionSpecifiedCapabilities fontFaceCapabilities)
{
- return Font::create(platformDataFromCustomData(fontDescription, syntheticBold, syntheticItalic, fontFaceFeatures, fontFaceVariantSettings), true);
+ return Font::create(platformDataFromCustomData(fontDescription, syntheticBold, syntheticItalic, fontFaceFeatures, fontFaceVariantSettings, fontFaceCapabilities), true);
}
-FontPlatformData CachedFont::platformDataFromCustomData(const FontDescription& fontDescription, bool bold, bool italic, const FontFeatureSettings& fontFaceFeatures, const FontVariantSettings& fontFaceVariantSettings)
+FontPlatformData CachedFont::platformDataFromCustomData(const FontDescription& fontDescription, bool bold, bool italic, const FontFeatureSettings& fontFaceFeatures, const FontVariantSettings& fontFaceVariantSettings, FontSelectionSpecifiedCapabilities fontFaceCapabilities)
{
ASSERT(m_fontCustomPlatformData);
- return platformDataFromCustomData(*m_fontCustomPlatformData, fontDescription, bold, italic, fontFaceFeatures, fontFaceVariantSettings);
+ return platformDataFromCustomData(*m_fontCustomPlatformData, fontDescription, bold, italic, fontFaceFeatures, fontFaceVariantSettings, fontFaceCapabilities);
}
-FontPlatformData CachedFont::platformDataFromCustomData(FontCustomPlatformData& fontCustomPlatformData, const FontDescription& fontDescription, bool bold, bool italic, const FontFeatureSettings& fontFaceFeatures, const FontVariantSettings& fontFaceVariantSettings)
+FontPlatformData CachedFont::platformDataFromCustomData(FontCustomPlatformData& fontCustomPlatformData, const FontDescription& fontDescription, bool bold, bool italic, const FontFeatureSettings& fontFaceFeatures, const FontVariantSettings& fontFaceVariantSettings, FontSelectionSpecifiedCapabilities fontFaceCapabilities)
{
#if PLATFORM(COCOA)
- return fontCustomPlatformData.fontPlatformData(fontDescription, bold, italic, fontFaceFeatures, fontFaceVariantSettings);
+ return fontCustomPlatformData.fontPlatformData(fontDescription, bold, italic, fontFaceFeatures, fontFaceVariantSettings, fontFaceCapabilities);
#else
UNUSED_PARAM(fontFaceFeatures);
UNUSED_PARAM(fontFaceVariantSettings);
+ UNUSED_PARAM(fontFaceCapabilities);
return fontCustomPlatformData.fontPlatformData(fontDescription, bold, italic);
#endif
}
Modified: trunk/Source/WebCore/loader/cache/CachedFont.h (215286 => 215287)
--- trunk/Source/WebCore/loader/cache/CachedFont.h 2017-04-12 20:47:31 UTC (rev 215286)
+++ trunk/Source/WebCore/loader/cache/CachedFont.h 2017-04-12 20:54:02 UTC (rev 215287)
@@ -35,6 +35,7 @@
class CachedResourceLoader;
class FontDescription;
class FontPlatformData;
+struct FontSelectionSpecifiedCapabilities;
class SVGDocument;
class SVGFontElement;
struct FontCustomPlatformData;
@@ -52,12 +53,12 @@
virtual bool ensureCustomFontData(const AtomicString& remoteURI);
static std::unique_ptr<FontCustomPlatformData> createCustomFontData(SharedBuffer&, bool& wrapping);
- static FontPlatformData platformDataFromCustomData(FontCustomPlatformData&, const FontDescription&, bool bold, bool italic, const FontFeatureSettings&, const FontVariantSettings&);
+ static FontPlatformData platformDataFromCustomData(FontCustomPlatformData&, const FontDescription&, bool bold, bool italic, const FontFeatureSettings&, const FontVariantSettings&, FontSelectionSpecifiedCapabilities);
- virtual RefPtr<Font> createFont(const FontDescription&, const AtomicString& remoteURI, bool syntheticBold, bool syntheticItalic, const FontFeatureSettings&, const FontVariantSettings&);
+ virtual RefPtr<Font> createFont(const FontDescription&, const AtomicString& remoteURI, bool syntheticBold, bool syntheticItalic, const FontFeatureSettings&, const FontVariantSettings&, FontSelectionSpecifiedCapabilities);
protected:
- FontPlatformData platformDataFromCustomData(const FontDescription&, bool bold, bool italic, const FontFeatureSettings&, const FontVariantSettings&);
+ FontPlatformData platformDataFromCustomData(const FontDescription&, bool bold, bool italic, const FontFeatureSettings&, const FontVariantSettings&, FontSelectionSpecifiedCapabilities);
bool ensureCustomFontData(SharedBuffer* data);
Modified: trunk/Source/WebCore/loader/cache/CachedSVGFont.cpp (215286 => 215287)
--- trunk/Source/WebCore/loader/cache/CachedSVGFont.cpp 2017-04-12 20:47:31 UTC (rev 215286)
+++ trunk/Source/WebCore/loader/cache/CachedSVGFont.cpp 2017-04-12 20:54:02 UTC (rev 215287)
@@ -52,18 +52,18 @@
{
}
-RefPtr<Font> CachedSVGFont::createFont(const FontDescription& fontDescription, const AtomicString& remoteURI, bool syntheticBold, bool syntheticItalic, const FontFeatureSettings& fontFaceFeatures, const FontVariantSettings& fontFaceVariantSettings)
+RefPtr<Font> CachedSVGFont::createFont(const FontDescription& fontDescription, const AtomicString& remoteURI, bool syntheticBold, bool syntheticItalic, const FontFeatureSettings& fontFaceFeatures, const FontVariantSettings& fontFaceVariantSettings, FontSelectionSpecifiedCapabilities fontFaceCapabilities)
{
if (firstFontFace(remoteURI))
- return CachedFont::createFont(fontDescription, remoteURI, syntheticBold, syntheticItalic, fontFaceFeatures, fontFaceVariantSettings);
+ return CachedFont::createFont(fontDescription, remoteURI, syntheticBold, syntheticItalic, fontFaceFeatures, fontFaceVariantSettings, fontFaceCapabilities);
return nullptr;
}
-FontPlatformData CachedSVGFont::platformDataFromCustomData(const FontDescription& fontDescription, bool bold, bool italic, const FontFeatureSettings& fontFaceFeatures, const FontVariantSettings& fontFaceVariantSettings)
+FontPlatformData CachedSVGFont::platformDataFromCustomData(const FontDescription& fontDescription, bool bold, bool italic, const FontFeatureSettings& fontFaceFeatures, const FontVariantSettings& fontFaceVariantSettings, FontSelectionSpecifiedCapabilities fontFaceCapabilities)
{
if (m_externalSVGDocument)
return FontPlatformData(fontDescription.computedPixelSize(), bold, italic);
- return CachedFont::platformDataFromCustomData(fontDescription, bold, italic, fontFaceFeatures, fontFaceVariantSettings);
+ return CachedFont::platformDataFromCustomData(fontDescription, bold, italic, fontFaceFeatures, fontFaceVariantSettings, fontFaceCapabilities);
}
bool CachedSVGFont::ensureCustomFontData(const AtomicString& remoteURI)
Modified: trunk/Source/WebCore/loader/cache/CachedSVGFont.h (215286 => 215287)
--- trunk/Source/WebCore/loader/cache/CachedSVGFont.h 2017-04-12 20:47:31 UTC (rev 215286)
+++ trunk/Source/WebCore/loader/cache/CachedSVGFont.h 2017-04-12 20:54:02 UTC (rev 215287)
@@ -39,10 +39,10 @@
bool ensureCustomFontData(const AtomicString& remoteURI) override;
- RefPtr<Font> createFont(const FontDescription&, const AtomicString& remoteURI, bool syntheticBold, bool syntheticItalic, const FontFeatureSettings&, const FontVariantSettings&) override;
+ RefPtr<Font> createFont(const FontDescription&, const AtomicString& remoteURI, bool syntheticBold, bool syntheticItalic, const FontFeatureSettings&, const FontVariantSettings&, FontSelectionSpecifiedCapabilities) override;
private:
- FontPlatformData platformDataFromCustomData(const FontDescription&, bool bold, bool italic, const FontFeatureSettings&, const FontVariantSettings&);
+ FontPlatformData platformDataFromCustomData(const FontDescription&, bool bold, bool italic, const FontFeatureSettings&, const FontVariantSettings&, FontSelectionSpecifiedCapabilities);
SVGFontElement* getSVGFontById(const String&) const;
Modified: trunk/Source/WebCore/platform/graphics/FontCache.cpp (215286 => 215287)
--- trunk/Source/WebCore/platform/graphics/FontCache.cpp 2017-04-12 20:47:31 UTC (rev 215286)
+++ trunk/Source/WebCore/platform/graphics/FontCache.cpp 2017-04-12 20:54:02 UTC (rev 215287)
@@ -102,11 +102,12 @@
WTF_MAKE_FAST_ALLOCATED;
public:
FontPlatformDataCacheKey() { }
- FontPlatformDataCacheKey(const AtomicString& family, const FontDescription& description, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings)
+ FontPlatformDataCacheKey(const AtomicString& family, const FontDescription& description, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, FontSelectionSpecifiedCapabilities fontFaceCapabilities)
: m_fontDescriptionKey(description)
, m_family(family)
, m_fontFaceFeatures(fontFaceFeatures ? *fontFaceFeatures : FontFeatureSettings())
, m_fontFaceVariantSettings(fontFaceVariantSettings ? *fontFaceVariantSettings : FontVariantSettings())
+ , m_fontFaceCapabilities(fontFaceCapabilities)
{ }
explicit FontPlatformDataCacheKey(HashTableDeletedValueType t)
@@ -119,7 +120,8 @@
{
if (m_fontDescriptionKey != other.m_fontDescriptionKey
|| m_fontFaceFeatures != other.m_fontFaceFeatures
- || m_fontFaceVariantSettings != other.m_fontFaceVariantSettings)
+ || m_fontFaceVariantSettings != other.m_fontFaceVariantSettings
+ || m_fontFaceCapabilities != other.m_fontFaceCapabilities)
return false;
if (m_family.impl() == other.m_family.impl())
return true;
@@ -132,6 +134,7 @@
AtomicString m_family;
FontFeatureSettings m_fontFaceFeatures;
FontVariantSettings m_fontFaceVariantSettings;
+ FontSelectionSpecifiedCapabilities m_fontFaceCapabilities;
};
struct FontPlatformDataCacheKeyHash {
@@ -142,6 +145,18 @@
hasher.add(fontKey.m_fontDescriptionKey.computeHash());
hasher.add(fontKey.m_fontFaceFeatures.hash());
hasher.add(fontKey.m_fontFaceVariantSettings.uniqueValue());
+ if (auto weight = fontKey.m_fontFaceCapabilities.weight)
+ hasher.add(weight->uniqueValue());
+ else
+ hasher.add(std::numeric_limits<unsigned>::max());
+ if (auto width = fontKey.m_fontFaceCapabilities.weight)
+ hasher.add(width->uniqueValue());
+ else
+ hasher.add(std::numeric_limits<unsigned>::max());
+ if (auto slope = fontKey.m_fontFaceCapabilities.weight)
+ hasher.add(slope->uniqueValue());
+ else
+ hasher.add(std::numeric_limits<unsigned>::max());
return hasher.hash();
}
@@ -153,8 +168,12 @@
static const bool safeToCompareToEmptyOrDeleted = true;
};
-typedef HashMap<FontPlatformDataCacheKey, std::unique_ptr<FontPlatformData>, FontPlatformDataCacheKeyHash, WTF::SimpleClassHashTraits<FontPlatformDataCacheKey>> FontPlatformDataCache;
+struct FontPlatformDataCacheKeyHashTraits : public SimpleClassHashTraits<FontPlatformDataCacheKey> {
+ static const bool emptyValueIsZero = false;
+};
+typedef HashMap<FontPlatformDataCacheKey, std::unique_ptr<FontPlatformData>, FontPlatformDataCacheKeyHash, FontPlatformDataCacheKeyHashTraits> FontPlatformDataCache;
+
static FontPlatformDataCache& fontPlatformDataCache()
{
static NeverDestroyed<FontPlatformDataCache> cache;
@@ -210,7 +229,7 @@
}
FontPlatformData* FontCache::getCachedFontPlatformData(const FontDescription& fontDescription, const AtomicString& passedFamilyName,
- const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, bool checkingAlternateName)
+ const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, FontSelectionSpecifiedCapabilities fontFaceCapabilities, bool checkingAlternateName)
{
#if PLATFORM(IOS)
FontLocker fontLocker;
@@ -232,12 +251,12 @@
initialized = true;
}
- FontPlatformDataCacheKey key(familyName, fontDescription, fontFaceFeatures, fontFaceVariantSettings);
+ FontPlatformDataCacheKey key(familyName, fontDescription, fontFaceFeatures, fontFaceVariantSettings, fontFaceCapabilities);
auto addResult = fontPlatformDataCache().add(key, nullptr);
FontPlatformDataCache::iterator it = addResult.iterator;
if (addResult.isNewEntry) {
- it->value = createFontPlatformData(fontDescription, familyName, fontFaceFeatures, fontFaceVariantSettings);
+ it->value = createFontPlatformData(fontDescription, familyName, fontFaceFeatures, fontFaceVariantSettings, fontFaceCapabilities);
if (!it->value && !checkingAlternateName) {
// We were unable to find a font. We have a small set of fonts that we alias to other names,
@@ -244,7 +263,7 @@
// e.g., Arial/Helvetica, Courier/Courier New, etc. Try looking up the font under the aliased name.
const AtomicString& alternateName = alternateFamilyName(familyName);
if (!alternateName.isNull()) {
- FontPlatformData* fontPlatformDataForAlternateName = getCachedFontPlatformData(fontDescription, alternateName, fontFaceFeatures, fontFaceVariantSettings, true);
+ FontPlatformData* fontPlatformDataForAlternateName = getCachedFontPlatformData(fontDescription, alternateName, fontFaceFeatures, fontFaceVariantSettings, fontFaceCapabilities, true);
// Lookup the key in the hash table again as the previous iterator may have
// been invalidated by the recursive call to getCachedFontPlatformData().
it = fontPlatformDataCache().find(key);
@@ -326,12 +345,12 @@
const unsigned cMaxUnderMemoryPressureInactiveFontData = 50;
const unsigned cTargetUnderMemoryPressureInactiveFontData = 30;
-RefPtr<Font> FontCache::fontForFamily(const FontDescription& fontDescription, const AtomicString& family, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, bool checkingAlternateName)
+RefPtr<Font> FontCache::fontForFamily(const FontDescription& fontDescription, const AtomicString& family, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, FontSelectionSpecifiedCapabilities fontFaceCapabilities, bool checkingAlternateName)
{
if (!m_purgeTimer.isActive())
m_purgeTimer.startOneShot(0_s);
- FontPlatformData* platformData = getCachedFontPlatformData(fontDescription, family, fontFaceFeatures, fontFaceVariantSettings, checkingAlternateName);
+ FontPlatformData* platformData = getCachedFontPlatformData(fontDescription, family, fontFaceFeatures, fontFaceVariantSettings, fontFaceCapabilities, checkingAlternateName);
if (!platformData)
return nullptr;
Modified: trunk/Source/WebCore/platform/graphics/FontCache.h (215286 => 215287)
--- trunk/Source/WebCore/platform/graphics/FontCache.h 2017-04-12 20:47:31 UTC (rev 215286)
+++ trunk/Source/WebCore/platform/graphics/FontCache.h 2017-04-12 20:54:02 UTC (rev 215287)
@@ -200,7 +200,7 @@
// It comes into play when you create an @font-face which shares a family name as a preinstalled font.
Vector<FontSelectionCapabilities> getFontSelectionCapabilitiesInFamily(const AtomicString&);
- WEBCORE_EXPORT RefPtr<Font> fontForFamily(const FontDescription&, const AtomicString&, const FontFeatureSettings* fontFaceFeatures = nullptr, const FontVariantSettings* fontFaceVariantSettings = nullptr, bool checkingAlternateName = false);
+ WEBCORE_EXPORT RefPtr<Font> fontForFamily(const FontDescription&, const AtomicString&, const FontFeatureSettings* fontFaceFeatures = nullptr, const FontVariantSettings* fontFaceVariantSettings = nullptr, FontSelectionSpecifiedCapabilities fontFaceCapabilities = { }, bool checkingAlternateName = false);
WEBCORE_EXPORT Ref<Font> lastResortFallbackFont(const FontDescription&);
Ref<Font> lastResortFallbackFontForEveryCharacter(const FontDescription&);
WEBCORE_EXPORT Ref<Font> fontForPlatformData(const FontPlatformData&);
@@ -234,13 +234,13 @@
WEBCORE_EXPORT void purgeInactiveFontDataIfNeeded();
// FIXME: This method should eventually be removed.
- FontPlatformData* getCachedFontPlatformData(const FontDescription&, const AtomicString& family, const FontFeatureSettings* fontFaceFeatures = nullptr, const FontVariantSettings* fontFaceVariantSettings = nullptr, bool checkingAlternateName = false);
+ FontPlatformData* getCachedFontPlatformData(const FontDescription&, const AtomicString& family, const FontFeatureSettings* fontFaceFeatures = nullptr, const FontVariantSettings* fontFaceVariantSettings = nullptr, FontSelectionSpecifiedCapabilities fontFaceCapabilities = { }, bool checkingAlternateName = false);
// These methods are implemented by each platform.
#if PLATFORM(COCOA)
FontPlatformData* getCustomFallbackFont(const UInt32, const FontDescription&);
#endif
- WEBCORE_EXPORT std::unique_ptr<FontPlatformData> createFontPlatformData(const FontDescription&, const AtomicString& family, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings);
+ WEBCORE_EXPORT std::unique_ptr<FontPlatformData> createFontPlatformData(const FontDescription&, const AtomicString& family, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, FontSelectionSpecifiedCapabilities fontFaceCapabilities);
static const AtomicString& alternateFamilyName(const AtomicString&);
static const AtomicString& platformAlternateFamilyName(const AtomicString&);
@@ -255,7 +255,7 @@
inline std::unique_ptr<FontPlatformData> FontCache::createFontPlatformDataForTesting(const FontDescription& fontDescription, const AtomicString& family)
{
- return createFontPlatformData(fontDescription, family, nullptr, nullptr);
+ return createFontPlatformData(fontDescription, family, nullptr, nullptr, { });
}
#if PLATFORM(COCOA)
@@ -276,7 +276,7 @@
bool needsSyntheticOblique;
};
-RetainPtr<CTFontRef> preparePlatformFont(CTFontRef, TextRenderingMode, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, const FontFeatureSettings& features, const FontVariantSettings&, FontSelectionRequest, const FontVariationSettings&, FontOpticalSizing, float size);
+RetainPtr<CTFontRef> preparePlatformFont(CTFontRef, TextRenderingMode, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, FontSelectionSpecifiedCapabilities fontFaceCapabilities, const FontFeatureSettings& features, const FontVariantSettings&, FontSelectionRequest, const FontVariationSettings&, FontOpticalSizing, float size);
SynthesisPair computeNecessarySynthesis(CTFontRef, const FontDescription&, bool isPlatformFont = false);
RetainPtr<CTFontRef> platformFontWithFamilySpecialCase(const AtomicString& family, FontSelectionRequest, float size);
RetainPtr<CTFontRef> platformFontWithFamily(const AtomicString& family, FontSelectionRequest, TextRenderingMode, float size);
Modified: trunk/Source/WebCore/platform/graphics/FontSelectionAlgorithm.h (215286 => 215287)
--- trunk/Source/WebCore/platform/graphics/FontSelectionAlgorithm.h 2017-04-12 20:47:31 UTC (rev 215286)
+++ trunk/Source/WebCore/platform/graphics/FontSelectionAlgorithm.h 2017-04-12 20:54:02 UTC (rev 215287)
@@ -312,6 +312,11 @@
return target >= minimum && target <= maximum;
}
+ uint32_t uniqueValue() const
+ {
+ return minimum.rawValue() << 16 | maximum.rawValue();
+ }
+
FontSelectionValue minimum { FontSelectionValue(1) };
FontSelectionValue maximum { FontSelectionValue(0) };
};
@@ -394,6 +399,17 @@
};
struct FontSelectionCapabilities {
+ FontSelectionCapabilities()
+ {
+ }
+
+ FontSelectionCapabilities(FontSelectionRange weight, FontSelectionRange width, FontSelectionRange slope)
+ : weight(weight)
+ , width(width)
+ , slope(slope)
+ {
+ }
+
void expand(const FontSelectionCapabilities& capabilities)
{
weight.expand(capabilities.weight);
@@ -401,11 +417,69 @@
slope.expand(capabilities.slope);
}
+ bool operator==(const FontSelectionCapabilities& other) const
+ {
+ return weight == other.weight
+ && width == other.width
+ && slope == other.slope;
+ }
+
+ bool operator!=(const FontSelectionCapabilities& other) const
+ {
+ return !(*this == other);
+ }
+
FontSelectionRange weight { normalWeightValue(), normalWeightValue() };
FontSelectionRange width { normalStretchValue(), normalStretchValue() };
FontSelectionRange slope { normalItalicValue(), normalItalicValue() };
};
+struct FontSelectionSpecifiedCapabilities {
+ FontSelectionCapabilities computeFontSelectionCapabilities() const
+ {
+ return FontSelectionCapabilities(computeWeight(), computeWidth(), computeSlope());
+ }
+
+ bool operator==(const FontSelectionSpecifiedCapabilities& other) const
+ {
+ return weight == other.weight
+ && width == other.width
+ && slope == other.slope;
+ }
+
+ bool operator!=(const FontSelectionSpecifiedCapabilities& other) const
+ {
+ return !(*this == other);
+ }
+
+ FontSelectionSpecifiedCapabilities& operator=(const FontSelectionCapabilities& other)
+ {
+ weight = other.weight;
+ width = other.width;
+ slope = other.slope;
+ return *this;
+ }
+
+ FontSelectionRange computeWeight() const
+ {
+ return weight.value_or(FontSelectionRange({ normalWeightValue(), normalWeightValue() }));
+ }
+
+ FontSelectionRange computeWidth() const
+ {
+ return width.value_or(FontSelectionRange({ normalStretchValue(), normalStretchValue() }));
+ }
+
+ FontSelectionRange computeSlope() const
+ {
+ return slope.value_or(FontSelectionRange({ normalItalicValue(), normalItalicValue() }));
+ }
+
+ std::optional<FontSelectionRange> weight;
+ std::optional<FontSelectionRange> width;
+ std::optional<FontSelectionRange> slope;
+};
+
class FontSelectionAlgorithm {
public:
FontSelectionAlgorithm() = delete;
Modified: trunk/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp (215286 => 215287)
--- trunk/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp 2017-04-12 20:47:31 UTC (rev 215286)
+++ trunk/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp 2017-04-12 20:54:02 UTC (rev 215287)
@@ -497,7 +497,7 @@
}
#endif
-RetainPtr<CTFontRef> preparePlatformFont(CTFontRef originalFont, TextRenderingMode textRenderingMode, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, const FontFeatureSettings& features, const FontVariantSettings& variantSettings, FontSelectionRequest fontSelectionRequest, const FontVariationSettings& variations, FontOpticalSizing fontOpticalSizing, float size)
+RetainPtr<CTFontRef> preparePlatformFont(CTFontRef originalFont, TextRenderingMode textRenderingMode, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, FontSelectionSpecifiedCapabilities fontFaceCapabilities, const FontFeatureSettings& features, const FontVariantSettings& variantSettings, FontSelectionRequest fontSelectionRequest, const FontVariationSettings& variations, FontOpticalSizing fontOpticalSizing, float size)
{
bool alwaysAddVariations = false;
@@ -508,6 +508,7 @@
#else
UNUSED_PARAM(fontSelectionRequest);
UNUSED_PARAM(fontOpticalSizing);
+ UNUSED_PARAM(fontFaceCapabilities);
UNUSED_PARAM(size);
#endif
@@ -578,6 +579,12 @@
float weight = fontSelectionRequest.weight;
float width = fontSelectionRequest.width;
float slope = fontSelectionRequest.slope;
+ if (auto weightValue = fontFaceCapabilities.weight)
+ weight = std::max(std::min(weight, static_cast<float>(weightValue->maximum)), static_cast<float>(weightValue->minimum));
+ if (auto widthValue = fontFaceCapabilities.width)
+ width = std::max(std::min(width, static_cast<float>(widthValue->maximum)), static_cast<float>(widthValue->minimum));
+ if (auto slopeValue = fontFaceCapabilities.weight)
+ slope = std::max(std::min(slope, static_cast<float>(slopeValue->maximum)), static_cast<float>(slopeValue->minimum));
if (needsConversion) {
weight = denormalizeWeight(weight);
width = denormalizeVariationWidth(width);
@@ -1155,7 +1162,7 @@
FontCache::singleton().invalidate();
}
-static RetainPtr<CTFontRef> fontWithFamily(const AtomicString& family, FontSelectionRequest request, const FontFeatureSettings& featureSettings, const FontVariantSettings& variantSettings, const FontVariationSettings& variationSettings, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, const TextRenderingMode& textRenderingMode, FontSelectionRequest fontSelectionRequest, FontOpticalSizing fontOpticalSizing, float size)
+static RetainPtr<CTFontRef> fontWithFamily(const AtomicString& family, FontSelectionRequest request, const FontFeatureSettings& featureSettings, const FontVariantSettings& variantSettings, const FontVariationSettings& variationSettings, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, FontSelectionSpecifiedCapabilities fontFaceCapabilities, const TextRenderingMode& textRenderingMode, FontSelectionRequest fontSelectionRequest, FontOpticalSizing fontOpticalSizing, float size)
{
if (family.isEmpty())
return nullptr;
@@ -1163,7 +1170,7 @@
auto foundFont = platformFontWithFamilySpecialCase(family, request, size);
if (!foundFont)
foundFont = platformFontLookupWithFamily(family, request, size);
- return preparePlatformFont(foundFont.get(), textRenderingMode, fontFaceFeatures, fontFaceVariantSettings, featureSettings, variantSettings, fontSelectionRequest, variationSettings, fontOpticalSizing, size);
+ return preparePlatformFont(foundFont.get(), textRenderingMode, fontFaceFeatures, fontFaceVariantSettings, fontFaceCapabilities, featureSettings, variantSettings, fontSelectionRequest, variationSettings, fontOpticalSizing, size);
}
#if PLATFORM(MAC)
@@ -1198,11 +1205,11 @@
}
#endif
-std::unique_ptr<FontPlatformData> FontCache::createFontPlatformData(const FontDescription& fontDescription, const AtomicString& family, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings)
+std::unique_ptr<FontPlatformData> FontCache::createFontPlatformData(const FontDescription& fontDescription, const AtomicString& family, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, FontSelectionSpecifiedCapabilities fontFaceCapabilities)
{
float size = fontDescription.computedPixelSize();
- auto font = fontWithFamily(family, fontDescription.fontSelectionRequest(), fontDescription.featureSettings(), fontDescription.variantSettings(), fontDescription.variationSettings(), fontFaceFeatures, fontFaceVariantSettings, fontDescription.textRenderingMode(), fontDescription.fontSelectionRequest(), fontDescription.opticalSizing(), size);
+ auto font = fontWithFamily(family, fontDescription.fontSelectionRequest(), fontDescription.featureSettings(), fontDescription.variantSettings(), fontDescription.variationSettings(), fontFaceFeatures, fontFaceVariantSettings, fontFaceCapabilities, fontDescription.textRenderingMode(), fontDescription.fontSelectionRequest(), fontDescription.opticalSizing(), size);
#if PLATFORM(MAC)
if (!font) {
@@ -1213,7 +1220,7 @@
// Ignore the result because we want to use our own algorithm to actually find the font.
autoActivateFont(family.string(), size);
- font = fontWithFamily(family, fontDescription.fontSelectionRequest(), fontDescription.featureSettings(), fontDescription.variantSettings(), fontDescription.variationSettings(), fontFaceFeatures, fontFaceVariantSettings, fontDescription.textRenderingMode(), fontDescription.fontSelectionRequest(), fontDescription.opticalSizing(), size);
+ font = fontWithFamily(family, fontDescription.fontSelectionRequest(), fontDescription.featureSettings(), fontDescription.variantSettings(), fontDescription.variationSettings(), fontFaceFeatures, fontFaceVariantSettings, fontFaceCapabilities, fontDescription.textRenderingMode(), fontDescription.fontSelectionRequest(), fontDescription.opticalSizing(), size);
}
#endif
@@ -1301,7 +1308,7 @@
const FontPlatformData& platformData = originalFontData->platformData();
auto result = lookupFallbackFont(platformData.font(), description.weight(), description.locale(), characters, length);
- result = preparePlatformFont(result.get(), description.textRenderingMode(), nullptr, nullptr, description.featureSettings(), description.variantSettings(), description.fontSelectionRequest(), description.variationSettings(), description.opticalSizing(), description.computedSize());
+ result = preparePlatformFont(result.get(), description.textRenderingMode(), nullptr, nullptr, { }, description.featureSettings(), description.variantSettings(), description.fontSelectionRequest(), description.variationSettings(), description.opticalSizing(), description.computedSize());
if (!result)
return lastResortFallbackFont(description);
Modified: trunk/Source/WebCore/platform/graphics/freetype/FontCacheFreeType.cpp (215286 => 215287)
--- trunk/Source/WebCore/platform/graphics/freetype/FontCacheFreeType.cpp 2017-04-12 20:47:31 UTC (rev 215286)
+++ trunk/Source/WebCore/platform/graphics/freetype/FontCacheFreeType.cpp 2017-04-12 20:54:02 UTC (rev 215287)
@@ -324,7 +324,7 @@
|| equalLettersIgnoringASCIICase(familyNameString, "cursive");
}
-std::unique_ptr<FontPlatformData> FontCache::createFontPlatformData(const FontDescription& fontDescription, const AtomicString& family, const FontFeatureSettings*, const FontVariantSettings*)
+std::unique_ptr<FontPlatformData> FontCache::createFontPlatformData(const FontDescription& fontDescription, const AtomicString& family, const FontFeatureSettings*, const FontVariantSettings*, FontSelectionSpecifiedCapabilities)
{
// The CSS font matching algorithm (http://www.w3.org/TR/css3-fonts/#font-matching-algorithm)
// says that we must find an exact match for font family, slant (italic or oblique can be used)
Modified: trunk/Source/WebCore/platform/graphics/mac/FontCacheMac.mm (215286 => 215287)
--- trunk/Source/WebCore/platform/graphics/mac/FontCacheMac.mm 2017-04-12 20:47:31 UTC (rev 215286)
+++ trunk/Source/WebCore/platform/graphics/mac/FontCacheMac.mm 2017-04-12 20:54:02 UTC (rev 215287)
@@ -125,7 +125,7 @@
// the user doesn't have it, we fall back on Lucida Grande because that's
// guaranteed to be there, according to Nathan Taylor. This is good enough
// to avoid a crash at least.
- return *fontForFamily(fontDescription, AtomicString("Lucida Grande", AtomicString::ConstructFromLiteral), nullptr, nullptr, false);
+ return *fontForFamily(fontDescription, AtomicString("Lucida Grande", AtomicString::ConstructFromLiteral), nullptr, nullptr, { }, false);
}
#endif // PLATFORM(MAC)
Modified: trunk/Source/WebCore/platform/graphics/mac/FontCustomPlatformData.cpp (215286 => 215287)
--- trunk/Source/WebCore/platform/graphics/mac/FontCustomPlatformData.cpp 2017-04-12 20:47:31 UTC (rev 215286)
+++ trunk/Source/WebCore/platform/graphics/mac/FontCustomPlatformData.cpp 2017-04-12 20:54:02 UTC (rev 215287)
@@ -34,13 +34,13 @@
{
}
-FontPlatformData FontCustomPlatformData::fontPlatformData(const FontDescription& fontDescription, bool bold, bool italic, const FontFeatureSettings& fontFaceFeatures, const FontVariantSettings& fontFaceVariantSettings)
+FontPlatformData FontCustomPlatformData::fontPlatformData(const FontDescription& fontDescription, bool bold, bool italic, const FontFeatureSettings& fontFaceFeatures, const FontVariantSettings& fontFaceVariantSettings, FontSelectionSpecifiedCapabilities fontFaceCapabilities)
{
int size = fontDescription.computedPixelSize();
FontOrientation orientation = fontDescription.orientation();
FontWidthVariant widthVariant = fontDescription.widthVariant();
RetainPtr<CTFontRef> font = adoptCF(CTFontCreateWithFontDescriptor(m_fontDescriptor.get(), size, nullptr));
- font = preparePlatformFont(font.get(), fontDescription.textRenderingMode(), &fontFaceFeatures, &fontFaceVariantSettings, fontDescription.featureSettings(), fontDescription.variantSettings(), fontDescription.fontSelectionRequest(), fontDescription.variationSettings(), fontDescription.opticalSizing(), fontDescription.computedSize());
+ font = preparePlatformFont(font.get(), fontDescription.textRenderingMode(), &fontFaceFeatures, &fontFaceVariantSettings, fontFaceCapabilities, fontDescription.featureSettings(), fontDescription.variantSettings(), fontDescription.fontSelectionRequest(), fontDescription.variationSettings(), fontDescription.opticalSizing(), fontDescription.computedSize());
ASSERT(font);
return FontPlatformData(font.get(), size, bold, italic, orientation, widthVariant, fontDescription.textRenderingMode());
}
Modified: trunk/Source/WebCore/platform/graphics/mac/FontCustomPlatformData.h (215286 => 215287)
--- trunk/Source/WebCore/platform/graphics/mac/FontCustomPlatformData.h 2017-04-12 20:47:31 UTC (rev 215286)
+++ trunk/Source/WebCore/platform/graphics/mac/FontCustomPlatformData.h 2017-04-12 20:54:02 UTC (rev 215287)
@@ -34,6 +34,7 @@
class FontDescription;
class FontPlatformData;
+struct FontSelectionSpecifiedCapabilities;
class SharedBuffer;
template <typename T> class FontTaggedSettings;
@@ -49,7 +50,7 @@
~FontCustomPlatformData();
- FontPlatformData fontPlatformData(const FontDescription&, bool bold, bool italic, const FontFeatureSettings& fontFaceFeatures, const FontVariantSettings& fontFaceVariantSettings);
+ FontPlatformData fontPlatformData(const FontDescription&, bool bold, bool italic, const FontFeatureSettings& fontFaceFeatures, const FontVariantSettings& fontFaceVariantSettings, FontSelectionSpecifiedCapabilities fontFaceCapabilities);
static bool supportsFormat(const String&);
Modified: trunk/Source/WebCore/platform/graphics/win/FontCacheWin.cpp (215286 => 215287)
--- trunk/Source/WebCore/platform/graphics/win/FontCacheWin.cpp 2017-04-12 20:47:31 UTC (rev 215286)
+++ trunk/Source/WebCore/platform/graphics/win/FontCacheWin.cpp 2017-04-12 20:54:02 UTC (rev 215287)
@@ -611,7 +611,7 @@
return result;
}
-std::unique_ptr<FontPlatformData> FontCache::createFontPlatformData(const FontDescription& fontDescription, const AtomicString& family, const FontFeatureSettings*, const FontVariantSettings*)
+std::unique_ptr<FontPlatformData> FontCache::createFontPlatformData(const FontDescription& fontDescription, const AtomicString& family, const FontFeatureSettings*, const FontVariantSettings*, FontSelectionSpecifiedCapabilities)
{
bool isLucidaGrande = equalLettersIgnoringASCIICase(family, "lucida grande");