From 8c27a188a0b216021d439eb627622d17b9f78343 Mon Sep 17 00:00:00 2001 From: jvanverth Date: Tue, 14 Oct 2014 08:45:50 -0700 Subject: Change GrTextContext fallbacks to be a linked list chain. Preliminary work for getting color emoji working with distance field text. BUG=skia:2887 Review URL: https://codereview.chromium.org/650273003 --- src/gpu/SkGpuDevice.cpp | 46 +++++++++++++--------------------------------- 1 file changed, 13 insertions(+), 33 deletions(-) (limited to 'src/gpu/SkGpuDevice.cpp') diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp index 6f4d1a6f99..0912b3d28e 100644 --- a/src/gpu/SkGpuDevice.cpp +++ b/src/gpu/SkGpuDevice.cpp @@ -147,8 +147,7 @@ SkGpuDevice::SkGpuDevice(GrSurface* surface, const SkSurfaceProps& props, unsign this->setPixelGeometry(props.pixelGeometry()); bool useDFFonts = !!(flags & kDFFonts_Flag); - fMainTextContext = fContext->createTextContext(fRenderTarget, this->getLeakyProperties(), useDFFonts); - fFallbackTextContext = SkNEW_ARGS(GrBitmapTextContext, (fContext, this->getLeakyProperties())); + fTextContext = fContext->createTextContext(fRenderTarget, this->getLeakyProperties(), useDFFonts); } SkGpuDevice* SkGpuDevice::Create(GrContext* context, const SkImageInfo& origInfo, @@ -192,8 +191,7 @@ SkGpuDevice::~SkGpuDevice() { delete fDrawProcs; } - delete fMainTextContext; - delete fFallbackTextContext; + delete fTextContext; // The GrContext takes a ref on the target. We don't want to cause the render // target to be unnecessarily kept alive. @@ -1685,22 +1683,13 @@ void SkGpuDevice::drawText(const SkDraw& draw, const void* text, CHECK_SHOULD_DRAW(draw, false); GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice::drawText", fContext); - if (fMainTextContext->canDraw(paint)) { - GrPaint grPaint; - SkPaint2GrPaintShader(this->context(), paint, true, &grPaint); - - SkDEBUGCODE(this->validate();) - - fMainTextContext->drawText(grPaint, paint, (const char *)text, byteLength, x, y); - } else if (fFallbackTextContext && fFallbackTextContext->canDraw(paint)) { - GrPaint grPaint; - SkPaint2GrPaintShader(this->context(), paint, true, &grPaint); + GrPaint grPaint; + SkPaint2GrPaintShader(this->context(), paint, true, &grPaint); - SkDEBUGCODE(this->validate();) + SkDEBUGCODE(this->validate();) - fFallbackTextContext->drawText(grPaint, paint, (const char *)text, byteLength, x, y); - } else { - // this guy will just call our drawPath() + if (!fTextContext->drawText(grPaint, paint, (const char *)text, byteLength, x, y)) { + // this will just call our drawPath() draw.drawText_asPaths((const char*)text, byteLength, x, y, paint); } } @@ -1711,23 +1700,14 @@ void SkGpuDevice::drawPosText(const SkDraw& draw, const void* text, size_t byteL GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice::drawPosText", fContext); CHECK_SHOULD_DRAW(draw, false); - if (fMainTextContext->canDraw(paint)) { - GrPaint grPaint; - SkPaint2GrPaintShader(this->context(), paint, true, &grPaint); - - SkDEBUGCODE(this->validate();) - - fMainTextContext->drawPosText(grPaint, paint, (const char *)text, byteLength, pos, - scalarsPerPos, offset); - } else if (fFallbackTextContext && fFallbackTextContext->canDraw(paint)) { - GrPaint grPaint; - SkPaint2GrPaintShader(this->context(), paint, true, &grPaint); + GrPaint grPaint; + SkPaint2GrPaintShader(this->context(), paint, true, &grPaint); - SkDEBUGCODE(this->validate();) + SkDEBUGCODE(this->validate();) - fFallbackTextContext->drawPosText(grPaint, paint, (const char *)text, byteLength, pos, - scalarsPerPos, offset); - } else { + if (!fTextContext->drawPosText(grPaint, paint, (const char *)text, byteLength, pos, + scalarsPerPos, offset)) { + // this will just call our drawPath() draw.drawPosText_asPaths((const char*)text, byteLength, pos, scalarsPerPos, offset, paint); } } -- cgit v1.2.3