summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorSamuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>2018-03-23 14:41:01 +0100
committerSamuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>2018-05-30 09:56:18 +0200
commit2f529db909f99a2a503ca0347a9d70742b7f05ba (patch)
tree0d1428aea962cc8b5b51b603ef36f0471a8dbf9b /vcl
parent5d7a28fd2dd7f0c1696d4d8989a5a547e3f2e531 (diff)
tdf#116498 Use win metrics for 'DIN Light' font
This adds a special treatment for fonts which rely on the win metrics for correct line spacing calculation. At the moment, only 'DIN Light' is known to need that treatment. Change-Id: Idd9fd6f63083ab7a706e0cbcd33a947d4949d4e9 Reviewed-on: https://gerrit.libreoffice.org/53962 Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de> Tested-by: Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>
Diffstat (limited to 'vcl')
-rw-r--r--vcl/inc/impfontmetricdata.hxx3
-rw-r--r--vcl/source/font/fontmetric.cxx26
2 files changed, 28 insertions, 1 deletions
diff --git a/vcl/inc/impfontmetricdata.hxx b/vcl/inc/impfontmetricdata.hxx
index f08e86fdc914..28e0ab3798a2 100644
--- a/vcl/inc/impfontmetricdata.hxx
+++ b/vcl/inc/impfontmetricdata.hxx
@@ -23,6 +23,7 @@
#include <vcl/dllapi.h>
#include <tools/ref.hxx>
#include "fontattributes.hxx"
+#include "sft.hxx"
#include <vector>
@@ -96,6 +97,8 @@ public:
int nUPEM);
private:
+ bool ShouldUseWinMetrics(vcl::TTGlobalFontInfo& rInfo);
+
// font instance attributes from the font request
long mnHeight; // Font size
long mnWidth; // Reference Width
diff --git a/vcl/source/font/fontmetric.cxx b/vcl/source/font/fontmetric.cxx
index b619219c44ce..b54e41a1202a 100644
--- a/vcl/source/font/fontmetric.cxx
+++ b/vcl/source/font/fontmetric.cxx
@@ -18,6 +18,7 @@
*/
#include <i18nlangtag/mslangid.hxx>
+#include <officecfg/Office/Common.hxx>
#include <vcl/fontcharmap.hxx>
#include <vcl/metric.hxx>
@@ -28,6 +29,8 @@
#include <PhysicalFontFace.hxx>
#include <sft.hxx>
+#include <com/sun/star/uno/Sequence.hxx>
+
#include <vector>
#include <set>
#include <cstdio>
@@ -398,6 +401,27 @@ void ImplFontMetricData::ImplInitFlags( const OutputDevice* pDev )
SetFullstopCenteredFlag( bCentered );
}
+bool ImplFontMetricData::ShouldUseWinMetrics(vcl::TTGlobalFontInfo& rInfo)
+{
+ OUString aFontIdentifier(
+ GetFamilyName() + ","
+ + OUString::number(rInfo.ascender) + "," + OUString::number(rInfo.descender) + ","
+ + OUString::number(rInfo.typoAscender) + "," + OUString::number(rInfo.typoDescender) + ","
+ + OUString::number(rInfo.winAscent) + "," + OUString::number(rInfo.winDescent));
+
+ css::uno::Sequence<OUString> rWinMetricFontList(
+ officecfg::Office::Common::Misc::FontsUseWinMetrics::get());
+ for (int i = 0; i < rWinMetricFontList.getLength(); ++i)
+ {
+ if (aFontIdentifier == rWinMetricFontList[i])
+ {
+ SAL_INFO("vcl.gdi.fontmetric", "Using win metrics for: " << aFontIdentifier);
+ return true;
+ }
+ }
+ return false;
+}
+
/*
* Calculate line spacing:
*
@@ -440,7 +464,7 @@ void ImplFontMetricData::ImplCalcLineSpacing(const std::vector<uint8_t>& rHheaDa
if (rInfo.winAscent || rInfo.winDescent ||
rInfo.typoAscender || rInfo.typoDescender)
{
- if (fAscent == 0 && fDescent == 0)
+ if (ShouldUseWinMetrics(rInfo) || (fAscent == 0.0 && fDescent == 0.0))
{
fAscent = rInfo.winAscent * fScale;
fDescent = rInfo.winDescent * fScale;