| Index: src/ports/SkFontHost_mac.cpp
|
| diff --git a/src/ports/SkFontHost_mac.cpp b/src/ports/SkFontHost_mac.cpp
|
| index 7d1ef750bd5d3f74336fe7e0a14d25c942103f53..b5d9858b5a8aa2adc0e9403f1078892c510ee8e2 100644
|
| --- a/src/ports/SkFontHost_mac.cpp
|
| +++ b/src/ports/SkFontHost_mac.cpp
|
| @@ -323,12 +323,17 @@ static bool supports_LCD() {
|
| AutoCFRelease<CGColorSpaceRef> colorspace(CGColorSpaceCreateDeviceRGB());
|
| AutoCFRelease<CGContextRef> cgContext(CGBitmapContextCreate(&rgb, 1, 1, 8, 4,
|
| colorspace, BITMAP_INFO_RGB));
|
| - CGContextSelectFont(cgContext, "Helvetica", 16, kCGEncodingMacRoman);
|
| + AutoCFRelease<CTFontRef> ctFont(CTFontCreateWithName(CFSTR("Helvetica"), 16, nullptr));
|
| CGContextSetShouldSmoothFonts(cgContext, true);
|
| CGContextSetShouldAntialias(cgContext, true);
|
| CGContextSetTextDrawingMode(cgContext, kCGTextFill);
|
| CGContextSetGrayFillColor(cgContext, 1, 1);
|
| - CGContextShowTextAtPoint(cgContext, -1, 0, "|", 1);
|
| + CGPoint point = CGPointMake(-1, 0);
|
| + static const UniChar pipeChar = '|';
|
| + CGGlyph pipeGlyph;
|
| + CTFontGetGlyphsForCharacters(ctFont, &pipeChar, &pipeGlyph, 1);
|
| + CTFontDrawGlyphs(ctFont, &pipeGlyph, &point, 1, cgContext);
|
| +
|
| uint32_t r = (rgb >> 16) & 0xFF;
|
| uint32_t g = (rgb >> 8) & 0xFF;
|
| uint32_t b = (rgb >> 0) & 0xFF;
|
| @@ -841,28 +846,9 @@ SkScalerContext_Mac::SkScalerContext_Mac(SkTypeface_Mac* typeface,
|
| fFUnitMatrix.preScale(emPerFUnit, -emPerFUnit);
|
| }
|
|
|
| -/** This is an implementation of CTFontDrawGlyphs for 10.6; it was introduced in 10.7. */
|
| -static void legacy_CTFontDrawGlyphs(CTFontRef, const CGGlyph glyphs[], const CGPoint points[],
|
| - size_t count, CGContextRef cg) {
|
| - CGContextShowGlyphsAtPositions(cg, glyphs, points, count);
|
| -}
|
| -
|
| -typedef decltype(legacy_CTFontDrawGlyphs) CTFontDrawGlyphsProc;
|
| -
|
| -static CTFontDrawGlyphsProc* choose_CTFontDrawGlyphs() {
|
| - if (void* real = dlsym(RTLD_DEFAULT, "CTFontDrawGlyphs")) {
|
| - return (CTFontDrawGlyphsProc*)real;
|
| - }
|
| - return &legacy_CTFontDrawGlyphs;
|
| -}
|
| -
|
| CGRGBPixel* Offscreen::getCG(const SkScalerContext_Mac& context, const SkGlyph& glyph,
|
| CGGlyph glyphID, size_t* rowBytesPtr,
|
| bool generateA8FromLCD) {
|
| - static SkOnce once;
|
| - static CTFontDrawGlyphsProc* ctFontDrawGlyphs;
|
| - once([]{ ctFontDrawGlyphs = choose_CTFontDrawGlyphs(); });
|
| -
|
| if (!fRGBSpace) {
|
| //It doesn't appear to matter what color space is specified.
|
| //Regular blends and antialiased text are always (s*a + d*(1-a))
|
| @@ -930,12 +916,6 @@ CGRGBPixel* Offscreen::getCG(const SkScalerContext_Mac& context, const SkGlyph&
|
| fDoAA = !doAA;
|
| fDoLCD = !doLCD;
|
|
|
| - if (legacy_CTFontDrawGlyphs == ctFontDrawGlyphs) {
|
| - // CTFontDrawGlyphs will apply the font, font size, and font matrix to the CGContext.
|
| - // Our 'fake' one does not, so set up the CGContext here.
|
| - CGContextSetFont(fCG, context.fCGFont);
|
| - CGContextSetFontSize(fCG, CTFontGetSize(context.fCTFont));
|
| - }
|
| CGContextSetTextMatrix(fCG, context.fTransform);
|
| }
|
|
|
| @@ -981,7 +961,7 @@ CGRGBPixel* Offscreen::getCG(const SkScalerContext_Mac& context, const SkGlyph&
|
| // So always make the font transform identity and place the transform on the context.
|
| point = CGPointApplyAffineTransform(point, context.fInvTransform);
|
|
|
| - ctFontDrawGlyphs(context.fCTFont, &glyphID, &point, 1, fCG);
|
| + CTFontDrawGlyphs(context.fCTFont, &glyphID, &point, 1, fCG);
|
|
|
| SkASSERT(rowBytesPtr);
|
| *rowBytesPtr = rowBytes;
|
|
|