Kaydet (Commit) 76abedd3 authored tarafından Khaled Hosny's avatar Khaled Hosny

[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
üst 69a120cc
...@@ -465,7 +465,7 @@ bool HbLayoutEngine::layout(ServerFontLayout& rLayout, ImplLayoutArgs& rArgs) ...@@ -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_direction(pHbBuffer, bRightToLeft ? HB_DIRECTION_RTL: HB_DIRECTION_LTR);
hb_buffer_set_script(pHbBuffer, hb_icu_script_to_script(eScriptCode)); 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_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); hb_shape(pHbFont, pHbBuffer, NULL, 0);
int nRunGlyphCount = hb_buffer_get_length(pHbBuffer); int nRunGlyphCount = hb_buffer_get_length(pHbBuffer);
...@@ -480,15 +480,7 @@ bool HbLayoutEngine::layout(ServerFontLayout& rLayout, ImplLayoutArgs& rArgs) ...@@ -480,15 +480,7 @@ bool HbLayoutEngine::layout(ServerFontLayout& rLayout, ImplLayoutArgs& rArgs)
if (!nGlyphIndex) if (!nGlyphIndex)
{ {
if (nCharPos >= 0) if (nCharPos >= 0)
{
rArgs.NeedFallback(nCharPos, bRightToLeft); 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) if (SAL_LAYOUT_FOR_FALLBACK & rArgs.mnFlags)
continue; continue;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment