[Libreoffice-commits] core.git: Branch 'feature/commonsallayout' - vcl/quartz
Khaled Hosny
khaledhosny at eglug.org
Fri Oct 14 00:52:49 UTC 2016
vcl/quartz/salgdi.cxx | 42 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 42 insertions(+)
New commits:
commit 28bfc0984b1728b5a82c6b630277646b4c0a2794
Author: Khaled Hosny <khaledhosny at eglug.org>
Date: Fri Oct 14 02:19:32 2016 +0200
Untested first part of macOS font fallback
Change-Id: I0d9a5b9f951755e8f12d26116ee2c99bda1d42ce
diff --git a/vcl/quartz/salgdi.cxx b/vcl/quartz/salgdi.cxx
index bb99737..37982a8 100644
--- a/vcl/quartz/salgdi.cxx
+++ b/vcl/quartz/salgdi.cxx
@@ -55,6 +55,45 @@
using namespace vcl;
+class CoreTextGlyphFallbackSubstititution
+: public ImplGlyphFallbackFontSubstitution
+{
+public:
+ bool FindFontSubstitute(FontSelectPattern&, OUString&) const override;
+}
+
+bool CoreTextGlyphFallbackSubstititution::FindFontSubstitute(FontSelectPattern& rPattern,
+ OUString& rMissingChars) const
+{
+ bool bFound = false;
+ CoreTextStyle rStyle(rPattern);
+ CTFontRef pFont = static_cast<CTFontRef>(CFDictionaryGetValue(rStyle.GetStyleDict(), kCTFontAttributeName));
+ CFStringRef pStr = CreateCFString(rMissingChars);
+ if (pStr)
+ {
+ CTFontRef pFallback = CTFontCreateForString(pFont, pStr, CFRangeMake(0, CFStringGetLength(pStr)));
+ if (pFallback)
+ {
+ bFound = true;
+
+ CTFontDescriptorRef pDesc = CTFontCopyFontDescriptor(pFallback);
+ FontAttributes rAttr = DevFontFromCTFontDescriptor(pDesc, nullptr);
+
+ rPattern.maSearchName = rAttr.GetFamilyName();
+
+ rPattern.SetWeight(rAttr.GetWeight());
+ rPattern.SetItalic(rAttr.GetItalic());
+ rPattern.SetPitch(rAttr.GetPitch());
+ rPattern.SetWidthType(rAttr.GetWidthType());
+
+ CFRelease(pFallback);
+ }
+ CFRelease(pStr);
+ }
+
+ return bFound;
+}
+
CoreTextFontFace::CoreTextFontFace( const CoreTextFontFace& rSrc )
: PhysicalFontFace( rSrc )
, mnFontId( rSrc.mnFontId )
@@ -387,6 +426,9 @@ void AquaSalGraphics::GetDevFontList( PhysicalFontCollection* pFontCollection )
// Copy all PhysicalFontFace objects contained in the SystemFontList
pSalData->mpFontList->AnnounceFonts( *pFontCollection );
+
+ static CoreTextGlyphFallbackSubstititution aSubstFallback;
+ pFontCollection->SetFallbackHook(&aSubstFallback);
}
void AquaSalGraphics::ClearDevFontCache()
More information about the Libreoffice-commits
mailing list