| 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(); | 
| } | 
|  |