vcl/source/gdi/sallayout.cxx | 4 ---- vcl/unx/generic/glyphs/gcach_layout.cxx | 30 +++++++++++------------------- 2 files changed, 11 insertions(+), 23 deletions(-)
New commits: commit f48cbaac0a2a7278f366a3b0118b399c0a938a44 Author: Khaled Hosny <khaledho...@eglug.org> Date: Tue Oct 11 14:53:06 2016 +0200 tdf#103103: Many Arabic fonts dont render correctly Revert the remaining bits of 1da9b4c24e806ad2447b4a656e2a7192755bb6a8, the rest was reverted in 6323e6628668849438e6e19ba7ad2c6598263261. This break many assumptions made by GenericSalLayout::ApplyDXArray(). Change-Id: I25fbafe06032ab1e8860df6c5932a7157575aa32 diff --git a/vcl/unx/generic/glyphs/gcach_layout.cxx b/vcl/unx/generic/glyphs/gcach_layout.cxx index 38d7e84..46420cb 100644 --- a/vcl/unx/generic/glyphs/gcach_layout.cxx +++ b/vcl/unx/generic/glyphs/gcach_layout.cxx @@ -21,7 +21,6 @@ #include <sallayout.hxx> #include <salgdi.hxx> #include <scrptrun.h> -#include <limits> #include <i18nlangtag/mslangid.hxx> @@ -309,16 +308,14 @@ static unsigned int unicodeDecomposeCompatibility(hb_unicode_funcs_t* /*ufuncs*/ { return 0; } -#endif static hb_unicode_funcs_t* getUnicodeFuncs() { static hb_unicode_funcs_t* ufuncs = hb_unicode_funcs_create(hb_icu_get_unicode_funcs()); -#if !HB_VERSION_ATLEAST(1, 1, 0) hb_unicode_funcs_set_decompose_compatibility_func(ufuncs, unicodeDecomposeCompatibility, nullptr, nullptr); -#endif return ufuncs; } +#endif class HbLayoutEngine : public ServerFontLayoutEngine { @@ -492,8 +489,8 @@ bool HbLayoutEngine::Layout(ServerFontLayout& rLayout, ImplLayoutArgs& rArgs) nHbFlags |= HB_BUFFER_FLAG_EOT; /* End-of-text */ hb_buffer_t *pHbBuffer = hb_buffer_create(); - static hb_unicode_funcs_t* pHbUnicodeFuncs = getUnicodeFuncs(); #if !HB_VERSION_ATLEAST(1, 1, 0) + static hb_unicode_funcs_t* pHbUnicodeFuncs = getUnicodeFuncs(); hb_buffer_set_unicode_funcs(pHbBuffer, pHbUnicodeFuncs); #endif hb_buffer_set_direction(pHbBuffer, bRightToLeft ? HB_DIRECTION_RTL: HB_DIRECTION_LTR); @@ -503,9 +500,6 @@ bool HbLayoutEngine::Layout(ServerFontLayout& rLayout, ImplLayoutArgs& rArgs) hb_buffer_add_utf16( pHbBuffer, reinterpret_cast<uint16_t const *>(pStr), nLength, nMinRunPos, nRunLen); -#if HB_VERSION_ATLEAST(0, 9, 42) - hb_buffer_set_cluster_level(pHbBuffer, HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS); -#endif hb_shape(pHbFont, pHbBuffer, nullptr, 0); int nRunGlyphCount = hb_buffer_get_length(pHbBuffer); @@ -554,12 +548,15 @@ bool HbLayoutEngine::Layout(ServerFontLayout& rLayout, ImplLayoutArgs& rArgs) // but usually harmless), so we try to sniff what HarfBuzz thinks // about this glyph by checking if it gives it a zero advance // width. - // * If the font has no GDEF table, we then check the unicode class - // of the glyph. If it is a non spacing mark then the glyph is a - // diacritic. This is only done if the HarfBuzz version is >= 0.9.42 - // Else, we fallback to setting bDiacritic to true if the x advance - // of the glyph is zero. This maybe wrong in some cases but needs to - // be kept until the base version of HarfBuzz can be updated. + // * If the font has no GDEF table, we just check if the glyph has + // zero advance width, but this is stupid and can be wrong. A + // better way would to check the character's Unicode combining + // class, but unfortunately HarfBuzz gives combining marks the + // cluster value of its base character, so nCharPos will be + // pointing to the wrong character (but HarfBuzz might change + // this in the future). + // Newer versions of HarfBuzz can control this behaviour with + // hb_buffer_set_cluster_level(). bool bDiacritic = false; if (hb_ot_layout_has_glyph_classes(mpHbFace)) { @@ -570,14 +567,9 @@ bool HbLayoutEngine::Layout(ServerFontLayout& rLayout, ImplLayoutArgs& rArgs) } else { -#if HB_VERSION_ATLEAST(0, 9, 42) - if(hb_unicode_general_category (pHbUnicodeFuncs, aChar) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK) - bDiacritic = true; -#else // the font lacks GDEF table if (pHbPositions[i].x_advance == 0) bDiacritic = true; -#endif } if (bDiacritic) commit faddf2aefd5874b2bbd6c3b7bbed0812de911f47 Author: Khaled Hosny <khaledho...@eglug.org> Date: Tue Oct 11 15:11:58 2016 +0200 Revert "Hack to make Arabic subtending marks work" This reverts commit 983e03a7d81c0ab24782b28ab899452fa6fd99ac. Fixes part of tdf#103103. Change-Id: Ib9026044b19b353e8156bc039a4a84fdeb1ec415 diff --git a/vcl/source/gdi/sallayout.cxx b/vcl/source/gdi/sallayout.cxx index ea16f4f..8aaefbf 100644 --- a/vcl/source/gdi/sallayout.cxx +++ b/vcl/source/gdi/sallayout.cxx @@ -1031,10 +1031,6 @@ void GenericSalLayout::ApplyDXArray( ImplLayoutArgs& rArgs ) nDelta += nDiff; } - // Hack to make Arabic subtending marks work e.g. in Amiri. - if (nNewClusterWidth != nOldClusterWidth && nNewClusterWidth == 0) - m_GlyphItems[i].maLinearPos.X() += m_GlyphItems[i].mnXOffset; - nNewPos += nNewClusterWidth; } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits