summaryrefslogtreecommitdiff
path: root/vcl/quartz
diff options
context:
space:
mode:
authorKhaled Hosny <khaledhosny@eglug.org>2016-12-12 14:51:32 +0200
committerKhaled Hosny <khaledhosny@eglug.org>2016-12-12 20:01:29 +0000
commit04a77bfa9c5a3da6d99ee6ad8d4802638b7d76fa (patch)
tree1ae9f6b1930f2983661fc509743b3ee45fd63e42 /vcl/quartz
parent385f6240278b38643894158d2eb7001f25fc965b (diff)
Don’t return false for blank glyphs
CTFontCreatePathForGlyph() will return NULL for blank glyphs causing CoreTextStyle::GetGlyphOutline() to return false which propagated as error all the way to OutputDevice::GetTextOutlines() causing it to needlessly enter into fallback code. Other implementations just return true and an empty polygon here. Change-Id: Ib20ebff00f7cb3aae22f1c6b4c3a0e9d7a429987 Reviewed-on: https://gerrit.libreoffice.org/31902 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Khaled Hosny <khaledhosny@eglug.org>
Diffstat (limited to 'vcl/quartz')
-rw-r--r--vcl/quartz/ctfonts.cxx13
1 files changed, 13 insertions, 0 deletions
diff --git a/vcl/quartz/ctfonts.cxx b/vcl/quartz/ctfonts.cxx
index f5ea6dbc45e2..1c60db31a2be 100644
--- a/vcl/quartz/ctfonts.cxx
+++ b/vcl/quartz/ctfonts.cxx
@@ -231,6 +231,19 @@ bool CoreTextStyle::GetGlyphOutline(const GlyphItem& rGlyph, basegfx::B2DPolyPol
CGGlyph nCGGlyph = rGlyph.maGlyphId;
CTFontRef pCTFont = static_cast<CTFontRef>(CFDictionaryGetValue( mpStyleDict, kCTFontAttributeName ));
+
+ SAL_WNODEPRECATED_DECLARATIONS_PUSH
+ const CTFontOrientation aFontOrientation = kCTFontDefaultOrientation;
+ SAL_WNODEPRECATED_DECLARATIONS_POP
+ CGRect aCGRect = CTFontGetBoundingRectsForGlyphs(pCTFont, aFontOrientation, &nCGGlyph, nullptr, 1);
+
+ if (!CGRectIsNull(aCGRect) && CGRectIsEmpty(aCGRect))
+ {
+ // CTFontCreatePathForGlyph returns NULL for blank glyphs, but we want
+ // to return true for them.
+ return true;
+ }
+
CGPathRef xPath = CTFontCreatePathForGlyph( pCTFont, nCGGlyph, nullptr );
if (!xPath)
{