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; }