CoreText: Prevent creation of CGContext for glyphs with empty bounding box
If the alphaMapBoundingBox of a glyph is empty we don't want to create a CGBitmapContext on it, as that will fail, and any further operations on the invalid context will result in possibly fatal errors from CG. This issue can be observed when drawing some glyphs of the Apple Color Emoji font. Change-Id: Ia45ba858b5fb6afa91e6d686a9c55e350d4095f3 Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
This commit is contained in:
parent
a669564597
commit
5a060a5ad3
@ -559,6 +559,9 @@ QImage QCoreTextFontEngine::imageForGlyph(glyph_t glyph, QFixed subPixelPosition
|
||||
QImage im(br.width.ceil().toInt(), br.height.ceil().toInt(), imageFormat);
|
||||
im.fill(0);
|
||||
|
||||
if (!im.width() || !im.height())
|
||||
return im;
|
||||
|
||||
#ifndef Q_OS_IOS
|
||||
CGColorSpaceRef colorspace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
|
||||
#else
|
||||
@ -568,9 +571,11 @@ QImage QCoreTextFontEngine::imageForGlyph(glyph_t glyph, QFixed subPixelPosition
|
||||
#ifdef kCGBitmapByteOrder32Host //only needed because CGImage.h added symbols in the minor version
|
||||
cgflags |= kCGBitmapByteOrder32Host;
|
||||
#endif
|
||||
|
||||
CGContextRef ctx = CGBitmapContextCreate(im.bits(), im.width(), im.height(),
|
||||
8, im.bytesPerLine(), colorspace,
|
||||
cgflags);
|
||||
Q_ASSERT(ctx);
|
||||
CGContextSetFontSize(ctx, fontDef.pixelSize);
|
||||
CGContextSetShouldAntialias(ctx, (aa || fontDef.pointSize > antialiasingThreshold)
|
||||
&& !(fontDef.styleStrategy & QFont::NoAntialias));
|
||||
|
Loading…
Reference in New Issue
Block a user