From 9bc39be417a4c436cbe18391fc87e5e835551b07 Mon Sep 17 00:00:00 2001 From: Khaled Hosny Date: Tue, 3 Oct 2017 19:59:58 +0200 Subject: tdf#107605: Fix line height cslculation for broken fonts Change-Id: I06368dd15d7898dda61bc07b0f96bf82b00733b9 Reviewed-on: https://gerrit.libreoffice.org/43095 Tested-by: Jenkins Reviewed-by: Khaled Hosny --- vcl/source/font/fontmetric.cxx | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'vcl') diff --git a/vcl/source/font/fontmetric.cxx b/vcl/source/font/fontmetric.cxx index 23954b3c67d9..8dfb4cfbb1ad 100644 --- a/vcl/source/font/fontmetric.cxx +++ b/vcl/source/font/fontmetric.cxx @@ -419,15 +419,18 @@ void ImplFontMetricData::ImplCalcLineSpacing(const std::vector& rHheaDa GetTTFontMetrics(rHheaData, rOS2Data, &rInfo); // Try hhea table first. - if (rInfo.ascender || rInfo.descender) + // tdf#107605: Some fonts have weird values here, so check that ascender is + // +ve and descender is -ve as they normally should. + if (rInfo.ascender >= 0 && rInfo.descender <= 0) { - fAscent = rInfo.ascender * fScale; + fAscent = rInfo.ascender * fScale; fDescent = -rInfo.descender * fScale; - fExtLeading = rInfo.linegap * fScale; + fExtLeading = rInfo.linegap * fScale; } // But if OS/2 is present, prefer it. - if (rInfo.winAscent || rInfo.winDescent || rInfo.typoAscender || rInfo.typoDescender) + if (rInfo.winAscent || rInfo.winDescent || + rInfo.typoAscender || rInfo.typoDescender) { if (fAscent == 0 && fDescent == 0) { @@ -437,7 +440,8 @@ void ImplFontMetricData::ImplCalcLineSpacing(const std::vector& rHheaDa } const uint16_t kUseTypoMetricsMask = 1 << 7; - if (rInfo.fsSelection & kUseTypoMetricsMask) + if (rInfo.fsSelection & kUseTypoMetricsMask && + rInfo.typoAscender >= 0 && rInfo.typoDescender <= 0) { fAscent = rInfo.typoAscender * fScale; fDescent = -rInfo.typoDescender * fScale; -- cgit