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,