vcl/inc/impfontmetricdata.hxx  |    2 -
 vcl/source/font/fontmetric.cxx |   42 ++++++++++-------------------------------
 vcl/source/outdev/font.cxx     |    2 -
 vcl/source/outdev/textline.cxx |    2 -
 4 files changed, 14 insertions(+), 34 deletions(-)

New commits:
commit 8da2560a8ddb530abe4fb72b59ef6e18ce219d80
Author:     Khaled Hosny <kha...@aliftype.com>
AuthorDate: Fri Sep 30 19:11:14 2022 +0200
Commit:     خالد حسني <kha...@aliftype.com>
CommitDate: Fri Sep 30 20:55:18 2022 +0200

    vcl: Use the same underline sizes for overlines
    
    It makes no since to have overline of different sizes than underlines,
    and in fonts with big ascenders (like Amiri), we end up calculating much
    thicker overline than underline.
    
    Change-Id: I97e9818c94e815b2eb57813ab22329bc833fd34c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/140804
    Tested-by: Jenkins
    Reviewed-by: خالد حسني <kha...@aliftype.com>

diff --git a/vcl/inc/impfontmetricdata.hxx b/vcl/inc/impfontmetricdata.hxx
index 0fb44a840bda..a94e41540755 100644
--- a/vcl/inc/impfontmetricdata.hxx
+++ b/vcl/inc/impfontmetricdata.hxx
@@ -96,7 +96,7 @@ public:
     tools::Long            GetDoubleStrikeoutOffset2() const                   
            { return mnDStrikeoutOffset2; }
 
     void            ImplInitTextLineSize( const OutputDevice* pDev );
-    void            ImplInitAboveTextLineSize();
+    void            ImplInitAboveTextLineSize( const OutputDevice* pDev );
     void            ImplInitFlags( const OutputDevice* pDev );
     void            ImplCalcLineSpacing(LogicalFontInstance *pFontInstance);
     void            ImplInitBaselines(LogicalFontInstance *pFontInstance);
diff --git a/vcl/source/font/fontmetric.cxx b/vcl/source/font/fontmetric.cxx
index 3895caf7b0fb..cdae023f0b50 100644
--- a/vcl/source/font/fontmetric.cxx
+++ b/vcl/source/font/fontmetric.cxx
@@ -323,8 +323,10 @@ void ImplFontMetricData::ImplInitTextLineSize( const 
OutputDevice* pDev )
 }
 
 
-void ImplFontMetricData::ImplInitAboveTextLineSize()
+void ImplFontMetricData::ImplInitAboveTextLineSize( const OutputDevice* pDev )
 {
+    ImplInitTextLineSize(pDev);
+
     tools::Long nIntLeading = mnIntLeading;
     // TODO: assess usage of nLeading below (changed in extleading CWS)
     // if no leading is available, we assume 15% of the ascent
@@ -335,41 +337,19 @@ void ImplFontMetricData::ImplInitAboveTextLineSize()
             nIntLeading = 1;
     }
 
-    tools::Long nLineHeight = ((nIntLeading*25)+50) / 100;
-    if ( !nLineHeight )
-        nLineHeight = 1;
-
-    tools::Long nBLineHeight = ((nIntLeading*50)+50) / 100;
-    if ( nBLineHeight == nLineHeight )
-        nBLineHeight++;
-
-    tools::Long n2LineHeight = ((nIntLeading*16)+50) / 100;
-    if ( !n2LineHeight )
-        n2LineHeight = 1;
-
     tools::Long nCeiling = -mnAscent;
 
-    mnAboveUnderlineSize       = nLineHeight;
-    mnAboveUnderlineOffset     = nCeiling + (nIntLeading - nLineHeight + 1) / 
2;
-
-    mnAboveBUnderlineSize      = nBLineHeight;
-    mnAboveBUnderlineOffset    = nCeiling + (nIntLeading - nBLineHeight + 1) / 
2;
+    mnAboveUnderlineSize       = mnUnderlineSize;
+    mnAboveUnderlineOffset     = nCeiling + (nIntLeading - mnUnderlineSize + 
1) / 2;
 
-    mnAboveDUnderlineSize      = n2LineHeight;
-    mnAboveDUnderlineOffset1   = nCeiling + (nIntLeading - 3*n2LineHeight + 1) 
/ 2;
-    mnAboveDUnderlineOffset2   = nCeiling + (nIntLeading +   n2LineHeight + 1) 
/ 2;
+    mnAboveBUnderlineSize      = mnBUnderlineSize;
+    mnAboveBUnderlineOffset    = nCeiling + (nIntLeading - mnBUnderlineSize + 
1) / 2;
 
-    tools::Long nWCalcSize = nIntLeading;
-    if ( nWCalcSize < 6 )
-    {
-        if ( (nWCalcSize == 1) || (nWCalcSize == 2) )
-            mnAboveWUnderlineSize = nWCalcSize;
-        else
-            mnAboveWUnderlineSize = 3;
-    }
-    else
-        mnAboveWUnderlineSize = ((nWCalcSize*50)+50) / 100;
+    mnAboveDUnderlineSize      = mnDUnderlineSize;
+    mnAboveDUnderlineOffset1   = nCeiling + (nIntLeading - 3*mnDUnderlineSize 
+ 1) / 2;
+    mnAboveDUnderlineOffset2   = nCeiling + (nIntLeading +   mnDUnderlineSize 
+ 1) / 2;
 
+    mnAboveWUnderlineSize = mnWUnderlineSize;
     mnAboveWUnderlineOffset = nCeiling + (nIntLeading + 1) / 2;
 }
 
diff --git a/vcl/source/outdev/font.cxx b/vcl/source/outdev/font.cxx
index 51a8689e2610..ec24bc9abc6b 100644
--- a/vcl/source/outdev/font.cxx
+++ b/vcl/source/outdev/font.cxx
@@ -755,7 +755,7 @@ bool OutputDevice::ImplNewFont() const
         mpGraphics->GetFontMetric( pFontInstance->mxFontMetric, 0 );
 
         pFontInstance->mxFontMetric->ImplInitTextLineSize( this );
-        pFontInstance->mxFontMetric->ImplInitAboveTextLineSize();
+        pFontInstance->mxFontMetric->ImplInitAboveTextLineSize( this );
         pFontInstance->mxFontMetric->ImplInitFlags( this );
 
         pFontInstance->mnLineHeight = pFontInstance->mxFontMetric->GetAscent() 
+ pFontInstance->mxFontMetric->GetDescent();
diff --git a/vcl/source/outdev/textline.cxx b/vcl/source/outdev/textline.cxx
index b652ce34408c..a4591707b971 100644
--- a/vcl/source/outdev/textline.cxx
+++ b/vcl/source/outdev/textline.cxx
@@ -108,7 +108,7 @@ void OutputDevice::ImplInitTextLineSize()
 
 void OutputDevice::ImplInitAboveTextLineSize()
 {
-    mpFontInstance->mxFontMetric->ImplInitAboveTextLineSize();
+    mpFontInstance->mxFontMetric->ImplInitAboveTextLineSize( this );
 }
 
 void OutputDevice::ImplDrawWavePixel( tools::Long nOriginX, tools::Long 
nOriginY,

Reply via email to