officecfg/registry/schema/org/openoffice/Office/Common.xcs | 12 ++++++ vcl/inc/impfontmetricdata.hxx | 3 + vcl/source/font/fontmetric.cxx | 26 ++++++++++++- 3 files changed, 40 insertions(+), 1 deletion(-)
New commits: commit 2f529db909f99a2a503ca0347a9d70742b7f05ba Author: Samuel Mehrbrodt <samuel.mehrbr...@cib.de> Date: Fri Mar 23 14:41:01 2018 +0100 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.mehrbr...@cib.de> Tested-by: Samuel Mehrbrodt <samuel.mehrbr...@cib.de> diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs b/officecfg/registry/schema/org/openoffice/Office/Common.xcs index 88b6f3b07f1b..3d73cc94deb2 100644 --- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs +++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs @@ -5295,6 +5295,18 @@ </info> <value>EmojiOne Color</value> </prop> + <prop oor:name="FontsUseWinMetrics" oor:type="oor:string-list" oor:nillable="false"> + <info> + <desc> + Fonts where the win metrics need to be considered in order to display the font correctly + Fonts are identified by their name and the font metrics (see fontmetric.cxx:ShouldUseWinMetrics). + </desc> + </info> + <value> + <!-- DIN Light (ttf version) has odd metrics. The otf version works fine. --> + <it>DIN Light,1509,-503,1509,-483,1997,483</it> + </value> + </prop> <prop oor:name="PluginsEnabled" oor:type="xs:boolean" oor:nillable="false"> <!-- OldPath: ? --> <!-- OldLocation: soffice.ini --> 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; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits