| Index: src/gpu/SkGpuDevice.cpp
|
| diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
|
| index 73eb65b6614af78eab2b14dfde2e50346908ae08..f52385ad7b6595a4259b642a2f89481dfb7dce32 100644
|
| --- a/src/gpu/SkGpuDevice.cpp
|
| +++ b/src/gpu/SkGpuDevice.cpp
|
| @@ -1766,58 +1766,6 @@ void SkGpuDevice::drawVertices(const SkDraw& draw, SkCanvas::VertexMode vmode,
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -static void GlyphCacheAuxProc(void* data) {
|
| - GrFontScaler* scaler = (GrFontScaler*)data;
|
| - SkSafeUnref(scaler);
|
| -}
|
| -
|
| -static GrFontScaler* get_gr_font_scaler(SkGlyphCache* cache) {
|
| - void* auxData;
|
| - GrFontScaler* scaler = NULL;
|
| - if (cache->getAuxProcData(GlyphCacheAuxProc, &auxData)) {
|
| - scaler = (GrFontScaler*)auxData;
|
| - }
|
| - if (NULL == scaler) {
|
| - scaler = SkNEW_ARGS(SkGrFontScaler, (cache));
|
| - cache->setAuxProc(GlyphCacheAuxProc, scaler);
|
| - }
|
| - return scaler;
|
| -}
|
| -
|
| -static void SkGPU_Draw1Glyph(const SkDraw1Glyph& state,
|
| - SkFixed fx, SkFixed fy,
|
| - const SkGlyph& glyph) {
|
| - SkASSERT(glyph.fWidth > 0 && glyph.fHeight > 0);
|
| -
|
| - GrSkDrawProcs* procs = static_cast<GrSkDrawProcs*>(state.fDraw->fProcs);
|
| -
|
| - if (NULL == procs->fFontScaler) {
|
| - procs->fFontScaler = get_gr_font_scaler(state.fCache);
|
| - }
|
| -
|
| - procs->fTextContext->drawPackedGlyph(GrGlyph::Pack(glyph.getGlyphID(),
|
| - glyph.getSubXFixed(),
|
| - glyph.getSubYFixed()),
|
| - SkFixedFloorToFixed(fx),
|
| - SkFixedFloorToFixed(fy),
|
| - procs->fFontScaler);
|
| -}
|
| -
|
| -SkDrawProcs* SkGpuDevice::initDrawForText(GrTextContext* context) {
|
| -
|
| - // deferred allocation
|
| - if (NULL == fDrawProcs) {
|
| - fDrawProcs = SkNEW(GrSkDrawProcs);
|
| - fDrawProcs->fD1GProc = SkGPU_Draw1Glyph;
|
| - fDrawProcs->fContext = fContext;
|
| - }
|
| -
|
| - // init our (and GL's) state
|
| - fDrawProcs->fTextContext = context;
|
| - fDrawProcs->fFontScaler = NULL;
|
| - return fDrawProcs;
|
| -}
|
| -
|
| void SkGpuDevice::drawText(const SkDraw& draw, const void* text,
|
| size_t byteLength, SkScalar x, SkScalar y,
|
| const SkPaint& paint) {
|
| @@ -1825,8 +1773,7 @@ void SkGpuDevice::drawText(const SkDraw& draw, const void* text,
|
|
|
| if (SkDraw::ShouldDrawTextAsPaths(paint, fContext->getMatrix())) {
|
| draw.drawText_asPaths((const char*)text, byteLength, x, y, paint);
|
| -#if SK_DISTANCEFIELD_FONTS
|
| - } else if (!paint.getRasterizer()) {
|
| + } else {
|
| GrPaint grPaint;
|
| if (!skPaint2GrPaintShader(this, paint, true, &grPaint)) {
|
| return;
|
| @@ -1834,27 +1781,10 @@ void SkGpuDevice::drawText(const SkDraw& draw, const void* text,
|
|
|
| SkDEBUGCODE(this->validate();)
|
|
|
| - 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);
|
| -
|
| - dfContext->drawText((const char *)text, byteLength, x, y, cache, fontScaler);
|
| -#endif
|
| - } else {
|
| - SkDraw myDraw(draw);
|
| -
|
| - GrPaint grPaint;
|
| - if (!skPaint2GrPaintShader(this, paint, true, &grPaint)) {
|
| - return;
|
| - }
|
| -
|
| - SkAutoTDelete<GrTextContext> context(fTextContextManager->create(fContext, grPaint, paint));
|
| - myDraw.fProcs = this->initDrawForText(context.get());
|
| - this->INHERITED::drawText(myDraw, text, byteLength, x, y, paint);
|
| + SkAutoTDelete<GrTextContext> ctx(fTextContextManager->create(this->context(),
|
| + grPaint, paint,
|
| + this->getDeviceProperties()));
|
| + ctx->drawText((const char *)text, byteLength, x, y);
|
| }
|
| }
|
|
|
| @@ -1868,8 +1798,7 @@ void SkGpuDevice::drawPosText(const SkDraw& draw, const void* text,
|
| // this guy will just call our drawPath()
|
| draw.drawPosText_asPaths((const char*)text, byteLength, pos, constY,
|
| scalarsPerPos, paint);
|
| -#if SK_DISTANCEFIELD_FONTS
|
| - } else if (!paint.getRasterizer()) {
|
| + } else {
|
| GrPaint grPaint;
|
| if (!skPaint2GrPaintShader(this, paint, true, &grPaint)) {
|
| return;
|
| @@ -1877,29 +1806,10 @@ void SkGpuDevice::drawPosText(const SkDraw& draw, const void* text,
|
|
|
| SkDEBUGCODE(this->validate();)
|
|
|
| - 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);
|
| -
|
| - dfContext->drawPosText((const char *)text, byteLength, pos, constY, scalarsPerPos,
|
| - cache, fontScaler);
|
| -#endif
|
| - } else {
|
| - SkDraw myDraw(draw);
|
| -
|
| - GrPaint grPaint;
|
| - if (!skPaint2GrPaintShader(this, paint, true, &grPaint)) {
|
| - return;
|
| - }
|
| -
|
| - SkAutoTDelete<GrTextContext> context(fTextContextManager->create(fContext, grPaint, paint));
|
| - myDraw.fProcs = this->initDrawForText(context.get());
|
| - this->INHERITED::drawPosText(myDraw, text, byteLength, pos, constY,
|
| - scalarsPerPos, paint);
|
| + SkAutoTDelete<GrTextContext> ctx(fTextContextManager->create(this->context(),
|
| + grPaint, paint,
|
| + this->getDeviceProperties()));
|
| + ctx->drawPosText((const char *)text, byteLength, pos, constY, scalarsPerPos);
|
| }
|
| }
|
|
|
|
|