Chromium Code Reviews| Index: src/gpu/SkGpuDevice.cpp |
| diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp |
| index 6f4d1a6f99ea6b83fc5ac1ae99a78704678e8228..f0abf4463f5790001d178e2ab3d1878fa1d35839 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,24 +1683,22 @@ 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();) |
| + GrTextContext* textContext = fTextContext; |
| + do { |
| + if (textContext->canDraw(paint)) { |
| + GrPaint grPaint; |
| + SkPaint2GrPaintShader(this->context(), paint, true, &grPaint); |
| - fMainTextContext->drawText(grPaint, paint, (const char *)text, byteLength, x, y); |
| - } else if (fFallbackTextContext && fFallbackTextContext->canDraw(paint)) { |
| - GrPaint grPaint; |
| - SkPaint2GrPaintShader(this->context(), paint, true, &grPaint); |
| + SkDEBUGCODE(this->validate();) |
| - SkDEBUGCODE(this->validate();) |
| + textContext->drawText(grPaint, paint, (const char *)text, byteLength, x, y); |
| + return; |
| + } |
| + textContext = textContext->getFallbackTextContext(); |
|
bsalomon
2014/10/13 18:46:36
Would it make sense for this to just happen within
jvanverth1
2014/10/13 18:54:48
I thought of that, but you'd have to call canDraw(
bsalomon
2014/10/13 19:01:44
I'm not sure I see why...
GrTextContext::drawTex
jvanverth1
2014/10/13 19:06:18
Got it. And GrTextContext::drawText can return fal
|
| + } while (textContext); |
| - fFallbackTextContext->drawText(grPaint, paint, (const char *)text, byteLength, x, y); |
| - } else { |
| - // this guy will just call our drawPath() |
| - draw.drawText_asPaths((const char*)text, byteLength, x, y, paint); |
| - } |
| + // this will just call our drawPath() |
| + draw.drawText_asPaths((const char*)text, byteLength, x, y, paint); |
| } |
| void SkGpuDevice::drawPosText(const SkDraw& draw, const void* text, size_t byteLength, |
| @@ -1711,25 +1707,22 @@ 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();) |
| + GrTextContext* textContext = fTextContext; |
| + do { |
| + if (textContext->canDraw(paint)) { |
| + GrPaint grPaint; |
| + SkPaint2GrPaintShader(this->context(), paint, true, &grPaint); |
| - 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); |
| + SkDEBUGCODE(this->validate();) |
| - SkDEBUGCODE(this->validate();) |
| + textContext->drawPosText(grPaint, paint, (const char *)text, byteLength, pos, |
| + scalarsPerPos, offset); |
| + return; |
| + } |
| + textContext = textContext->getFallbackTextContext(); |
| + } while (textContext); |
| - fFallbackTextContext->drawPosText(grPaint, paint, (const char *)text, byteLength, pos, |
| - scalarsPerPos, offset); |
| - } else { |
| - draw.drawPosText_asPaths((const char*)text, byteLength, pos, scalarsPerPos, offset, paint); |
| - } |
| + draw.drawPosText_asPaths((const char*)text, byteLength, pos, scalarsPerPos, offset, paint); |
| } |
| void SkGpuDevice::drawTextOnPath(const SkDraw& draw, const void* text, |