Skip to content
  • mario@webkit.org's avatar
    [GTK] Glyphs in vertical text tests are rotated 90 degrees clockwise · 1795391d
    mario@webkit.org authored
    https://bugs.webkit.org/show_bug.cgi?id=50619
    
    Patch by Denis Nomiyama <d.nomiyama@samsung.com> on 2013-11-07
    Reviewed by Martin Robinson.
    
    Source/WebCore:
    
    Implemented the OPENTYPE_VERTICAL feature for the GTK+ port. It resolves
    the 90 degrees rotation problem of CJK characters when displaying
    vertical text.
    
    New tests are not required as the existing tests for vertical text will
    work properly now.
    
    * GNUmakefile.list.am: Added OpenTypeVerticalData.cpp and
    OpenTypeVerticalData.h to platformgtk_sources.
    * PlatformEfl.cmake: Added OpenTypeVerticalData.cpp.
    * PlatformGTK.cmake: Added OpenTypeVerticalData.cpp.
    * platform/graphics/FontCache.cpp: Originally the HashMap for
    OpenTypeVerticalData was designed with FontFileKey as integer in the
    Chromium port, which was an unique number provided by Skia. Since other
    ports use FontFileKey as string, new generic hash functions had to be
    implemented instead of using the specific ones for integers.
    (WebCore::FontVerticalDataCacheKeyHash::hash): New hash function for
    HashMap of OpenTypeVerticalData.
    (WebCore::FontVerticalDataCacheKeyHash::equal): New function for
    comparing hash indexes in the HashMap of OpenTypeVerticalData.
    (WebCore::FontVerticalDataCacheKeyTraits::emptyValue): New function for
    giving an empty FontFileKey.
    (WebCore::FontVerticalDataCacheKeyTraits::constructDeletedValue): New
    function to create a FontFileKey for deleted values.
    (WebCore::FontVerticalDataCacheKeyTraits::isDeletedValue): New function
    to check if a HashMap entry is available.
    * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
    (WebCore::FontCustomPlatformData::fontPlatformData): Added font
    orientation as a parameter to the FontPlatformData constructor.
    * platform/graphics/freetype/FontPlatformData.h: Added m_orientation to
    store the font orientation and m_horizontalOrientationMatrix to store
    the Cairo matrix for horizontal orientation, which can be restored in
    setOrientation().
    (WebCore::FontPlatformData::FontPlatformData): Added font orientation as
    a parameter.
    (WebCore::FontPlatformData::orientation): Implemented this function
    based on m_orientation.
    * platform/graphics/freetype/FontPlatformDataFreeType.cpp: Added new
    helper function rotateCairoMatrixForVerticalOrientation() to rotate the
    Cairo matrix in case of vertical orientation.
    (WebCore::FontPlatformData::FontPlatformData): Initialized
    m_orientation.
    (WebCore::FontPlatformData::operator=): Added m_orientation and
    m_horizontalOrientationMatrix to the assignment operator.
    (WebCore::FontPlatformData::operator==): Added m_orientation to the
    equal operator.
    (WebCore::FontPlatformData::initializeWithFontFace): Rotated and
    translated fonts if orientation is vertical. Also stored the horizontal
    Cairo matrix.
    (WebCore::FontPlatformData::verticalData): Returned the vertical data
    from the font cache.
    (WebCore::FontPlatformData::openTypeTable): Loaded the font table into
    a shared buffer.
    (WebCore::FontPlatformData::setOrientation): Replaced the scaled font
    data by rotating fonts according to the new orientation.
    * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
    (WebCore::SimpleFontData::platformInit): Set the glyph's height and
    width according to the font orientation. It also sets EM.
    (WebCore::SimpleFontData::platformCreateScaledFontData): Added
    orientation to the FontPlatformData constructor.
    (WebCore::SimpleFontData::platformWidthForGlyph): Returned the glyph's
    width according the orientation.
    * platform/graphics/harfbuzz/HarfBuzzFaceCairo.cpp:
    (WebCore::CairoGetGlyphWidthAndExtents): Obtained the character advance
    and extents according to the font orientation.
    
    Source/Platform:
    
    Added WebCore/platform/graphics/opentype to the include path.
    
    * GNUmakefile.am:
    
    Source/WTF:
    
    Enabled OPENTYPE_VERTICAL by default on GTK+ and EFL ports, which are
    currently using Freetype.
    
    * wtf/Platform.h:
    
    Source/WebKit:
    
    Added WebCore/platform/graphics/opentype to the include path.
    
    * PlatformEfl.cmake:
    
    Source/WebKit2:
    
    Added WebCore/platform/graphics/opentype to the include path.
    
    * PlatformEfl.cmake:
    * PlatformGTK.cmake:
    
    LayoutTests:
    
    Updated existing test results that uses vertical texts.
    
    * platform/gtk-wk1/fast/writing-mode/Kusa-Makura-background-canvas-expected.png: Added.
    * platform/gtk-wk1/fast/writing-mode/Kusa-Makura-background-canvas-expected.txt: Updated.
    * platform/gtk/editing/selection/vertical-lr-ltr-extend-line-backward-br-expected.png: Updated.
    * platform/gtk/editing/selection/vertical-lr-ltr-extend-line-backward-br-expected.txt: Updated.
    * platform/gtk/editing/selection/vertical-lr-ltr-extend-line-forward-br-expected.png: Updated.
    * platform/gtk/editing/selection/vertical-lr-ltr-extend-line-forward-br-expected.txt: Updated.
    * platform/gtk/editing/selection/vertical-rl-ltr-extend-line-backward-br-expected.png: Updated.
    * platform/gtk/editing/selection/vertical-rl-ltr-extend-line-backward-br-expected.txt: Updated.
    * platform/gtk/editing/selection/vertical-rl-ltr-extend-line-backward-p-expected.png: Updated.
    * platform/gtk/editing/selection/vertical-rl-ltr-extend-line-backward-p-expected.txt: Updated.
    * platform/gtk/editing/selection/vertical-rl-ltr-extend-line-backward-wrap-expected.png: Updated.
    * platform/gtk/editing/selection/vertical-rl-ltr-extend-line-backward-wrap-expected.txt: Updated.
    * platform/gtk/editing/selection/vertical-rl-ltr-extend-line-forward-br-expected.png: Updated.
    * platform/gtk/editing/selection/vertical-rl-ltr-extend-line-forward-br-expected.txt: Updated.
    * platform/gtk/editing/selection/vertical-rl-ltr-extend-line-forward-p-expected.png: Updated.
    * platform/gtk/editing/selection/vertical-rl-ltr-extend-line-forward-p-expected.txt: Updated.
    * platform/gtk/editing/selection/vertical-rl-ltr-extend-line-forward-wrap-expected.png: Updated.
    * platform/gtk/editing/selection/vertical-rl-ltr-extend-line-forward-wrap-expected.txt: Updated.
    * platform/gtk/fast/block/lineboxcontain/block-with-ideographs-expected.png: Updated.
    * platform/gtk/fast/block/lineboxcontain/block-with-ideographs-expected.txt: Updated.
    * platform/gtk/fast/css/relative-positioned-block-with-inline-ancestor-and-parent-dynamic-expected.png: Updated.
    * platform/gtk/fast/dynamic/text-combine-expected.png: Updated.
    * platform/gtk/fast/dynamic/text-combine-expected.txt: Updated.
    * platform/gtk/fast/html/details-writing-mode-expected.png: Updated.
    * platform/gtk/fast/repaint/japanese-rl-selection-clear-expected.png: Updated.
    * platform/gtk/fast/repaint/japanese-rl-selection-clear-expected.txt: Added.
    * platform/gtk/fast/repaint/japanese-rl-selection-repaint-expected.png: Updated.
    * platform/gtk/fast/repaint/japanese-rl-selection-repaint-expected.txt: Added.
    * platform/gtk/fast/repaint/japanese-rl-selection-repaint-in-regions-expected.png: Updated.
    * platform/gtk/fast/repaint/japanese-rl-selection-repaint-in-regions-expected.txt: Updated.
    * platform/gtk/fast/repaint/repaint-across-writing-mode-boundary-expected.png: Updated.
    * platform/gtk/fast/repaint/repaint-across-writing-mode-boundary-expected.txt: Updated.
    * platform/gtk/fast/ruby/base-shorter-than-text-expected.png: Updated.
    * platform/gtk/fast/ruby/base-shorter-than-text-expected.txt: Updated.
    * platform/gtk/fast/text/decorations-with-text-combine-expected.png: Updated.
    * platform/gtk/fast/text/decorations-with-text-combine-expected.txt: Updated.
    * platform/gtk/fast/text/emphasis-combined-text-expected.png: Updated.
    * platform/gtk/fast/text/emphasis-combined-text-expected.txt: Updated.
    * platform/gtk/fast/text/emphasis-vertical-expected.png: Updated.
    * platform/gtk/fast/text/emphasis-vertical-expected.txt: Updated.
    * platform/gtk/fast/text/international/text-combine-image-test-expected.png: Updated.
    * platform/gtk/fast/text/international/text-combine-image-test-expected.txt: Updated.
    * platform/gtk/fast/text/international/text-spliced-font-expected.png: Updated.
    * platform/gtk/fast/text/international/text-spliced-font-expected.txt: Updated.
    * platform/gtk/fast/text/international/vertical-text-glyph-test-expected.png: Updated.
    * platform/gtk/fast/text/international/vertical-text-glyph-test-expected.txt: Added.
    * platform/gtk/fast/text/justify-ideograph-vertical-expected.png: Updated.
    * platform/gtk/fast/text/justify-ideograph-vertical-expected.txt: Added.
    * platform/gtk/fast/text/orientation-sideways-expected.png: Updated.
    * platform/gtk/fast/text/orientation-sideways-expected.txt: Updated.
    * platform/gtk/fast/writing-mode/Kusa-Makura-background-canvas-expected.png: Updated.
    * platform/gtk/fast/writing-mode/Kusa-Makura-background-canvas-expected.txt: Updated.
    * platform/gtk/fast/writing-mode/border-vertical-lr-expected.png: Updated.
    * platform/gtk/fast/writing-mode/border-vertical-lr-expected.txt: Updated.
    * platform/gtk/fast/writing-mode/broken-ideograph-small-caps-expected.png: Updated.
    * platform/gtk/fast/writing-mode/broken-ideograph-small-caps-expected.txt: Updated.
    * platform/gtk/fast/writing-mode/broken-ideographic-font-expected.png: Updated.
    * platform/gtk/fast/writing-mode/broken-ideographic-font-expected.txt: Updated.
    * platform/gtk/fast/writing-mode/fallback-orientation-expected.png: Updated.
    * platform/gtk/fast/writing-mode/fallback-orientation-expected.txt: Updated.
    * platform/gtk/fast/writing-mode/japanese-lr-selection-expected.png: Updated.
    * platform/gtk/fast/writing-mode/japanese-lr-selection-expected.txt: Updated.
    * platform/gtk/fast/writing-mode/japanese-lr-text-expected.png: Updated.
    * platform/gtk/fast/writing-mode/japanese-lr-text-expected.txt: Updated.
    * platform/gtk/fast/writing-mode/japanese-rl-selection-expected.png: Updated.
    * platform/gtk/fast/writing-mode/japanese-rl-selection-expected.txt: Updated.
    * platform/gtk/fast/writing-mode/japanese-rl-text-expected.png: Updated.
    * platform/gtk/fast/writing-mode/japanese-rl-text-expected.txt: Updated.
    * platform/gtk/fast/writing-mode/japanese-rl-text-with-broken-font-expected.png: Updated.
    * platform/gtk/fast/writing-mode/japanese-rl-text-with-broken-font-expected.txt: Updated.
    * platform/gtk/fast/writing-mode/japanese-ruby-vertical-lr-expected.png: Updated.
    * platform/gtk/fast/writing-mode/japanese-ruby-vertical-lr-expected.txt: Updated.
    * platform/gtk/fast/writing-mode/japanese-ruby-vertical-rl-expected.png: Updated.
    * platform/gtk/fast/writing-mode/japanese-ruby-vertical-rl-expected.txt: Updated.
    * platform/gtk/fast/writing-mode/text-orientation-basic-expected.png: Updated.
    * platform/gtk/fast/writing-mode/text-orientation-basic-expected.txt:
    * platform/gtk/fast/writing-mode/vertical-align-table-baseline-expected.png: Updated.
    * platform/gtk/fast/writing-mode/vertical-align-table-baseline-expected.txt: Updated.
    * platform/gtk/fast/writing-mode/vertical-baseline-alignment-expected.png: Updated.
    * platform/gtk/fast/writing-mode/vertical-baseline-alignment-expected.txt: Updated.
    * platform/gtk/fast/writing-mode/vertical-font-fallback-expected.png: Updated.
    * platform/gtk/fast/writing-mode/vertical-font-fallback-expected.txt: Updated.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@158848 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    1795391d