Changeset 213505 in webkit
- Timestamp:
- Mar 6, 2017 11:30:27 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r213501 r213505 1 2017-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 1 11 2017-03-06 Brent Fulgham <bfulgham@apple.com> 2 12 -
trunk/Source/WebCore/ChangeLog
r213502 r213505 1 2017-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 1 21 2017-03-06 Myles C. Maxfield <mmaxfield@apple.com> 2 22 -
trunk/Source/WebCore/platform/graphics/FontCache.h
r213502 r213505 276 276 }; 277 277 278 RetainPtr<CTFontRef> preparePlatformFont(CTFontRef, TextRenderingMode, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, const FontFeatureSettings& features, const FontVariantSettings&, const FontVariationSettings&);278 RetainPtr<CTFontRef> preparePlatformFont(CTFontRef, TextRenderingMode, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, const FontFeatureSettings& features, const FontVariantSettings&, FontSelectionRequest, const FontVariationSettings&); 279 279 SynthesisPair computeNecessarySynthesis(CTFontRef, const FontDescription&, bool isPlatformFont = false); 280 280 RetainPtr<CTFontRef> platformFontWithFamilySpecialCase(const AtomicString& family, FontSelectionRequest, float size); -
trunk/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp
r213502 r213505 423 423 424 424 #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_BUG425 #if ENABLE(VARIATION_FONTS) && (PLATFORM(IOS) || WORKAROUND_CORETEXT_VARIATIONS_UNSPECIFIED_VALUE_BUG) 426 426 static inline bool fontIsSystemFont(CTFontRef font) 427 427 { … … 433 433 #endif 434 434 435 RetainPtr<CTFontRef> preparePlatformFont(CTFontRef originalFont, TextRenderingMode textRenderingMode, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, const FontFeatureSettings& features, const FontVariantSettings& variantSettings, const FontVariationSettings& variations)435 RetainPtr<CTFontRef> preparePlatformFont(CTFontRef originalFont, TextRenderingMode textRenderingMode, const FontFeatureSettings* fontFaceFeatures, const FontVariantSettings* fontFaceVariantSettings, const FontFeatureSettings& features, const FontVariantSettings& variantSettings, FontSelectionRequest fontSelectionRequest, const FontVariationSettings& variations) 436 436 { 437 437 bool alwaysAddVariations = false; … … 440 440 #if ENABLE(VARIATION_FONTS) 441 441 auto defaultValues = defaultVariationValues(originalFont); 442 #if WORKAROUND_CORETEXT_VARIATIONS_UNSPECIFIED_VALUE_BUG443 442 alwaysAddVariations = !defaultValues.isEmpty(); 444 #endif 443 #else 444 UNUSED_PARAM(fontSelectionRequest); 445 445 #endif 446 446 … … 497 497 }; 498 498 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); 501 501 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); 504 504 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()); 507 519 508 520 #if WORKAROUND_CORETEXT_VARIATIONS_UNSPECIFIED_VALUE_BUG … … 952 964 } 953 965 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)966 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, float size) 955 967 { 956 968 if (family.isEmpty()) … … 960 972 if (!foundFont) 961 973 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); 963 975 } 964 976 … … 999 1011 float size = fontDescription.computedPixelSize(); 1000 1012 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); 1002 1014 1003 1015 #if PLATFORM(MAC) … … 1010 1022 autoActivateFont(family.string(), size); 1011 1023 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); 1013 1025 } 1014 1026 #endif … … 1098 1110 const FontPlatformData& platformData = originalFontData->platformData(); 1099 1111 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()); 1101 1113 if (!result) 1102 1114 return lastResortFallbackFont(description); -
trunk/Source/WebCore/platform/graphics/mac/FontCustomPlatformData.cpp
r206761 r213505 41 41 FontWidthVariant widthVariant = fontDescription.widthVariant(); 42 42 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()); 44 44 ASSERT(font); 45 45 return FontPlatformData(font.get(), size, bold, italic, orientation, widthVariant, fontDescription.textRenderingMode()); -
trunk/Source/WebCore/platform/spi/cocoa/CoreTextSPI.h
r213163 r213505 126 126 CTFontRef CTFontCreatePhysicalFontForCharactersWithLanguage(CTFontRef, const UTF16Char* characters, CFIndex length, CFStringRef language, CFIndex* coveredLength); 127 127 bool CTFontIsAppleColorEmoji(CTFontRef); 128 bool CTFontDescriptorIsSystemUIFont(CTFontDescriptorRef);129 128 CTFontRef CTFontCreateForCharacters(CTFontRef currentFont, const UTF16Char *characters, CFIndex length, CFIndex *coveredLength); 130 129
Note: See TracChangeset
for help on using the changeset viewer.