Reviewed by Maciej Stachowiak.
authormitz@apple.com <mitz@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 17 Dec 2007 17:09:56 +0000 (17:09 +0000)
committermitz@apple.com <mitz@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 17 Dec 2007 17:09:56 +0000 (17:09 +0000)
        - fix <rdar://problem/5333260> Some Chinese characters in Text Encoding menu are bold, others are not
          and <rdar://problem/5280188> Chinese text looks worse on Safari for Windows cf. Safari for Mac

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::getFontDataForCharacters): To ensure that font
        linking gives consistent results for characters that are exclusive to
        the simplified Chinese code page and characters that belong to that
        code page and other code pages, always ask to map to simplified Chinese
        alone first.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@28810 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/platform/graphics/win/FontCacheWin.cpp

index d0a8ffae389d04278cf0fbfba08872526ca1e933..a0b6b3580426cc09ab3cdff80bb8c223dc326c34 100644 (file)
@@ -1,3 +1,17 @@
+2007-12-17  Dan Bernstein  <mitz@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+
+        - fix <rdar://problem/5333260> Some Chinese characters in Text Encoding menu are bold, others are not
+          and <rdar://problem/5280188> Chinese text looks worse on Safari for Windows cf. Safari for Mac
+
+        * platform/graphics/win/FontCacheWin.cpp:
+        (WebCore::FontCache::getFontDataForCharacters): To ensure that font
+        linking gives consistent results for characters that are exclusive to
+        the simplified Chinese code page and characters that belong to that
+        code page and other code pages, always ask to map to simplified Chinese
+        alone first.
+
 2007-12-17  Christian Dywan  <christian@twotoasts.de>
 
         Reviewed by Alp Toker.
index 22e5e43e43a9f7f27b140aad4fabee9fc4d23ec8..84735e58fa728346c88e83b9ea7f1be5a2a28ab6 100644 (file)
@@ -92,7 +92,21 @@ const FontData* FontCache::getFontDataForCharacters(const Font& font, const UCha
     long cchActual;
     langFontLink->GetStrCodePages(characters, length, acpCodePages, &actualCodePages, &cchActual);
     if (cchActual) {
+        // If simplified Chinese is one of the actual code pages, make one call to MapFont() asking for
+        // simplified Chinese only (and ignore the result). This ensures that we get consistent answers
+        // for characters that are in the simplified Chinese code page as well as other code pages and
+        // characters that are exclusively in the simplified Chinese code page.
+        // FIXME: This needs to be done only once per primary font. We could set a bit in the FontPlatformData
+        // indicating that we have done this.
+        const UINT simplifiedChineseCP = 936;
+        UINT codePage;
         HFONT result;
+        if (SUCCEEDED(langFontLink->CodePagesToCodePage(actualCodePages, simplifiedChineseCP, &codePage)) && codePage == simplifiedChineseCP) {
+            DWORD simplifiedChineseCodePages;
+            langFontLink->CodePageToCodePages(simplifiedChineseCP, &simplifiedChineseCodePages);
+            langFontLink->MapFont(hdc, simplifiedChineseCodePages, characters[0], &result);
+            langFontLink->ReleaseFont(result);
+        }
         if (langFontLink->MapFont(hdc, actualCodePages, characters[0], &result) == S_OK) {
             // Fill in a log font with the returned font from MLang, and then use that to create a new font.
             LOGFONT lf;