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

New commits:
commit 55858a50cfb12cb6a4207bf906df676e799c1213
Author:     Khaled Hosny <kha...@aliftype.com>
AuthorDate: Sun Nov 27 01:42:17 2022 +0200
Commit:     خالد حسني <kha...@aliftype.com>
CommitDate: Sun Nov 27 14:58:05 2022 +0100

    tdf#152214: make sure underlines are shown on small zoom levels
    
    On small zoom levels we were ending up with underline sizes of zero, so
    use ceil() instead of round() to prevent this. Also make sure double
    lines don’t end up collapsing into each other by changing how the second
    offset is calculated so that they is always a minimum distance between
    the two.
    
    Change-Id: I526685cebce3dddc9df6110e7ffad2729af2be93
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/143333
    Tested-by: Jenkins
    Reviewed-by: خالد حسني <kha...@aliftype.com>

diff --git a/vcl/source/font/fontmetric.cxx b/vcl/source/font/fontmetric.cxx
index 7b40d46a1123..f6f8bd643d42 100644
--- a/vcl/source/font/fontmetric.cxx
+++ b/vcl/source/font/fontmetric.cxx
@@ -196,18 +196,19 @@ bool 
ImplFontMetricData::ImplInitTextLineSizeHarfBuzz(LogicalFontInstance* pFont
         double nBSize = nSize * 2.;
         double n2Size = nBSize / 3.;
 
-        mnUnderlineSize = round(nSize * fScale);
-        mnUnderlineOffset = round(nOffset * fScale);
+        mnUnderlineSize = std::ceil(nSize * fScale);
+        mnUnderlineOffset = std::ceil(nOffset * fScale);
 
-        mnBUnderlineSize = round(nBSize * fScale);
-        mnBUnderlineOffset = round((nOffset - nSize2) * fScale);
 
-        mnDUnderlineSize = round(n2Size * fScale);
+        mnBUnderlineSize = std::ceil(nBSize * fScale);
+        mnBUnderlineOffset = std::ceil((nOffset - nSize2) * fScale);
+
+        mnDUnderlineSize = std::ceil(n2Size * fScale);
         mnDUnderlineOffset1 = mnBUnderlineOffset;
-        mnDUnderlineOffset2 = round((nOffset - nSize2 - n2Size + nBSize) * 
fScale);
+        mnDUnderlineOffset2 = mnBUnderlineOffset + mnDUnderlineSize * 2;
 
         mnWUnderlineSize = mnBUnderlineSize;
-        mnWUnderlineOffset = round((nOffset + nSize) * fScale);
+        mnWUnderlineOffset = std::ceil((nOffset + nSize) * fScale);
 
         nOffset = -nStrikeoutOffset;
         nSize = nStrikeoutSize;
@@ -215,15 +216,15 @@ bool 
ImplFontMetricData::ImplInitTextLineSizeHarfBuzz(LogicalFontInstance* pFont
         nBSize = nSize * 2.;
         n2Size = nBSize / 3.;
 
-        mnStrikeoutSize = round(nSize * fScale);
-        mnStrikeoutOffset = round(nOffset * fScale);
+        mnStrikeoutSize = std::ceil(nSize * fScale);
+        mnStrikeoutOffset = std::ceil(nOffset * fScale);
 
-        mnBStrikeoutSize = round(nBSize * fScale);
-        mnBStrikeoutOffset = round((nOffset - nSize2) * fScale);
+        mnBStrikeoutSize = std::ceil(nBSize * fScale);
+        mnBStrikeoutOffset = std::round((nOffset - nSize2) * fScale);
 
-        mnDStrikeoutSize = round(n2Size * fScale);
+        mnDStrikeoutSize = std::ceil(n2Size * fScale);
         mnDStrikeoutOffset1 = mnBStrikeoutOffset;
-        mnDStrikeoutOffset2 = round((nOffset - nSize2 - n2Size + nBSize) * 
fScale);
+        mnDStrikeoutOffset2 = mnBStrikeoutOffset + mnDStrikeoutSize * 2;
 
         return true;
     }

Reply via email to