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