[FreeType] Incorrect application of glyph positioning in the Y direction
authorcarlosgc@webkit.org <carlosgc@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 28 Mar 2019 13:58:38 +0000 (13:58 +0000)
committercarlosgc@webkit.org <carlosgc@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 28 Mar 2019 13:58:38 +0000 (13:58 +0000)
https://bugs.webkit.org/show_bug.cgi?id=161493

Reviewed by Michael Catanzaro.

Source/WebCore:

Use the first glyph origin as the initial advance of every complex text run.

* platform/graphics/cairo/FontCairo.cpp:
(WebCore::FontCascade::drawGlyphs): Update the yOffset using the height advance.
* platform/graphics/cairo/GraphicsContextImplCairo.cpp:
(WebCore::GraphicsContextImplCairo::drawGlyphs): Ditto.
* platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp:
(WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun): Set the initial advance.

LayoutTests:

Rebaseline fast/text/international/hebrew-vowels.html.

* platform/gtk/fast/text/international/hebrew-vowels-expected.png:
* platform/gtk/fast/text/international/hebrew-vowels-expected.txt:

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

LayoutTests/ChangeLog
LayoutTests/platform/gtk/fast/text/international/hebrew-vowels-expected.png
LayoutTests/platform/gtk/fast/text/international/hebrew-vowels-expected.txt
Source/WebCore/ChangeLog
Source/WebCore/platform/graphics/cairo/FontCairo.cpp
Source/WebCore/platform/graphics/cairo/GraphicsContextImplCairo.cpp
Source/WebCore/platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp

index cd65382..3d51e33 100644 (file)
@@ -1,3 +1,15 @@
+2019-03-28  Carlos Garcia Campos  <cgarcia@igalia.com>
+
+        [FreeType] Incorrect application of glyph positioning in the Y direction
+        https://bugs.webkit.org/show_bug.cgi?id=161493
+
+        Reviewed by Michael Catanzaro.
+
+        Rebaseline fast/text/international/hebrew-vowels.html.
+
+        * platform/gtk/fast/text/international/hebrew-vowels-expected.png:
+        * platform/gtk/fast/text/international/hebrew-vowels-expected.txt:
+
 2019-03-27  Ryosuke Niwa  <rniwa@webkit.org>
 
         [macOS] Select element doesn't show popup if select element had lost focus while popup was previosuly shown
index 5695a27..c2e11bb 100644 (file)
Binary files a/LayoutTests/platform/gtk/fast/text/international/hebrew-vowels-expected.png and b/LayoutTests/platform/gtk/fast/text/international/hebrew-vowels-expected.png differ
index c898f3e..ac1fe33 100644 (file)
@@ -11,10 +11,10 @@ layer at (0,0) size 800x600
         RenderText {#text} at (0,0) size 458x17
           text run at (0,0) width 458: "The vowel (two vertical dots) should be centered beneath the main letter."
       RenderBlock {DIV} at (0,86) size 784x91
-        RenderText {#text} at (33,1) size 67x88
-          text run at (33,1) width 67 RTL: "\x{5E1}\x{5B0} "
-        RenderText {#text} at (0,1) size 34x88
-          text run at (0,1) width 34 RTL: "\x{5E9}\x{5B0}"
+        RenderText {#text} at (57,1) size 66x88
+          text run at (57,1) width 66 RTL: "\x{5E1}\x{5B0} "
+        RenderText {#text} at (0,1) size 57x88
+          text run at (0,1) width 57 RTL: "\x{5E9}\x{5B0}"
         RenderText {#text} at (0,0) size 0x0
       RenderBlock {HR} at (0,185) size 784x2 [border: (1px inset #000000)]
       RenderBlock {P} at (0,203) size 784x18
index 804523b..ec3f7dc 100644 (file)
@@ -1,3 +1,19 @@
+2019-03-28  Carlos Garcia Campos  <cgarcia@igalia.com>
+
+        [FreeType] Incorrect application of glyph positioning in the Y direction
+        https://bugs.webkit.org/show_bug.cgi?id=161493
+
+        Reviewed by Michael Catanzaro.
+
+        Use the first glyph origin as the initial advance of every complex text run.
+
+        * platform/graphics/cairo/FontCairo.cpp:
+        (WebCore::FontCascade::drawGlyphs): Update the yOffset using the height advance.
+        * platform/graphics/cairo/GraphicsContextImplCairo.cpp:
+        (WebCore::GraphicsContextImplCairo::drawGlyphs): Ditto.
+        * platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp:
+        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun): Set the initial advance.
+
 2019-03-27  Ryosuke Niwa  <rniwa@webkit.org>
 
         [macOS] Select element doesn't show popup if select element had lost focus while popup was previosuly shown
index c942b49..e10ebe4 100644 (file)
@@ -65,6 +65,7 @@ void FontCascade::drawGlyphs(GraphicsContext& context, const Font& font, const G
         for (size_t i = 0; i < numGlyphs; ++i) {
             glyphs[i] = { glyphsData[i], xOffset, yOffset };
             xOffset += advances[i].width();
+            yOffset -= advances[i].height();
         }
     }
 
index c697d22..50b7d9c 100644 (file)
@@ -248,6 +248,7 @@ void GraphicsContextImplCairo::drawGlyphs(const Font& font, const GlyphBuffer& g
         for (size_t i = 0; i < numGlyphs; ++i) {
             glyphs[i] = { glyphsData[i], xOffset, yOffset };
             xOffset += advances[i].width();
+            yOffset -= advances[i].height();
         }
     }
 
index 5532d18..360ffa1 100644 (file)
@@ -168,6 +168,9 @@ ComplexTextController::ComplexTextRun::ComplexTextRun(hb_buffer_t* buffer, const
         float advanceX = harfBuzzPositionToFloat(glyphPositions[i].x_advance);
         float advanceY = harfBuzzPositionToFloat(glyphPositions[i].y_advance);
 
+        if (!i)
+            m_initialAdvance = { offsetX, -offsetY };
+
         m_glyphs[i] = glyph;
         m_baseAdvances[i] = { advanceX, advanceY };
         m_glyphOrigins[i] = { offsetX, offsetY };