diff options
author | Khaled Hosny <khaledhosny@eglug.org> | 2013-05-02 06:19:38 +0200 |
---|---|---|
committer | Khaled Hosny <khaledhosny@eglug.org> | 2013-05-02 06:19:38 +0200 |
commit | 76abedd3bd1c91cac9b239f746243df00a58d060 (patch) | |
tree | cfa60de041496c27b241643b6e7a6ec0750436de /vcl | |
parent | 69a120ccc6a8afdb239912f9b4fbbc123e69d4ca (diff) |
[harfbuzz] Fix shaping across text runs, take 2
The 3rd parameter of hb_buffer_add_utf() should be the length of the
whole text not the current run, so that HarfBuzz can take the context
into account when shaping.
Change-Id: I369deb27176cbb136de12872b8a70453d5721bea
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/generic/glyphs/gcach_layout.cxx | 10 |
1 files changed, 1 insertions, 9 deletions
diff --git a/vcl/generic/glyphs/gcach_layout.cxx b/vcl/generic/glyphs/gcach_layout.cxx index d562d3bf7abd..ad93b9af6dab 100644 --- a/vcl/generic/glyphs/gcach_layout.cxx +++ b/vcl/generic/glyphs/gcach_layout.cxx @@ -465,7 +465,7 @@ bool HbLayoutEngine::layout(ServerFontLayout& rLayout, ImplLayoutArgs& rArgs) hb_buffer_set_direction(pHbBuffer, bRightToLeft ? HB_DIRECTION_RTL: HB_DIRECTION_LTR); hb_buffer_set_script(pHbBuffer, hb_icu_script_to_script(eScriptCode)); hb_buffer_set_language(pHbBuffer, hb_language_from_string(sLanguage.getStr(), -1)); - hb_buffer_add_utf16(pHbBuffer, rArgs.mpStr, nRunLen, nMinRunPos, nRunLen); + hb_buffer_add_utf16(pHbBuffer, rArgs.mpStr, rArgs.mnLength, nMinRunPos, nRunLen); hb_shape(pHbFont, pHbBuffer, NULL, 0); int nRunGlyphCount = hb_buffer_get_length(pHbBuffer); @@ -480,15 +480,7 @@ bool HbLayoutEngine::layout(ServerFontLayout& rLayout, ImplLayoutArgs& rArgs) if (!nGlyphIndex) { if (nCharPos >= 0) - { rArgs.NeedFallback(nCharPos, bRightToLeft); - // XXX: do we need this? HarfBuzz can take context into - // account when shaping - if ((nCharPos > 0) && needPreviousCode(rArgs.mpStr[nCharPos-1])) - rArgs.NeedFallback(nCharPos-1, bRightToLeft); - else if ((nCharPos + 1 < nEndRunPos) && needNextCode(rArgs.mpStr[nCharPos+1])) - rArgs.NeedFallback(nCharPos+1, bRightToLeft); - } if (SAL_LAYOUT_FOR_FALLBACK & rArgs.mnFlags) continue; |