| Index: src/gpu/GrDistanceFieldTextContext.cpp
|
| diff --git a/src/gpu/GrDistanceFieldTextContext.cpp b/src/gpu/GrDistanceFieldTextContext.cpp
|
| index 52b714ce25ccb6326515b828bf195dcac6bac3f0..ac93433207224464c48f403a03c5c531c4bb6f8c 100755
|
| --- a/src/gpu/GrDistanceFieldTextContext.cpp
|
| +++ b/src/gpu/GrDistanceFieldTextContext.cpp
|
| @@ -27,17 +27,9 @@ static const int kBaseDFFontSize = 32;
|
| SK_CONF_DECLARE(bool, c_DumpFontCache, "gpu.dumpFontCache", false,
|
| "Dump the contents of the font cache before every purge.");
|
|
|
| -bool GrDistanceFieldTextContext::CanDraw(const SkPaint& paint, const SkMatrix& ctm) {
|
| - return !paint.getRasterizer() && !paint.getMaskFilter() &&
|
| - paint.getStyle() == SkPaint::kFill_Style &&
|
| - !SkDraw::ShouldDrawTextAsPaths(paint, ctm);
|
| -}
|
| -
|
| GrDistanceFieldTextContext::GrDistanceFieldTextContext(GrContext* context,
|
| - const GrPaint& grPaint,
|
| - const SkPaint& skPaint,
|
| const SkDeviceProperties& properties)
|
| - : GrTextContext(context, grPaint, skPaint, properties) {
|
| + : GrTextContext(context, properties) {
|
| fStrike = NULL;
|
|
|
| fCurrTexture = NULL;
|
| @@ -45,19 +37,18 @@ GrDistanceFieldTextContext::GrDistanceFieldTextContext(GrContext* context,
|
|
|
| fVertices = NULL;
|
| fMaxVertices = 0;
|
| -
|
| - fTextRatio = fSkPaint.getTextSize()/kBaseDFFontSize;
|
| -
|
| - fSkPaint.setTextSize(SkIntToScalar(kBaseDFFontSize));
|
| - fSkPaint.setLCDRenderText(false);
|
| - fSkPaint.setAutohinted(false);
|
| - fSkPaint.setSubpixelText(false);
|
| }
|
|
|
| GrDistanceFieldTextContext::~GrDistanceFieldTextContext() {
|
| this->flushGlyphs();
|
| }
|
|
|
| +bool GrDistanceFieldTextContext::canDraw(const SkPaint& paint) {
|
| + return !paint.getRasterizer() && !paint.getMaskFilter() &&
|
| + paint.getStyle() == SkPaint::kFill_Style &&
|
| + !SkDraw::ShouldDrawTextAsPaths(paint, fContext->getMatrix());
|
| +}
|
| +
|
| static inline GrColor skcolor_to_grcolor_nopremultiply(SkColor c) {
|
| unsigned r = SkColorGetR(c);
|
| unsigned g = SkColorGetG(c);
|
| @@ -291,7 +282,33 @@ HAS_ATLAS:
|
| fCurrVertex += 4;
|
| }
|
|
|
| -void GrDistanceFieldTextContext::drawText(const char text[], size_t byteLength,
|
| +inline void GrDistanceFieldTextContext::init(const GrPaint& paint, const SkPaint& skPaint) {
|
| + GrTextContext::init(paint, skPaint);
|
| +
|
| + fStrike = NULL;
|
| +
|
| + fCurrTexture = NULL;
|
| + fCurrVertex = 0;
|
| +
|
| + fVertices = NULL;
|
| + fMaxVertices = 0;
|
| +
|
| + fTextRatio = fSkPaint.getTextSize()/kBaseDFFontSize;
|
| +
|
| + fSkPaint.setTextSize(SkIntToScalar(kBaseDFFontSize));
|
| + fSkPaint.setLCDRenderText(false);
|
| + fSkPaint.setAutohinted(false);
|
| + fSkPaint.setSubpixelText(false);
|
| +}
|
| +
|
| +inline void GrDistanceFieldTextContext::finish() {
|
| + flushGlyphs();
|
| +
|
| + GrTextContext::finish();
|
| +}
|
| +
|
| +void GrDistanceFieldTextContext::drawText(const GrPaint& paint, const SkPaint& skPaint,
|
| + const char text[], size_t byteLength,
|
| SkScalar x, SkScalar y) {
|
| SkASSERT(byteLength == 0 || text != NULL);
|
|
|
| @@ -301,6 +318,8 @@ void GrDistanceFieldTextContext::drawText(const char text[], size_t byteLength,
|
| return;
|
| }
|
|
|
| + this->init(paint, skPaint);
|
| +
|
| SkScalar sizeRatio = fTextRatio;
|
|
|
| SkDrawCacheProc glyphCacheProc = fSkPaint.getDrawCacheProc();
|
| @@ -357,9 +376,12 @@ void GrDistanceFieldTextContext::drawText(const char text[], size_t byteLength,
|
| fx += SkFixedMul_portable(glyph.fAdvanceX, fixedScale);
|
| fy += SkFixedMul_portable(glyph.fAdvanceY, fixedScale);
|
| }
|
| +
|
| + this->finish();
|
| }
|
|
|
| -void GrDistanceFieldTextContext::drawPosText(const char text[], size_t byteLength,
|
| +void GrDistanceFieldTextContext::drawPosText(const GrPaint& paint, const SkPaint& skPaint,
|
| + const char text[], size_t byteLength,
|
| const SkScalar pos[], SkScalar constY,
|
| int scalarsPerPosition) {
|
|
|
| @@ -367,11 +389,12 @@ void GrDistanceFieldTextContext::drawPosText(const char text[], size_t byteLengt
|
| SkASSERT(1 == scalarsPerPosition || 2 == scalarsPerPosition);
|
|
|
| // nothing to draw
|
| - if (text == NULL || byteLength == 0 /* no raster clip? || fRC->isEmpty()*/
|
| - || fSkPaint.getRasterizer()) {
|
| + if (text == NULL || byteLength == 0 /* no raster clip? || fRC->isEmpty()*/) {
|
| return;
|
| }
|
|
|
| + this->init(paint, skPaint);
|
| +
|
| SkDrawCacheProc glyphCacheProc = fSkPaint.getDrawCacheProc();
|
|
|
| SkAutoGlyphCache autoCache(fSkPaint, &fDeviceProperties, NULL);
|
| @@ -420,4 +443,6 @@ void GrDistanceFieldTextContext::drawPosText(const char text[], size_t byteLengt
|
| pos += scalarsPerPosition;
|
| }
|
| }
|
| +
|
| + this->finish();
|
| }
|
|
|