summaryrefslogtreecommitdiff
path: root/vcl/source
diff options
context:
space:
mode:
authorKhaled Hosny <khaled@aliftype.com>2022-12-02 23:21:49 +0200
committerخالد حسني <khaled@aliftype.com>2022-12-03 01:30:54 +0000
commitf1eaad31122024034d8e7299780eeb123204b20a (patch)
treeec365839053b60ed72cab94309ed0ec81a24a31b /vcl/source
parent567c9066933b4c02377368e17a3b32f7ab7c5451 (diff)
vcl: simplify ImplFontMetricData::ImplInitTextLineSizeHarfBuzz() a bit
Change-Id: I844b4fc39784ac093a3339b8912efd236ae152ea Reviewed-on: https://gerrit.libreoffice.org/c/core/+/143605 Tested-by: Jenkins Reviewed-by: خالد حسني <khaled@aliftype.com>
Diffstat (limited to 'vcl/source')
-rw-r--r--vcl/source/font/fontmetric.cxx79
1 files changed, 41 insertions, 38 deletions
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 )