[Libreoffice-commits] core.git: vcl/source

Khaled Hosny khaledhosny at eglug.org
Tue Oct 3 19:39:46 UTC 2017


 vcl/source/font/fontmetric.cxx |   14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

New commits:
commit 9bc39be417a4c436cbe18391fc87e5e835551b07
Author: Khaled Hosny <khaledhosny at eglug.org>
Date:   Tue Oct 3 19:59:58 2017 +0200

    tdf#107605: Fix line height cslculation for broken fonts
    
    Change-Id: I06368dd15d7898dda61bc07b0f96bf82b00733b9
    Reviewed-on: https://gerrit.libreoffice.org/43095
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Khaled Hosny <khaledhosny at eglug.org>

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;


More information about the Libreoffice-commits mailing list