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

Reply via email to