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: خالد حسني <[email protected]>
diff --git a/vcl/inc/impfontmetricdata.hxx b/vcl/inc/impfontmetricdata.hxx
index 0fb44a8..a94e415 100644
--- a/vcl/inc/impfontmetricdata.hxx
+++ b/vcl/inc/impfontmetricdata.hxx
@@ -96,7 +96,7 @@
    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 3895caf..cdae023 100644
--- a/vcl/source/font/fontmetric.cxx
+++ b/vcl/source/font/fontmetric.cxx
@@ -323,8 +323,10 @@
}


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 @@
            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;
    mnAboveUnderlineSize       = mnUnderlineSize;
    mnAboveUnderlineOffset     = nCeiling + (nIntLeading - mnUnderlineSize + 1) / 2;

    mnAboveBUnderlineSize      = nBLineHeight;
    mnAboveBUnderlineOffset    = nCeiling + (nIntLeading - nBLineHeight + 1) / 2;
    mnAboveBUnderlineSize      = mnBUnderlineSize;
    mnAboveBUnderlineOffset    = nCeiling + (nIntLeading - mnBUnderlineSize + 1) / 2;

    mnAboveDUnderlineSize      = n2LineHeight;
    mnAboveDUnderlineOffset1   = nCeiling + (nIntLeading - 3*n2LineHeight + 1) / 2;
    mnAboveDUnderlineOffset2   = nCeiling + (nIntLeading +   n2LineHeight + 1) / 2;
    mnAboveDUnderlineSize      = mnDUnderlineSize;
    mnAboveDUnderlineOffset1   = nCeiling + (nIntLeading - 3*mnDUnderlineSize + 1) / 2;
    mnAboveDUnderlineOffset2   = nCeiling + (nIntLeading +   mnDUnderlineSize + 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;

    mnAboveWUnderlineSize = mnWUnderlineSize;
    mnAboveWUnderlineOffset = nCeiling + (nIntLeading + 1) / 2;
}

diff --git a/vcl/source/outdev/font.cxx b/vcl/source/outdev/font.cxx
index 51a8689..ec24bc9 100644
--- a/vcl/source/outdev/font.cxx
+++ b/vcl/source/outdev/font.cxx
@@ -755,7 +755,7 @@
        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 b652ce3..a459170 100644
--- a/vcl/source/outdev/textline.cxx
+++ b/vcl/source/outdev/textline.cxx
@@ -108,7 +108,7 @@

void OutputDevice::ImplInitAboveTextLineSize()
{
    mpFontInstance->mxFontMetric->ImplInitAboveTextLineSize();
    mpFontInstance->mxFontMetric->ImplInitAboveTextLineSize( this );
}

void OutputDevice::ImplDrawWavePixel( tools::Long nOriginX, tools::Long nOriginY,