void RandomScalerContext::generateImage(const SkGlyph& glyph) { // TODO: can force down but not up /* SkMask::Format format = (SkMask::Format)glyph.fMaskFormat; switch (glyph.getGlyphID() % 4) { case 0: format = SkMask::kLCD16_Format; break; case 1: format = SkMask::kA8_Format; break; case 2: format = SkMask::kARGB32_Format; break; case 3: format = SkMask::kBW_Format; break; } const_cast<SkGlyph&>(glyph).fMaskFormat = format; */ if (fFakeIt) { sk_bzero(glyph.fImage, glyph.computeImageSize()); return; } if (SkMask::kARGB32_Format != glyph.fMaskFormat) { fProxy->getImage(glyph); return; } // If the format is ARGB, just draw the glyph from path. SkPath path; if (!fProxy->getPath(glyph.getPackedID(), &path)) { fProxy->getImage(glyph); return; } SkBitmap bm; bm.installPixels(SkImageInfo::MakeN32Premul(glyph.fWidth, glyph.fHeight), glyph.fImage, glyph.rowBytes()); bm.eraseColor(0); SkCanvas canvas(bm); canvas.translate(-SkIntToScalar(glyph.fLeft), -SkIntToScalar(glyph.fTop)); canvas.drawPath(path, this->getRandomTypeface()->paint()); }