| Index: src/gpu/text/GrAtlasTextContext.cpp
|
| diff --git a/src/gpu/text/GrAtlasTextContext.cpp b/src/gpu/text/GrAtlasTextContext.cpp
|
| index 3769b0b439b0af840a4f11948d5930673321bf02..37cd53d08061bc51e8c82e36c29cf9126fd58b70 100644
|
| --- a/src/gpu/text/GrAtlasTextContext.cpp
|
| +++ b/src/gpu/text/GrAtlasTextContext.cpp
|
| @@ -103,15 +103,6 @@
|
| }
|
| }
|
| return false;
|
| -}
|
| -
|
| -inline SkGlyphCache* GrAtlasTextContext::setupCache(GrAtlasTextBlob::Run* run,
|
| - const SkPaint& skPaint,
|
| - const SkMatrix* viewMatrix,
|
| - bool noGamma) {
|
| - skPaint.getScalerContextDescriptor(&run->fDescriptor, fSurfaceProps, viewMatrix, noGamma);
|
| - run->fTypeface.reset(SkSafeRef(skPaint.getTypeface()));
|
| - return SkGlyphCache::DetachCache(run->fTypeface, run->fDescriptor.getDesc());
|
| }
|
|
|
| void GrAtlasTextContext::drawTextBlob(GrDrawContext* dc,
|
| @@ -291,18 +282,17 @@
|
| PerSubRunInfo& subRun = runIdx.fSubRunInfo.back();
|
| subRun.setUseLCDText(runPaint.isLCDRenderText());
|
| subRun.setDrawAsDistanceFields();
|
| - SkGlyphCache* cache = this->setupCache(&cacheBlob->fRuns[run], dfPaint, nullptr, true);
|
|
|
| switch (it.positioning()) {
|
| case SkTextBlob::kDefault_Positioning: {
|
| - this->internalDrawDFText(cacheBlob, run, cache, dfPaint, color, viewMatrix,
|
| + this->internalDrawDFText(cacheBlob, run, dfPaint, color, viewMatrix,
|
| (const char *)it.glyphs(), textLen,
|
| x + offset.x(), y + offset.y(), textRatio, runPaint);
|
| break;
|
| }
|
| case SkTextBlob::kHorizontal_Positioning: {
|
| SkPoint dfOffset = SkPoint::Make(x, y + offset.y());
|
| - this->internalDrawDFPosText(cacheBlob, run, cache, dfPaint, color, viewMatrix,
|
| + this->internalDrawDFPosText(cacheBlob, run, dfPaint, color, viewMatrix,
|
| (const char*)it.glyphs(), textLen, it.pos(),
|
| 1, dfOffset, textRatio,
|
| runPaint);
|
| @@ -310,40 +300,36 @@
|
| }
|
| case SkTextBlob::kFull_Positioning: {
|
| SkPoint dfOffset = SkPoint::Make(x, y);
|
| - this->internalDrawDFPosText(cacheBlob, run, cache, dfPaint, color, viewMatrix,
|
| + this->internalDrawDFPosText(cacheBlob, run, dfPaint, color, viewMatrix,
|
| (const char*)it.glyphs(), textLen, it.pos(),
|
| 2, dfOffset, textRatio, runPaint);
|
| break;
|
| }
|
| }
|
| - SkGlyphCache::AttachCache(cache);
|
| } else if (SkDraw::ShouldDrawTextAsPaths(runPaint, viewMatrix)) {
|
| cacheBlob->fRuns[run].fDrawAsPaths = true;
|
| } else {
|
| cacheBlob->setHasBitmap();
|
| - SkGlyphCache* cache = this->setupCache(&cacheBlob->fRuns[run], runPaint, &viewMatrix,
|
| - false);
|
| switch (it.positioning()) {
|
| case SkTextBlob::kDefault_Positioning:
|
| GrTextUtils::DrawBmpText(cacheBlob, run, fContext->getBatchFontCache(),
|
| - cache, runPaint, color, viewMatrix,
|
| + fSurfaceProps, runPaint, color, viewMatrix,
|
| (const char *)it.glyphs(), textLen,
|
| x + offset.x(), y + offset.y());
|
| break;
|
| case SkTextBlob::kHorizontal_Positioning:
|
| GrTextUtils::DrawBmpPosText(cacheBlob, run, fContext->getBatchFontCache(),
|
| - cache, runPaint, color, viewMatrix,
|
| + fSurfaceProps, runPaint, color, viewMatrix,
|
| (const char*)it.glyphs(), textLen, it.pos(), 1,
|
| SkPoint::Make(x, y + offset.y()));
|
| break;
|
| case SkTextBlob::kFull_Positioning:
|
| GrTextUtils::DrawBmpPosText(cacheBlob, run, fContext->getBatchFontCache(),
|
| - cache, runPaint, color, viewMatrix,
|
| + fSurfaceProps, runPaint, color, viewMatrix,
|
| (const char*)it.glyphs(), textLen, it.pos(), 2,
|
| SkPoint::Make(x, y));
|
| break;
|
| }
|
| - SkGlyphCache::AttachCache(cache);
|
| }
|
|
|
| if (drawFilter) {
|
| @@ -422,14 +408,9 @@
|
| // Push back a new subrun to fill and set the override descriptor
|
| run.push_back();
|
| run.fOverrideDescriptor.reset(new SkAutoDescriptor);
|
| - skPaint.getScalerContextDescriptor(run.fOverrideDescriptor,
|
| - fSurfaceProps, &viewMatrix, false);
|
| - SkGlyphCache* cache = SkGlyphCache::DetachCache(run.fTypeface,
|
| - run.fOverrideDescriptor->getDesc());
|
| - GrTextUtils::DrawBmpPosText(blob, runIndex, fContext->getBatchFontCache(), cache, skPaint,
|
| - color, viewMatrix, fallbackTxt.begin(), fallbackTxt.count(),
|
| + GrTextUtils::DrawBmpPosText(blob, runIndex, fContext->getBatchFontCache(), fSurfaceProps,
|
| + skPaint, color, viewMatrix, fallbackTxt.begin(), fallbackTxt.count(),
|
| fallbackPos.begin(), scalarsPerPosition, offset);
|
| - SkGlyphCache::AttachCache(cache);
|
| }
|
|
|
| inline GrAtlasTextBlob*
|
| @@ -461,19 +442,15 @@
|
| SkPaint dfPaint;
|
| SkScalar textRatio;
|
| blob = this->setupDFBlob(glyphCount, skPaint, viewMatrix, &dfPaint, &textRatio);
|
| - SkGlyphCache* cache = this->setupCache(&blob->fRuns[0], dfPaint, nullptr, true);
|
| -
|
| - this->internalDrawDFText(blob, 0, cache, dfPaint, paint.getColor(), viewMatrix, text,
|
| +
|
| + this->internalDrawDFText(blob, 0, dfPaint, paint.getColor(), viewMatrix, text,
|
| byteLength, x, y, textRatio, skPaint);
|
| - SkGlyphCache::AttachCache(cache);
|
| } else {
|
| blob = fCache->createBlob(glyphCount, 1, GrAtlasTextBlob::kGrayTextVASize);
|
| blob->fViewMatrix = viewMatrix;
|
|
|
| - SkGlyphCache* cache = this->setupCache(&blob->fRuns[0], skPaint, &viewMatrix, false);
|
| - GrTextUtils::DrawBmpText(blob, 0, fContext->getBatchFontCache(), cache, skPaint,
|
| + GrTextUtils::DrawBmpText(blob, 0, fContext->getBatchFontCache(), fSurfaceProps, skPaint,
|
| paint.getColor(), viewMatrix, text, byteLength, x, y);
|
| - SkGlyphCache::AttachCache(cache);
|
| }
|
| return blob;
|
| }
|
| @@ -491,20 +468,16 @@
|
| SkPaint dfPaint;
|
| SkScalar textRatio;
|
| blob = this->setupDFBlob(glyphCount, skPaint, viewMatrix, &dfPaint, &textRatio);
|
| - SkGlyphCache* cache = this->setupCache(&blob->fRuns[0], dfPaint, nullptr, true);
|
| -
|
| - this->internalDrawDFPosText(blob, 0, cache, dfPaint, paint.getColor(), viewMatrix, text,
|
| +
|
| + this->internalDrawDFPosText(blob, 0, dfPaint, paint.getColor(), viewMatrix, text,
|
| byteLength, pos, scalarsPerPosition, offset, textRatio,
|
| skPaint);
|
| - SkGlyphCache::AttachCache(cache);
|
| } else {
|
| blob = fCache->createBlob(glyphCount, 1, GrAtlasTextBlob::kGrayTextVASize);
|
| blob->fViewMatrix = viewMatrix;
|
| - SkGlyphCache* cache = this->setupCache(&blob->fRuns[0], skPaint, &viewMatrix, false);
|
| - GrTextUtils::DrawBmpPosText(blob, 0, fContext->getBatchFontCache(), cache, skPaint,
|
| + GrTextUtils::DrawBmpPosText(blob, 0, fContext->getBatchFontCache(), fSurfaceProps, skPaint,
|
| paint.getColor(), viewMatrix, text,
|
| byteLength, pos, scalarsPerPosition, offset);
|
| - SkGlyphCache::AttachCache(cache);
|
| }
|
| return blob;
|
| }
|
| @@ -539,7 +512,6 @@
|
| }
|
|
|
| void GrAtlasTextContext::internalDrawDFText(GrAtlasTextBlob* blob, int runIndex,
|
| - SkGlyphCache* cache,
|
| const SkPaint& skPaint, GrColor color,
|
| const SkMatrix& viewMatrix,
|
| const char text[], size_t byteLength,
|
| @@ -605,12 +577,11 @@
|
| y -= alignY;
|
| SkPoint offset = SkPoint::Make(x, y);
|
|
|
| - this->internalDrawDFPosText(blob, runIndex, cache, skPaint, color, viewMatrix, text, byteLength,
|
| + this->internalDrawDFPosText(blob, runIndex, skPaint, color, viewMatrix, text, byteLength,
|
| positions.begin(), 2, offset, textRatio, origPaint);
|
| }
|
|
|
| void GrAtlasTextContext::internalDrawDFPosText(GrAtlasTextBlob* blob, int runIndex,
|
| - SkGlyphCache* cache,
|
| const SkPaint& skPaint,
|
| GrColor color,
|
| const SkMatrix& viewMatrix,
|
| @@ -633,6 +604,7 @@
|
|
|
| fCurrStrike = nullptr;
|
|
|
| + SkGlyphCache* cache = blob->setupCache(runIndex, fSurfaceProps, skPaint, nullptr, true);
|
| SkDrawCacheProc glyphCacheProc = skPaint.getDrawCacheProc();
|
| GrFontScaler* fontScaler = GetGrFontScaler(cache);
|
|
|
| @@ -697,6 +669,7 @@
|
| }
|
| }
|
|
|
| + SkGlyphCache::AttachCache(cache);
|
| if (fallbackTxt.count()) {
|
| this->fallbackDrawPosText(blob, runIndex, origPaint.getColor(), origPaint, viewMatrix,
|
| fallbackTxt, fallbackPos, scalarsPerPosition, offset);
|
|
|