Changeset 213505 in webkit


Ignore:
Timestamp:
Mar 6, 2017 11:30:27 PM (7 years ago)
Author:
mmaxfield@apple.com
Message:

Apply well-known-axis variation values at the right time in preparePlatformFont()
https://bugs.webkit.org/show_bug.cgi?id=168896

Reviewed by Jon Lee.

Source/WebCore:

Simply plumb the FontSelectionRequest to the place where font variations are implemented.

Test: fast/text/variations/font-selection-properties.html

  • platform/graphics/FontCache.h:
  • platform/graphics/cocoa/FontCacheCoreText.cpp:

(WebCore::preparePlatformFont):
(WebCore::fontWithFamily):
(WebCore::FontCache::createFontPlatformData):
(WebCore::FontCache::systemFallbackForCharacters):

  • platform/graphics/mac/FontCustomPlatformData.cpp:

(WebCore::FontCustomPlatformData::fontPlatformData):

LayoutTests:

  • fast/text/variations/font-selection-properties-expected.html: Added.
  • fast/text/variations/font-selection-properties.html: Added.
Location:
trunk
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r213501 r213505  
     12017-03-06  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        Apply well-known-axis variation values at the right time in preparePlatformFont()
     4        https://bugs.webkit.org/show_bug.cgi?id=168896
     5
     6        Reviewed by Jon Lee.
     7
     8        * fast/text/variations/font-selection-properties-expected.html: Added.
     9        * fast/text/variations/font-selection-properties.html: Added.
     10
    1112017-03-06  Brent Fulgham  <bfulgham@apple.com>
    212
  • trunk/Source/WebCore/ChangeLog

    r213502 r213505  
     12017-03-06  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        Apply well-known-axis variation values at the right time in preparePlatformFont()
     4        https://bugs.webkit.org/show_bug.cgi?id=168896
     5
     6        Reviewed by Jon Lee.
     7
     8        Simply plumb the FontSelectionRequest to the place where font variations are implemented.
     9
     10        Test: fast/text/variations/font-selection-properties.html
     11
     12        * platform/graphics/FontCache.h:
     13        * platform/graphics/cocoa/FontCacheCoreText.cpp:
     14        (WebCore::preparePlatformFont):
     15        (WebCore::fontWithFamily):
     16        (WebCore::FontCache::createFontPlatformData):
     17        (WebCore::FontCache::systemFallbackForCharacters):
     18        * platform/graphics/mac/FontCustomPlatformData.cpp:
     19        (WebCore::FontCustomPlatformData::fontPlatformData):
     20
    1212017-03-06  Myles C. Maxfield  <mmaxfield@apple.com>
    222
  • trunk/Source/WebCore/platform/graphics/FontCache.h

    r213502 r213505  
    276276};
    277277
    278 RetainPtr<CTFontRef> preparePlatformFont(CTFontRef, TextRenderingMode, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, const FontFeatureSettings& features, const FontVariantSettings&, const FontVariationSettings&);
     278RetainPtr<CTFontRef> preparePlatformFont(CTFontRef, TextRenderingMode, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, const FontFeatureSettings& features, const FontVariantSettings&, FontSelectionRequest, const FontVariationSettings&);
    279279SynthesisPair computeNecessarySynthesis(CTFontRef, const FontDescription&, bool isPlatformFont = false);
    280280RetainPtr<CTFontRef> platformFontWithFamilySpecialCase(const AtomicString& family, FontSelectionRequest, float size);
  • trunk/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp

    r213502 r213505  
    423423
    424424#define WORKAROUND_CORETEXT_VARIATIONS_UNSPECIFIED_VALUE_BUG ((PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101300) || (PLATFORM(IOS) && __IPHONE_OS_VERSION_MIN_REQUIRED < 110000))
    425 #if ENABLE(VARIATION_FONTS) && WORKAROUND_CORETEXT_VARIATIONS_UNSPECIFIED_VALUE_BUG
     425#if ENABLE(VARIATION_FONTS) && (PLATFORM(IOS) || WORKAROUND_CORETEXT_VARIATIONS_UNSPECIFIED_VALUE_BUG)
    426426static inline bool fontIsSystemFont(CTFontRef font)
    427427{
     
    433433#endif
    434434
    435 RetainPtr<CTFontRef> preparePlatformFont(CTFontRef originalFont, TextRenderingMode textRenderingMode, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, const FontFeatureSettings& features, const FontVariantSettings& variantSettings, const FontVariationSettings& variations)
     435RetainPtr<CTFontRef> preparePlatformFont(CTFontRef originalFont, TextRenderingMode textRenderingMode, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, const FontFeatureSettings& features, const FontVariantSettings& variantSettings, FontSelectionRequest fontSelectionRequest, const FontVariationSettings& variations)
    436436{
    437437    bool alwaysAddVariations = false;
     
    440440#if ENABLE(VARIATION_FONTS)
    441441    auto defaultValues = defaultVariationValues(originalFont);
    442 #if WORKAROUND_CORETEXT_VARIATIONS_UNSPECIFIED_VALUE_BUG
    443442    alwaysAddVariations = !defaultValues.isEmpty();
    444 #endif
     443#else
     444    UNUSED_PARAM(fontSelectionRequest);
    445445#endif
    446446
     
    497497    };
    498498
    499     for (auto& newVariation : variations) {
    500         auto iterator = defaultValues.find(newVariation.tag());
     499    auto applyVariation = [&](const FontTag& tag, float value) {
     500        auto iterator = defaultValues.find(tag);
    501501        if (iterator == defaultValues.end())
    502             continue;
    503         float valueToApply = clampTo(newVariation.value(), iterator->value.minimumValue, iterator->value.maximumValue);
     502            return;
     503        float valueToApply = clampTo(value, iterator->value.minimumValue, iterator->value.maximumValue);
    504504        bool isDefaultValue = valueToApply == iterator->value.defaultValue;
    505         applyVariationValue(newVariation.tag(), valueToApply, isDefaultValue);
    506     }
     505        applyVariationValue(tag, valueToApply, isDefaultValue);
     506    };
     507
     508#if PLATFORM(IOS)
     509    // The system font is somewhat magical. Don't mess with its variations.
     510    if (!fontIsSystemFont(originalFont))
     511#endif
     512    {
     513        applyVariation({{'w', 'g', 'h', 't'}}, static_cast<float>(fontSelectionRequest.weight));
     514        applyVariation({{'w', 'd', 't', 'h'}}, static_cast<float>(fontSelectionRequest.width));
     515        applyVariation({{'s', 'l', 'n', 't'}}, static_cast<float>(fontSelectionRequest.slope));
     516    }
     517    for (auto& newVariation : variations)
     518        applyVariation(newVariation.tag(), newVariation.value());
    507519
    508520#if WORKAROUND_CORETEXT_VARIATIONS_UNSPECIFIED_VALUE_BUG
     
    952964}
    953965
    954 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, float size)
     966static 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, float size)
    955967{
    956968    if (family.isEmpty())
     
    960972    if (!foundFont)
    961973        foundFont = platformFontLookupWithFamily(family, request, size);
    962     return preparePlatformFont(foundFont.get(), textRenderingMode, fontFaceFeatures, fontFaceVariantSettings, featureSettings, variantSettings, variationSettings);
     974    return preparePlatformFont(foundFont.get(), textRenderingMode, fontFaceFeatures, fontFaceVariantSettings, featureSettings, variantSettings, fontSelectionRequest, variationSettings);
    963975}
    964976
     
    9991011    float size = fontDescription.computedPixelSize();
    10001012
    1001     auto font = fontWithFamily(family, fontDescription.fontSelectionRequest(), fontDescription.featureSettings(), fontDescription.variantSettings(), fontDescription.variationSettings(), fontFaceFeatures, fontFaceVariantSettings, fontDescription.textRenderingMode(), size);
     1013    auto font = fontWithFamily(family, fontDescription.fontSelectionRequest(), fontDescription.featureSettings(), fontDescription.variantSettings(), fontDescription.variationSettings(), fontFaceFeatures, fontFaceVariantSettings, fontDescription.textRenderingMode(), fontDescription.fontSelectionRequest(), size);
    10021014
    10031015#if PLATFORM(MAC)
     
    10101022        autoActivateFont(family.string(), size);
    10111023
    1012         font = fontWithFamily(family, fontDescription.fontSelectionRequest(), fontDescription.featureSettings(), fontDescription.variantSettings(), fontDescription.variationSettings(), fontFaceFeatures, fontFaceVariantSettings, fontDescription.textRenderingMode(), size);
     1024        font = fontWithFamily(family, fontDescription.fontSelectionRequest(), fontDescription.featureSettings(), fontDescription.variantSettings(), fontDescription.variationSettings(), fontFaceFeatures, fontFaceVariantSettings, fontDescription.textRenderingMode(), fontDescription.fontSelectionRequest(), size);
    10131025    }
    10141026#endif
     
    10981110    const FontPlatformData& platformData = originalFontData->platformData();
    10991111    auto result = lookupFallbackFont(platformData.font(), description.weight(), description.locale(), characters, length);
    1100     result = preparePlatformFont(result.get(), description.textRenderingMode(), nullptr, nullptr, description.featureSettings(), description.variantSettings(), description.variationSettings());
     1112    result = preparePlatformFont(result.get(), description.textRenderingMode(), nullptr, nullptr, description.featureSettings(), description.variantSettings(), description.fontSelectionRequest(), description.variationSettings());
    11011113    if (!result)
    11021114        return lastResortFallbackFont(description);
  • trunk/Source/WebCore/platform/graphics/mac/FontCustomPlatformData.cpp

    r206761 r213505  
    4141    FontWidthVariant widthVariant = fontDescription.widthVariant();
    4242    RetainPtr<CTFontRef> font = adoptCF(CTFontCreateWithFontDescriptor(m_fontDescriptor.get(), size, nullptr));
    43     font = preparePlatformFont(font.get(), fontDescription.textRenderingMode(), &fontFaceFeatures, &fontFaceVariantSettings, fontDescription.featureSettings(), fontDescription.variantSettings(), fontDescription.variationSettings());
     43    font = preparePlatformFont(font.get(), fontDescription.textRenderingMode(), &fontFaceFeatures, &fontFaceVariantSettings, fontDescription.featureSettings(), fontDescription.variantSettings(), fontDescription.fontSelectionRequest(), fontDescription.variationSettings());
    4444    ASSERT(font);
    4545    return FontPlatformData(font.get(), size, bold, italic, orientation, widthVariant, fontDescription.textRenderingMode());
  • trunk/Source/WebCore/platform/spi/cocoa/CoreTextSPI.h

    r213163 r213505  
    126126CTFontRef CTFontCreatePhysicalFontForCharactersWithLanguage(CTFontRef, const UTF16Char* characters, CFIndex length, CFStringRef language, CFIndex* coveredLength);
    127127bool CTFontIsAppleColorEmoji(CTFontRef);
    128 bool CTFontDescriptorIsSystemUIFont(CTFontDescriptorRef);
    129128CTFontRef CTFontCreateForCharacters(CTFontRef currentFont, const UTF16Char *characters, CFIndex length, CFIndex *coveredLength);
    130129
Note: See TracChangeset for help on using the changeset viewer.