summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorKhaled Hosny <khaledhosny@eglug.org>2013-04-28 23:06:45 +0200
committerKhaled Hosny <khaledhosny@eglug.org>2013-04-29 12:45:40 +0200
commitca0b580e2a21999d75bcd39ae5b6f81e9e42897b (patch)
tree25ff96a1646bccb4151358c0ec89c1575fb3d49e /vcl
parent1f7d7d0f327aff54af8f9fa8b60e2460827dc4e1 (diff)
[harfbuzz] Fix shaping across text runs
The 3rd parameter to 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: I9e4e928d40078c3e3667cfdb6d8f24bf6e58263d
Diffstat (limited to 'vcl')
-rw-r--r--vcl/generic/glyphs/gcach_layout.cxx8
1 files changed, 6 insertions, 2 deletions
diff --git a/vcl/generic/glyphs/gcach_layout.cxx b/vcl/generic/glyphs/gcach_layout.cxx
index 496f2f21c26a..f147ab24ca4a 100644
--- a/vcl/generic/glyphs/gcach_layout.cxx
+++ b/vcl/generic/glyphs/gcach_layout.cxx
@@ -350,8 +350,10 @@ bool HbLayoutEngine::layout(ServerFontLayout& rLayout, ImplLayoutArgs& rArgs)
((uint64_t) aFtFace->size->metrics.y_scale * (uint64_t) fUnitsPerEM) >> 16);
hb_font_set_ppem(pHbFont, aFtFace->size->metrics.x_ppem, aFtFace->size->metrics.y_ppem);
+ int nTextLen = rArgs.mnEndCharPos - rArgs.mnMinCharPos;
+
// allocate temporary arrays, note: round to even
- int nGlyphCapacity = (3 * (rArgs.mnEndCharPos - rArgs.mnMinCharPos) | 15) + 1;
+ int nGlyphCapacity = (3 * nTextLen | 15) + 1;
rLayout.Reserve(nGlyphCapacity);
@@ -393,7 +395,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, nTextLen, nMinRunPos, nRunLen);
hb_shape(pHbFont, pHbBuffer, NULL, 0);
int nRunGlyphCount = hb_buffer_get_length(pHbBuffer);
@@ -412,12 +414,14 @@ bool HbLayoutEngine::layout(ServerFontLayout& rLayout, ImplLayoutArgs& rArgs)
if (nCharPos >= 0)
{
rArgs.NeedFallback(nCharPos, bRightToLeft);
+#if 0
// 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);
+#endif
}
if (SAL_LAYOUT_FOR_FALLBACK & rArgs.mnFlags)