| Index: src/gpu/SkGpuDevice.cpp
|
| diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
|
| index 5ba174cafcc53e9f483b7844c1f1d98b173629ac..0e91182f9d3f5fabbb0f26a44b00a0a10c27c948 100644
|
| --- a/src/gpu/SkGpuDevice.cpp
|
| +++ b/src/gpu/SkGpuDevice.cpp
|
| @@ -200,6 +200,12 @@ void SkGpuDevice::initFromRenderTarget(GrContext* context,
|
| fContext = context;
|
| fContext->ref();
|
|
|
| +#if SK_DISTANCEFIELD_FONTS
|
| + fTextContextManager = SkNEW(GrTTextContextManager<GrDistanceFieldTextContext>);
|
| +#else
|
| + fTextContextManager = SkNEW(GrTTextContextManager<GrBitmapTextContext>);
|
| +#endif
|
| +
|
| fRenderTarget = NULL;
|
| fNeedClear = false;
|
|
|
| @@ -235,6 +241,12 @@ SkGpuDevice::SkGpuDevice(GrContext* context,
|
| fContext = context;
|
| fContext->ref();
|
|
|
| +#if SK_DISTANCEFIELD_FONTS
|
| + fTextContextManager = SkNEW(GrTTextContextManager<GrDistanceFieldTextContext>);
|
| +#else
|
| + fTextContextManager = SkNEW(GrTTextContextManager<GrBitmapTextContext>);
|
| +#endif
|
| +
|
| fRenderTarget = NULL;
|
| fNeedClear = false;
|
|
|
| @@ -279,6 +291,8 @@ SkGpuDevice::~SkGpuDevice() {
|
| if (fDrawProcs) {
|
| delete fDrawProcs;
|
| }
|
| +
|
| + delete fTextContextManager;
|
|
|
| // The GrContext takes a ref on the target. We don't want to cause the render
|
| // target to be unnecessarily kept alive.
|
| @@ -1820,13 +1834,15 @@ void SkGpuDevice::drawText(const SkDraw& draw, const void* text,
|
|
|
| SkDEBUGCODE(this->validate();)
|
|
|
| - GrDistanceFieldTextContext context(fContext, grPaint, paint);
|
| + SkAutoTDelete<GrTextContext> context(fTextContextManager->create(fContext, grPaint, paint));
|
| + GrDistanceFieldTextContext* dfContext =
|
| + static_cast<GrDistanceFieldTextContext*>(context.get());
|
|
|
| - SkAutoGlyphCache autoCache(context.getSkPaint(), &this->fLeakyProperties, NULL);
|
| + SkAutoGlyphCache autoCache(dfContext->getSkPaint(), &this->fLeakyProperties, NULL);
|
| SkGlyphCache* cache = autoCache.getCache();
|
| GrFontScaler* fontScaler = get_gr_font_scaler(cache);
|
|
|
| - context.drawText((const char *)text, byteLength, x, y, cache, fontScaler);
|
| + dfContext->drawText((const char *)text, byteLength, x, y, cache, fontScaler);
|
| #endif
|
| } else {
|
| SkDraw myDraw(draw);
|
| @@ -1836,8 +1852,8 @@ void SkGpuDevice::drawText(const SkDraw& draw, const void* text,
|
| return;
|
| }
|
|
|
| - GrBitmapTextContext context(fContext, grPaint, paint.getColor());
|
| - myDraw.fProcs = this->initDrawForText(&context);
|
| + SkAutoTDelete<GrTextContext> context(fTextContextManager->create(fContext, grPaint, paint));
|
| + myDraw.fProcs = this->initDrawForText(context.get());
|
| this->INHERITED::drawText(myDraw, text, byteLength, x, y, paint);
|
| }
|
| }
|
| @@ -1861,13 +1877,15 @@ void SkGpuDevice::drawPosText(const SkDraw& draw, const void* text,
|
|
|
| SkDEBUGCODE(this->validate();)
|
|
|
| - GrDistanceFieldTextContext context(fContext, grPaint, paint);
|
| -
|
| - SkAutoGlyphCache autoCache(context.getSkPaint(), &this->fLeakyProperties, NULL);
|
| + SkAutoTDelete<GrTextContext> context(fTextContextManager->create(fContext, grPaint, paint));
|
| + GrDistanceFieldTextContext* dfContext =
|
| + static_cast<GrDistanceFieldTextContext*>(context.get());
|
| +
|
| + SkAutoGlyphCache autoCache(dfContext->getSkPaint(), &this->fLeakyProperties, NULL);
|
| SkGlyphCache* cache = autoCache.getCache();
|
| GrFontScaler* fontScaler = get_gr_font_scaler(cache);
|
| -
|
| - context.drawPosText((const char *)text, byteLength, pos, constY, scalarsPerPos,
|
| +
|
| + dfContext->drawPosText((const char *)text, byteLength, pos, constY, scalarsPerPos,
|
| cache, fontScaler);
|
| #endif
|
| } else {
|
| @@ -1877,8 +1895,9 @@ void SkGpuDevice::drawPosText(const SkDraw& draw, const void* text,
|
| if (!skPaint2GrPaintShader(this, paint, true, &grPaint)) {
|
| return;
|
| }
|
| - GrBitmapTextContext context(fContext, grPaint, paint.getColor());
|
| - myDraw.fProcs = this->initDrawForText(&context);
|
| +
|
| + SkAutoTDelete<GrTextContext> context(fTextContextManager->create(fContext, grPaint, paint));
|
| + myDraw.fProcs = this->initDrawForText(context.get());
|
| this->INHERITED::drawPosText(myDraw, text, byteLength, pos, constY,
|
| scalarsPerPos, paint);
|
| }
|
|
|