From: carlosgc@webkit.org Date: Thu, 28 Mar 2019 13:58:38 +0000 (+0000) Subject: [FreeType] Incorrect application of glyph positioning in the Y direction X-Git-Url: http://git.webkit.org/?p=WebKit-https.git;a=commitdiff_plain;h=6d525ea6f15d9c3fbbf1027ac0bc2730e1a982f2 [FreeType] Incorrect application of glyph positioning in the Y direction 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 --- diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog index cd65382..3d51e33 100644 --- a/LayoutTests/ChangeLog +++ b/LayoutTests/ChangeLog @@ -1,3 +1,15 @@ +2019-03-28 Carlos Garcia Campos + + [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 [macOS] Select element doesn't show popup if select element had lost focus while popup was previosuly shown diff --git a/LayoutTests/platform/gtk/fast/text/international/hebrew-vowels-expected.png b/LayoutTests/platform/gtk/fast/text/international/hebrew-vowels-expected.png index 5695a27..c2e11bb 100644 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 diff --git a/LayoutTests/platform/gtk/fast/text/international/hebrew-vowels-expected.txt b/LayoutTests/platform/gtk/fast/text/international/hebrew-vowels-expected.txt index c898f3e..ac1fe33 100644 --- a/LayoutTests/platform/gtk/fast/text/international/hebrew-vowels-expected.txt +++ b/LayoutTests/platform/gtk/fast/text/international/hebrew-vowels-expected.txt @@ -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 diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog index 804523b..ec3f7dc 100644 --- a/Source/WebCore/ChangeLog +++ b/Source/WebCore/ChangeLog @@ -1,3 +1,19 @@ +2019-03-28 Carlos Garcia Campos + + [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 [macOS] Select element doesn't show popup if select element had lost focus while popup was previosuly shown diff --git a/Source/WebCore/platform/graphics/cairo/FontCairo.cpp b/Source/WebCore/platform/graphics/cairo/FontCairo.cpp index c942b49..e10ebe4 100644 --- a/Source/WebCore/platform/graphics/cairo/FontCairo.cpp +++ b/Source/WebCore/platform/graphics/cairo/FontCairo.cpp @@ -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(); } } diff --git a/Source/WebCore/platform/graphics/cairo/GraphicsContextImplCairo.cpp b/Source/WebCore/platform/graphics/cairo/GraphicsContextImplCairo.cpp index c697d22..50b7d9c 100644 --- a/Source/WebCore/platform/graphics/cairo/GraphicsContextImplCairo.cpp +++ b/Source/WebCore/platform/graphics/cairo/GraphicsContextImplCairo.cpp @@ -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(); } } diff --git a/Source/WebCore/platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp b/Source/WebCore/platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp index 5532d18..360ffa1 100644 --- a/Source/WebCore/platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp +++ b/Source/WebCore/platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp @@ -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 };