configure.ac | 3 ++- vcl/inc/font/LogicalFontInstance.hxx | 2 -- vcl/source/font/LogicalFontInstance.cxx | 13 +------------ vcl/source/gdi/CommonSalLayout.cxx | 9 ++------- 4 files changed, 5 insertions(+), 22 deletions(-)
New commits: commit a29c338fe8689924328cf56c59d36ed561a702b9 Author: Khaled Hosny <kha...@aliftype.com> AuthorDate: Wed Feb 8 21:27:50 2023 +0200 Commit: Xisco Fauli <xiscofa...@libreoffice.org> CommitDate: Thu Feb 9 19:41:05 2023 +0000 Require HarfBuzz 5.1.0 This is the minimal version to provide the functionality we currently check for. Some important LO functionality currently depend on idfdef'd HarfBuzz code, and some distributions build against old system HarfBuzz leading to user bug reports that are tricky to track down, e.g: tdf#153048 and tdf#153470. Change-Id: I7d58ec46f8fd340d2592887c0088876d71351771 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146674 Tested-by: Jenkins Reviewed-by: خالد حسني <kha...@aliftype.com> (cherry picked from commit 8c1e91444c78db1093c3db54d98efb16294f82ea) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146699 Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/configure.ac b/configure.ac index 04e0e0b08afb..c30780562d5f 100644 --- a/configure.ac +++ b/configure.ac @@ -10848,6 +10848,7 @@ AC_SUBST(SYSTEM_LIBORCUS) dnl =================================================================== dnl HarfBuzz dnl =================================================================== +harfbuzz_required_version=5.1.0 GRAPHITE_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/graphite/include -DGRAPHITE2_STATIC" GRAPHITE_LIBS_internal="-L${WORKDIR}/LinkTarget/StaticLibrary -lgraphite" @@ -10855,7 +10856,7 @@ libo_CHECK_SYSTEM_MODULE([graphite],[GRAPHITE],[graphite2 >= 0.9.3]) HARFBUZZ_CFLAGS_internal="-I${WORKDIR}/UnpackedTarball/harfbuzz/src" HARFBUZZ_LIBS_internal="-L${WORKDIR}/UnpackedTarball/harfbuzz/src/.libs -lharfbuzz" -libo_CHECK_SYSTEM_MODULE([harfbuzz],[HARFBUZZ],[harfbuzz-icu >= 2.6.8]) +libo_CHECK_SYSTEM_MODULE([harfbuzz],[HARFBUZZ],[harfbuzz-icu >= $harfbuzz_required_version]) if test "$COM" = "MSC"; then # override the above GRAPHITE_LIBS="${WORKDIR}/LinkTarget/StaticLibrary/graphite.lib" diff --git a/vcl/inc/font/LogicalFontInstance.hxx b/vcl/inc/font/LogicalFontInstance.hxx index 6f4645c82c0c..c9e837d540f1 100644 --- a/vcl/inc/font/LogicalFontInstance.hxx +++ b/vcl/inc/font/LogicalFontInstance.hxx @@ -156,10 +156,8 @@ private: // The value is initialized and used in NeedOffsetCorrection(). std::optional<FontFamilyEnum> m_xeFontFamilyEnum; -#if HB_VERSION_ATLEAST(4, 0, 0) mutable hb_draw_funcs_t* m_pHbDrawFuncs = nullptr; basegfx::B2DPolygon m_aDrawPolygon; -#endif }; inline hb_font_t* LogicalFontInstance::GetHbFont() diff --git a/vcl/source/font/LogicalFontInstance.cxx b/vcl/source/font/LogicalFontInstance.cxx index 277edec2d96c..58b291d04bdf 100644 --- a/vcl/source/font/LogicalFontInstance.cxx +++ b/vcl/source/font/LogicalFontInstance.cxx @@ -54,10 +54,8 @@ LogicalFontInstance::~LogicalFontInstance() if (m_pHbFontUntransformed) hb_font_destroy(m_pHbFontUntransformed); -#if HB_VERSION_ATLEAST(4, 0, 0) if (m_pHbDrawFuncs) hb_draw_funcs_destroy(m_pHbDrawFuncs); -#endif } hb_font_t* LogicalFontInstance::InitHbFont() @@ -75,12 +73,10 @@ hb_font_t* LogicalFontInstance::InitHbFont() if (!aVariations.empty()) hb_font_set_variations(pHbFont, aVariations.data(), aVariations.size()); -#if HB_VERSION_ATLEAST(3, 3, 0) // If we are applying artificial italic, instruct HarfBuzz to do the same // so that mark positioning is also transformed. if (NeedsArtificialItalic()) hb_font_set_synthetic_slant(pHbFont, ARTIFICIAL_ITALIC_SKEW); -#endif ImplInitHbFont(pHbFont); @@ -91,7 +87,6 @@ hb_font_t* LogicalFontInstance::GetHbFontUntransformed() const { auto* pHbFont = const_cast<LogicalFontInstance*>(this)->GetHbFont(); -#if HB_VERSION_ATLEAST(3, 3, 0) if (NeedsArtificialItalic()) // || NeedsArtificialBold() { if (!m_pHbFontUntransformed) @@ -103,7 +98,7 @@ hb_font_t* LogicalFontInstance::GetHbFontUntransformed() const } return m_pHbFontUntransformed; } -#endif + return pHbFont; } @@ -259,7 +254,6 @@ bool LogicalFontInstance::NeedsArtificialItalic() const return m_aFontSelData.GetItalic() != ITALIC_NONE && m_pFontFace->GetItalic() == ITALIC_NONE; } -#if HB_VERSION_ATLEAST(4, 0, 0) namespace { void move_to_func(hb_draw_funcs_t*, void* /*pDrawData*/, hb_draw_state_t*, float to_x, float to_y, @@ -294,12 +288,10 @@ void close_path_func(hb_draw_funcs_t*, void* pDrawData, hb_draw_state_t*, void* pPoly->clear(); } } -#endif bool LogicalFontInstance::GetGlyphOutlineUntransformed(sal_GlyphId nGlyph, basegfx::B2DPolyPolygon& rPolyPoly) const { -#if HB_VERSION_ATLEAST(4, 0, 0) if (!m_pHbDrawFuncs) { m_pHbDrawFuncs = hb_draw_funcs_create(); @@ -316,9 +308,6 @@ bool LogicalFontInstance::GetGlyphOutlineUntransformed(sal_GlyphId nGlyph, hb_font_get_glyph_shape(GetHbFontUntransformed(), nGlyph, m_pHbDrawFuncs, &rPolyPoly); return true; -#else - return false; -#endif } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/source/gdi/CommonSalLayout.cxx b/vcl/source/gdi/CommonSalLayout.cxx index 92b090222481..f4472726fcfe 100644 --- a/vcl/source/gdi/CommonSalLayout.cxx +++ b/vcl/source/gdi/CommonSalLayout.cxx @@ -421,10 +421,10 @@ bool GenericSalLayout::LayoutText(vcl::text::ImplLayoutArgs& rArgs, const SalLay const int nRunLen = nEndRunPos - nMinRunPos; int nHbFlags = HB_BUFFER_FLAGS_DEFAULT; -#if HB_VERSION_ATLEAST(5, 1, 0) + // Produce HB_GLYPH_FLAG_SAFE_TO_INSERT_TATWEEL that we use below. nHbFlags |= HB_BUFFER_FLAG_PRODUCE_SAFE_TO_INSERT_TATWEEL; -#endif + if (nMinRunPos == 0) nHbFlags |= HB_BUFFER_FLAG_BOT; /* Beginning-of-text */ if (nEndRunPos == nLength) @@ -545,13 +545,8 @@ bool GenericSalLayout::LayoutText(vcl::text::ImplLayoutArgs& rArgs, const SalLay if (hb_glyph_info_get_glyph_flags(&pHbGlyphInfos[i]) & HB_GLYPH_FLAG_UNSAFE_TO_BREAK) nGlyphFlags |= GlyphItemFlags::IS_UNSAFE_TO_BREAK; -#if HB_VERSION_ATLEAST(5, 1, 0) if (hb_glyph_info_get_glyph_flags(&pHbGlyphInfos[i]) & HB_GLYPH_FLAG_SAFE_TO_INSERT_TATWEEL) nGlyphFlags |= GlyphItemFlags::IS_SAFE_TO_INSERT_KASHIDA; -#else - // If support is not present, then allow kashida anywhere. - nGlyphFlags |= GlyphItemFlags::IS_SAFE_TO_INSERT_KASHIDA; -#endif DeviceCoordinate nAdvance, nXOffset, nYOffset; if (aSubRun.maDirection == HB_DIRECTION_TTB)