2011-01-27 James Simonsen <simonjam@chromium.org>
authorsimonjam@chromium.org <simonjam@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 27 Jan 2011 23:03:04 +0000 (23:03 +0000)
committersimonjam@chromium.org <simonjam@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 27 Jan 2011 23:03:04 +0000 (23:03 +0000)
        Reviewed by Tony Chang.

        [Chromium] Simplify small caps logic in complex text on linux
        https://bugs.webkit.org/show_bug.cgi?id=53207

        Test: fast/text/atsui-multiple-renderers.html
              fast/text/atsui-small-caps-punctuation-size.html

        * platform/graphics/chromium/ComplexTextControllerLinux.cpp:
        (WebCore::ComplexTextController::nextScriptRun): Remove redundant logic. Case changes in a text run imply FontData changes.
        (WebCore::ComplexTextController::setupFontForScriptRun): Update comment to reflect above.

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

Source/WebCore/ChangeLog
Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.cpp

index d1f0448..e292e63 100644 (file)
@@ -1,3 +1,17 @@
+2011-01-27  James Simonsen  <simonjam@chromium.org>
+
+        Reviewed by Tony Chang.
+
+        [Chromium] Simplify small caps logic in complex text on linux
+        https://bugs.webkit.org/show_bug.cgi?id=53207
+
+        Test: fast/text/atsui-multiple-renderers.html
+              fast/text/atsui-small-caps-punctuation-size.html
+
+        * platform/graphics/chromium/ComplexTextControllerLinux.cpp:
+        (WebCore::ComplexTextController::nextScriptRun): Remove redundant logic. Case changes in a text run imply FontData changes.
+        (WebCore::ComplexTextController::setupFontForScriptRun): Update comment to reflect above.
+
 2011-01-27  Adam Barth  <abarth@webkit.org>
 
         In which I attempt to fix the EFL build.
index 6d15510..0566f0e 100644 (file)
@@ -160,15 +160,11 @@ bool ComplexTextController::nextScriptRun()
     // So we allow that to run first, then do a second pass over the range it
     // found and take the largest subregion that stays within a single font.
     m_currentFontData = m_font->glyphDataForCharacter(m_item.string[m_item.item.pos], false).fontData;
-    bool isFirstCharacterLowerCase = u_islower(m_item.string[m_item.item.pos]);
     unsigned endOfRun;
     for (endOfRun = 1; endOfRun < m_item.item.length; ++endOfRun) {
-        UChar nextCharacter = m_item.string[m_item.item.pos + endOfRun];
-        const SimpleFontData* nextFontData = m_font->glyphDataForCharacter(nextCharacter, false).fontData;
+        const SimpleFontData* nextFontData = m_font->glyphDataForCharacter(m_item.string[m_item.item.pos + endOfRun], false).fontData;
         if (nextFontData != m_currentFontData)
             break;
-        if (m_font->isSmallCaps() && isFirstCharacterLowerCase != u_islower(nextCharacter))
-            break;
     }
     m_item.item.length = endOfRun;
     m_indexOfNextScriptRun = m_item.item.pos + endOfRun;
@@ -193,8 +189,9 @@ void ComplexTextController::setupFontForScriptRun()
 {
     FontDataVariant fontDataVariant = AutoVariant;
     // Determine if this script run needs to be converted to small caps.
-    // nextScriptRun() will always send us a run of the same case, so we only
-    // need to check the first character's case.
+    // nextScriptRun() will always send us a run of the same case, because a
+    // case change while in small-caps mode always results in different
+    // FontData, so we only need to check the first character's case.
     if (m_font->isSmallCaps() && u_islower(m_item.string[m_item.item.pos])) {
         m_smallCapsString = String(m_run.data(m_item.item.pos), m_item.item.length);
         m_smallCapsString.makeUpper();