[Libreoffice-commits] core.git: vcl/quartz vcl/unx vcl/win
Khaled Hosny
khaledhosny at eglug.org
Tue Oct 25 21:37:47 UTC 2016
vcl/quartz/ctfonts.cxx | 14 ++++++++++++++
vcl/unx/generic/fontmanager/fontconfig.cxx | 12 ++++++++++++
vcl/win/gdi/salfont.cxx | 9 +++++++++
3 files changed, 35 insertions(+)
New commits:
commit 48304cb5b4d8df71463837e2e48aa7c4d9594df9
Author: Khaled Hosny <khaledhosny at eglug.org>
Date: Tue Oct 25 02:25:08 2016 +0200
Skip font formats not supported by CommonSalLayout
Don’t list fonts we can’t handle, bad things would happen…
Change-Id: Ic88486e34da69090deb3e8c394cb75a8e4e5cbd0
diff --git a/vcl/quartz/ctfonts.cxx b/vcl/quartz/ctfonts.cxx
index ac17abc..948bfb5 100644
--- a/vcl/quartz/ctfonts.cxx
+++ b/vcl/quartz/ctfonts.cxx
@@ -341,6 +341,20 @@ FontAttributes DevFontFromCTFontDescriptor( CTFontDescriptorRef pFD, bool* bFont
// get font attributes
CFDictionaryRef pAttrDict = static_cast<CFDictionaryRef>(CTFontDescriptorCopyAttribute( pFD, kCTFontTraitsAttribute ));
+ if (bFontEnabled && *bFontEnabled && SalLayout::UseCommonLayout())
+ {
+ // Ignore font formats not supported by CommonSalLayout.
+ int nFormat;
+ CFNumberRef pFormat = static_cast<CFNumberRef>(CTFontDescriptorCopyAttribute(pFD, kCTFontFormatAttribute));
+ CFNumberGetValue(pFormat, kCFNumberIntType, &nFormat);
+ if (nFormat == kCTFontFormatUnrecognized || nFormat == kCTFontFormatPostScript || nFormat == kCTFontFormatBitmap)
+ {
+ SAL_INFO("vcl.fonts", "Ignoring font with unsupported format: " << rDFA.GetFamilyName());
+ *bFontEnabled = false;
+ }
+ CFRelease(pFormat);
+ }
+
// get symbolic trait
// TODO: use other traits such as MonoSpace/Condensed/Expanded or Vertical too
SInt64 nSymbolTrait = 0;
diff --git a/vcl/unx/generic/fontmanager/fontconfig.cxx b/vcl/unx/generic/fontmanager/fontconfig.cxx
index cbdbd33..a8731401 100644
--- a/vcl/unx/generic/fontmanager/fontconfig.cxx
+++ b/vcl/unx/generic/fontmanager/fontconfig.cxx
@@ -25,6 +25,7 @@
#include <vcl/vclenum.hxx>
#include <vcl/wrkwin.hxx>
#include "fontinstance.hxx"
+#include "sallayout.hxx"
#include <i18nlangtag/languagetag.hxx>
#include <i18nutil/unicode.hxx>
#include <rtl/strbuf.hxx>
@@ -119,6 +120,17 @@ void FontCfgWrapper::addFontSet( FcSetName eSetName )
FcResult eOutRes = FcPatternGetBool( pPattern, FC_OUTLINE, 0, &bOutline );
if( (eOutRes != FcResultMatch) || (bOutline == FcFalse) )
continue;
+ if (SalLayout::UseCommonLayout())
+ {
+ // Ignore Type 1 fonts; CommonSalLayout does not support them.
+ FcChar8* pFormat = nullptr;
+ FcResult eFormatRes = FcPatternGetString(pPattern, FC_FONTFORMAT, 0, &pFormat);
+ if ((eFormatRes == FcResultMatch) &&
+ (strcmp(reinterpret_cast<char*>(pFormat), "Type 1") == 0))
+ {
+ continue;
+ }
+ }
FcPatternReference( pPattern );
FcFontSetAdd( m_pOutlineSet, pPattern );
}
diff --git a/vcl/win/gdi/salfont.cxx b/vcl/win/gdi/salfont.cxx
index 956459b..7f11d65 100644
--- a/vcl/win/gdi/salfont.cxx
+++ b/vcl/win/gdi/salfont.cxx
@@ -1532,6 +1532,15 @@ int CALLBACK SalEnumFontsProcExW( const LOGFONTW* lpelfe,
if( (nFontType & RASTER_FONTTYPE) && !(nFontType & DEVICE_FONTTYPE) )
return 1;
+ // Ignore font formats not supported by CommonSalLayout.
+ if (SalLayout::UseCommonLayout())
+ if ((nFontType & RASTER_FONTTYPE))
+ {
+ SAL_INFO("vcl.fonts", "Ignoring font with unsupported format: "
+ << OUString(reinterpret_cast<const sal_Unicode*>(pLogFont->elfLogFont.lfFaceName)));
+ return 1;
+ }
+
WinFontFace* pData = ImplLogMetricToDevFontDataW( pLogFont, &(pMetric->ntmTm), nFontType );
pData->SetFontId( sal_IntPtr( pInfo->mnFontCount++ ) );
More information about the Libreoffice-commits
mailing list