vcl/qa/cppunit/complextext.cxx |    2 +-
 vcl/source/font/fontmetric.cxx |   25 +++++++++++++++----------
 2 files changed, 16 insertions(+), 11 deletions(-)

New commits:
commit 60eed46d4b24b9b9eaa1ebd0a8f185900176aed5
Author: Caolán McNamara <caol...@redhat.com>
Date:   Tue Sep 5 15:24:26 2017 +0100

    Resolves: tdf#107249 round ascent/descent/extleading on conversion to int
    
    Change-Id: Ia3ab5960d5288f5831aaa4ade800ca7513dad766
    Reviewed-on: https://gerrit.libreoffice.org/41955
    Tested-by: Jenkins <c...@libreoffice.org>
    Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com>

diff --git a/vcl/qa/cppunit/complextext.cxx b/vcl/qa/cppunit/complextext.cxx
index 5828a16c77a4..a0fba312aa9f 100644
--- a/vcl/qa/cppunit/complextext.cxx
+++ b/vcl/qa/cppunit/complextext.cxx
@@ -85,7 +85,7 @@ void VclComplexTextTest::testArabic()
 
     // text advance width and line height
     CPPUNIT_ASSERT_EQUAL(72L, pOutDev->GetTextWidth(aOneTwoThree));
-    CPPUNIT_ASSERT_EQUAL(13L, pOutDev->GetTextHeight());
+    CPPUNIT_ASSERT_EQUAL(14L, pOutDev->GetTextHeight());
 
     // exact bounding rectangle, not essentially the same as text width/height
 #if defined(MACOSX) || defined(_WIN32)
diff --git a/vcl/source/font/fontmetric.cxx b/vcl/source/font/fontmetric.cxx
index a255d0403847..7371c1dc7c74 100644
--- a/vcl/source/font/fontmetric.cxx
+++ b/vcl/source/font/fontmetric.cxx
@@ -412,6 +412,7 @@ void ImplFontMetricData::ImplCalcLineSpacing(const 
std::vector<uint8_t>& rHheaDa
     mnAscent = mnDescent = mnExtLeading = mnIntLeading = 0;
 
     double fScale = static_cast<double>(mnHeight) / nUPEM;
+    double fAscent = 0, fDescent = 0, fExtLeading = 0;
 
     vcl::TTGlobalFontInfo rInfo;
     memset(&rInfo, 0, sizeof(vcl::TTGlobalFontInfo));
@@ -420,30 +421,34 @@ void ImplFontMetricData::ImplCalcLineSpacing(const 
std::vector<uint8_t>& rHheaDa
     // Try hhea table first.
     if (rInfo.ascender || rInfo.descender)
     {
-        mnAscent     =  rInfo.ascender  * fScale;
-        mnDescent    = -rInfo.descender * fScale;
-        mnExtLeading =  rInfo.linegap   * fScale;
+        fAscent     = rInfo.ascender  * fScale;
+        fDescent    = -rInfo.descender * fScale;
+        fExtLeading = rInfo.linegap   * fScale;
     }
 
     // But if OS/2 is present, prefer it.
     if (rInfo.winAscent || rInfo.winDescent || rInfo.typoAscender || 
rInfo.typoDescender)
     {
-        if (mnAscent == 0 && mnDescent == 0)
+        if (fAscent == 0 && fDescent == 0)
         {
-            mnAscent     = rInfo.winAscent  * fScale;
-            mnDescent    = rInfo.winDescent * fScale;
-            mnExtLeading = 0;
+            fAscent     = rInfo.winAscent  * fScale;
+            fDescent    = rInfo.winDescent * fScale;
+            fExtLeading = 0;
         }
 
         const uint16_t kUseTypoMetricsMask = 1 << 7;
         if (rInfo.fsSelection & kUseTypoMetricsMask)
         {
-            mnAscent     =  rInfo.typoAscender  * fScale;
-            mnDescent    = -rInfo.typoDescender * fScale;
-            mnExtLeading =  rInfo.typoLineGap   * fScale;
+            fAscent     =  rInfo.typoAscender  * fScale;
+            fDescent    = -rInfo.typoDescender * fScale;
+            fExtLeading =  rInfo.typoLineGap   * fScale;
         }
     }
 
+    mnAscent = round(fAscent);
+    mnDescent = round(fDescent);
+    mnExtLeading = round(fExtLeading);
+
     if (mnAscent || mnDescent)
         mnIntLeading = mnAscent + mnDescent - mnHeight;
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to