From f1eaad31122024034d8e7299780eeb123204b20a Mon Sep 17 00:00:00 2001 From: Khaled Hosny Date: Fri, 2 Dec 2022 23:21:49 +0200 Subject: vcl: simplify ImplFontMetricData::ImplInitTextLineSizeHarfBuzz() a bit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I844b4fc39784ac093a3339b8912efd236ae152ea Reviewed-on: https://gerrit.libreoffice.org/c/core/+/143605 Tested-by: Jenkins Reviewed-by: خالد حسني --- vcl/source/font/fontmetric.cxx | 79 ++++++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 38 deletions(-) (limited to 'vcl') diff --git a/vcl/source/font/fontmetric.cxx b/vcl/source/font/fontmetric.cxx index f6f8bd643d42..a0959dfc6900 100644 --- a/vcl/source/font/fontmetric.cxx +++ b/vcl/source/font/fontmetric.cxx @@ -179,56 +179,59 @@ ImplFontMetricData::ImplFontMetricData( const vcl::font::FontSelectPattern& rFon bool ImplFontMetricData::ImplInitTextLineSizeHarfBuzz(LogicalFontInstance* pFont) { auto* pHbFont = pFont->GetHbFont(); + + hb_position_t nUnderlineSize; + if (!hb_ot_metrics_get_position(pHbFont, HB_OT_METRICS_TAG_UNDERLINE_SIZE, &nUnderlineSize)) + return false; + hb_position_t nUnderlineOffset; + if (!hb_ot_metrics_get_position(pHbFont, HB_OT_METRICS_TAG_UNDERLINE_OFFSET, &nUnderlineOffset)) + return false; + hb_position_t nStrikeoutSize; + if (!hb_ot_metrics_get_position(pHbFont, HB_OT_METRICS_TAG_STRIKEOUT_SIZE, &nStrikeoutSize)) + return false; + hb_position_t nStrikeoutOffset; + if (!hb_ot_metrics_get_position(pHbFont, HB_OT_METRICS_TAG_STRIKEOUT_OFFSET, &nStrikeoutOffset)) + return false; + double fScale = 0; pFont->GetScale(nullptr, &fScale); - hb_position_t nUnderlineSize, nUnderlineOffset, nStrikeoutSize, nStrikeoutOffset; - if (hb_ot_metrics_get_position(pHbFont, HB_OT_METRICS_TAG_UNDERLINE_SIZE, &nUnderlineSize) - && hb_ot_metrics_get_position(pHbFont, HB_OT_METRICS_TAG_UNDERLINE_OFFSET, - &nUnderlineOffset) - && hb_ot_metrics_get_position(pHbFont, HB_OT_METRICS_TAG_STRIKEOUT_SIZE, &nStrikeoutSize) - && hb_ot_metrics_get_position(pHbFont, HB_OT_METRICS_TAG_STRIKEOUT_OFFSET, - &nStrikeoutOffset)) - { - double nOffset = -nUnderlineOffset; - double nSize = nUnderlineSize; - double nSize2 = nSize / 2.; - double nBSize = nSize * 2.; - double n2Size = nBSize / 3.; - - mnUnderlineSize = std::ceil(nSize * fScale); - mnUnderlineOffset = std::ceil(nOffset * fScale); + double nOffset = -nUnderlineOffset * fScale; + double nSize = nUnderlineSize * fScale; + double nSize2 = nSize / 2.; + double nBSize = nSize * 2.; + double n2Size = nBSize / 3.; + mnUnderlineSize = std::ceil(nSize); + mnUnderlineOffset = std::ceil(nOffset); - mnBUnderlineSize = std::ceil(nBSize * fScale); - mnBUnderlineOffset = std::ceil((nOffset - nSize2) * fScale); + mnBUnderlineSize = std::ceil(nBSize); + mnBUnderlineOffset = std::ceil(nOffset - nSize2); - mnDUnderlineSize = std::ceil(n2Size * fScale); - mnDUnderlineOffset1 = mnBUnderlineOffset; - mnDUnderlineOffset2 = mnBUnderlineOffset + mnDUnderlineSize * 2; + mnDUnderlineSize = std::ceil(n2Size); + mnDUnderlineOffset1 = mnBUnderlineOffset; + mnDUnderlineOffset2 = mnBUnderlineOffset + mnDUnderlineSize * 2; - mnWUnderlineSize = mnBUnderlineSize; - mnWUnderlineOffset = std::ceil((nOffset + nSize) * fScale); + mnWUnderlineSize = mnBUnderlineSize; + mnWUnderlineOffset = std::ceil(nOffset + nSize); - nOffset = -nStrikeoutOffset; - nSize = nStrikeoutSize; - nSize2 = nSize / 2.; - nBSize = nSize * 2.; - n2Size = nBSize / 3.; + nOffset = -nStrikeoutOffset * fScale; + nSize = nStrikeoutSize * fScale; + nSize2 = nSize / 2.; + nBSize = nSize * 2.; + n2Size = nBSize / 3.; - mnStrikeoutSize = std::ceil(nSize * fScale); - mnStrikeoutOffset = std::ceil(nOffset * fScale); + mnStrikeoutSize = std::ceil(nSize); + mnStrikeoutOffset = std::ceil(nOffset); - mnBStrikeoutSize = std::ceil(nBSize * fScale); - mnBStrikeoutOffset = std::round((nOffset - nSize2) * fScale); + mnBStrikeoutSize = std::ceil(nBSize); + mnBStrikeoutOffset = std::round(nOffset - nSize2); - mnDStrikeoutSize = std::ceil(n2Size * fScale); - mnDStrikeoutOffset1 = mnBStrikeoutOffset; - mnDStrikeoutOffset2 = mnBStrikeoutOffset + mnDStrikeoutSize * 2; + mnDStrikeoutSize = std::ceil(n2Size); + mnDStrikeoutOffset1 = mnBStrikeoutOffset; + mnDStrikeoutOffset2 = mnBStrikeoutOffset + mnDStrikeoutSize * 2; - return true; - } - return false; + return true; } void ImplFontMetricData::ImplInitTextLineSize( const OutputDevice* pDev ) -- cgit