Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: 9df8edf812b7c4330d6f9c1578ef33e57f37457c https://github.com/WebKit/WebKit/commit/9df8edf812b7c4330d6f9c1578ef33e57f37457c Author: Myles C. Maxfield <mmaxfi...@apple.com> Date: 2023-08-27 (Sun, 27 Aug 2023)
Changed paths: M Source/WebCore/platform/graphics/Font.cpp M Source/WebCore/platform/graphics/Font.h M Source/WebCore/platform/graphics/FontCache.h M Source/WebCore/platform/graphics/FontCascade.cpp M Source/WebCore/platform/graphics/FontCascade.h M Source/WebCore/platform/graphics/FontCascadeFonts.cpp M Source/WebCore/platform/graphics/SystemFallbackFontCache.cpp M Source/WebCore/platform/graphics/SystemFallbackFontCache.h M Source/WebCore/platform/graphics/cairo/FontCairoHarfbuzzNG.cpp M Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp M Source/WebCore/platform/graphics/coretext/FontCascadeCoreText.cpp M Source/WebCore/platform/graphics/freetype/FontCacheFreeType.cpp M Source/WebCore/platform/graphics/freetype/FontSetCache.cpp M Source/WebCore/platform/graphics/freetype/FontSetCache.h M Source/WebCore/platform/graphics/win/FontCacheWin.cpp Log Message: ----------- [Fonts] systemFallbackForCharacters() only works on individual characters, not clusters https://bugs.webkit.org/show_bug.cgi?id=260758 rdar://114481597 Reviewed by Cameron McCormack. When you pick a font, you have to pick a font for a whole cluster; different codepoints in a cluster can't fall back to different fonts. If you've exhausted the whole font-family list and you fall off the end, you need to ask the system for a font that can render the cluster. The Core Text platform facilities have support for this: they accept a character pointer and a length. However, the only problem is that our own system fallback code operated on an individual UChar32, rather than on a whole cluster. This is a classic case of impedence mismatch: At the beginning of the procedure, you have clusters, and at the end of the procedure (when we hit Core Text), we operate on clusters too. This patch simply hooks up cluster support (via StringViews) throughout the interior of the procedure. Right now, this patch has no behavior change, because the only codepath that uses this functionality is our fast text codepath, which currently only operates on a single character at a time (another way to think of this: every cluster has exactly one code point inside it). If we want to stop using the complex text codepath, this will be relaxed in the future, to allow the fast text codepath to operate on whole clusters. When that day comes, we'll need to be able to feed the clusters to systemFallbackForCharacters(), like this patch allows for. (So, right now, this patch doesn't add any tests, because there is no behavior change.) * Source/WebCore/platform/graphics/Font.cpp: (WebCore::Font::systemFallbackFontForCharacter const): * Source/WebCore/platform/graphics/Font.h: * Source/WebCore/platform/graphics/FontCache.h: * Source/WebCore/platform/graphics/FontCascadeFonts.cpp: (WebCore::FontCascadeFonts::glyphDataForSystemFallback): * Source/WebCore/platform/graphics/SystemFallbackFontCache.cpp: (WebCore::SystemFallbackFontCache::systemFallbackFontForCharacter): * Source/WebCore/platform/graphics/SystemFallbackFontCache.h: (WebCore::add): (WebCore::SystemFallbackFontCache::CharacterFallbackMapKeyHashTraits::constructDeletedValue): (WebCore::SystemFallbackFontCache::CharacterFallbackMapKeyHashTraits::isDeletedValue): * Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp: (WebCore::lookupFallbackFont): (WebCore::FontCache::systemFallbackForCharacters): (WebCore::createFontForCharacters): Deleted. * Source/WebCore/platform/graphics/coretext/FontCascadeCoreText.cpp: Canonical link: https://commits.webkit.org/267335@main _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes