diff options
author | Khaled Hosny <khaledhosny@eglug.org> | 2017-10-03 19:59:58 +0200 |
---|---|---|
committer | Khaled Hosny <khaledhosny@eglug.org> | 2017-10-03 21:39:20 +0200 |
commit | 9bc39be417a4c436cbe18391fc87e5e835551b07 (patch) | |
tree | 66d1c19d5f99a64f5c30b3ef39f773254ac74b13 | |
parent | c985ad5f7b479706935459630c5a59ccae6fa8b7 (diff) |
tdf#107605: Fix line height cslculation for broken fonts
Change-Id: I06368dd15d7898dda61bc07b0f96bf82b00733b9
Reviewed-on: https://gerrit.libreoffice.org/43095
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Khaled Hosny <khaledhosny@eglug.org>
-rw-r--r-- | vcl/source/font/fontmetric.cxx | 14 |
1 files changed, 9 insertions, 5 deletions
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<uint8_t>& 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<uint8_t>& 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; |