diff options
author | Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de> | 2018-03-23 14:41:01 +0100 |
---|---|---|
committer | Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de> | 2018-05-30 09:56:18 +0200 |
commit | 2f529db909f99a2a503ca0347a9d70742b7f05ba (patch) | |
tree | 0d1428aea962cc8b5b51b603ef36f0471a8dbf9b /vcl | |
parent | 5d7a28fd2dd7f0c1696d4d8989a5a547e3f2e531 (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.hxx | 3 | ||||
-rw-r--r-- | vcl/source/font/fontmetric.cxx | 26 |
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; |