Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(345)

Unified Diff: src/gpu/text/GrAtlasTextContext.cpp

Issue 1519083002: A change to cleanup some organization around df text (Closed) Base URL: https://skia.googlesource.com/skia.git@cleanuptext12textutilsdftext
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/text/GrAtlasTextContext.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/text/GrAtlasTextContext.cpp
diff --git a/src/gpu/text/GrAtlasTextContext.cpp b/src/gpu/text/GrAtlasTextContext.cpp
index aca839cf2c4bd7e44b82493280f0d54befb29948..3769b0b439b0af840a4f11948d5930673321bf02 100644
--- a/src/gpu/text/GrAtlasTextContext.cpp
+++ b/src/gpu/text/GrAtlasTextContext.cpp
@@ -291,41 +291,32 @@ void GrAtlasTextContext::regenerateTextBlob(GrAtlasTextBlob* cacheBlob,
PerSubRunInfo& subRun = runIdx.fSubRunInfo.back();
subRun.setUseLCDText(runPaint.isLCDRenderText());
subRun.setDrawAsDistanceFields();
+ SkGlyphCache* cache = this->setupCache(&cacheBlob->fRuns[run], dfPaint, nullptr, true);
- SkTDArray<char> fallbackTxt;
- SkTDArray<SkScalar> fallbackPos;
- SkPoint dfOffset;
- int scalarsPerPosition = 2;
switch (it.positioning()) {
case SkTextBlob::kDefault_Positioning: {
- this->internalDrawDFText(cacheBlob, run, dfPaint, color, viewMatrix,
+ this->internalDrawDFText(cacheBlob, run, cache, dfPaint, color, viewMatrix,
(const char *)it.glyphs(), textLen,
- x + offset.x(), y + offset.y(), textRatio,
- &fallbackTxt, &fallbackPos, &dfOffset, runPaint);
+ x + offset.x(), y + offset.y(), textRatio, runPaint);
break;
}
case SkTextBlob::kHorizontal_Positioning: {
- scalarsPerPosition = 1;
- dfOffset = SkPoint::Make(x, y + offset.y());
- this->internalDrawDFPosText(cacheBlob, run, dfPaint, color, viewMatrix,
+ SkPoint dfOffset = SkPoint::Make(x, y + offset.y());
+ this->internalDrawDFPosText(cacheBlob, run, cache, dfPaint, color, viewMatrix,
(const char*)it.glyphs(), textLen, it.pos(),
- scalarsPerPosition, dfOffset, textRatio,
- &fallbackTxt, &fallbackPos);
+ 1, dfOffset, textRatio,
+ runPaint);
break;
}
case SkTextBlob::kFull_Positioning: {
- dfOffset = SkPoint::Make(x, y);
- this->internalDrawDFPosText(cacheBlob, run, dfPaint, color, viewMatrix,
+ SkPoint dfOffset = SkPoint::Make(x, y);
+ this->internalDrawDFPosText(cacheBlob, run, cache, dfPaint, color, viewMatrix,
(const char*)it.glyphs(), textLen, it.pos(),
- scalarsPerPosition, dfOffset, textRatio,
- &fallbackTxt, &fallbackPos);
+ 2, dfOffset, textRatio, runPaint);
break;
}
}
- if (fallbackTxt.count()) {
- this->fallbackDrawPosText(cacheBlob, run, clip, color, runPaint, viewMatrix,
- fallbackTxt, fallbackPos, scalarsPerPosition, dfOffset);
- }
+ SkGlyphCache::AttachCache(cache);
} else if (SkDraw::ShouldDrawTextAsPaths(runPaint, viewMatrix)) {
cacheBlob->fRuns[run].fDrawAsPaths = true;
} else {
@@ -418,7 +409,6 @@ inline void GrAtlasTextContext::initDistanceFieldPaint(GrAtlasTextBlob* blob,
inline void GrAtlasTextContext::fallbackDrawPosText(GrAtlasTextBlob* blob,
int runIndex,
- const GrClip& clip,
GrColor color,
const SkPaint& skPaint,
const SkMatrix& viewMatrix,
@@ -460,11 +450,10 @@ GrAtlasTextContext::setupDFBlob(int glyphCount, const SkPaint& origPaint,
}
inline GrAtlasTextBlob*
-GrAtlasTextContext::createDrawTextBlob(const GrClip& clip,
- const GrPaint& paint, const SkPaint& skPaint,
+GrAtlasTextContext::createDrawTextBlob(const GrPaint& paint, const SkPaint& skPaint,
const SkMatrix& viewMatrix,
const char text[], size_t byteLength,
- SkScalar x, SkScalar y, const SkIRect& regionClipBounds) {
+ SkScalar x, SkScalar y) {
int glyphCount = skPaint.countText(text, byteLength);
GrAtlasTextBlob* blob;
@@ -472,17 +461,11 @@ GrAtlasTextContext::createDrawTextBlob(const GrClip& clip,
SkPaint dfPaint;
SkScalar textRatio;
blob = this->setupDFBlob(glyphCount, skPaint, viewMatrix, &dfPaint, &textRatio);
+ SkGlyphCache* cache = this->setupCache(&blob->fRuns[0], dfPaint, nullptr, true);
- SkTDArray<char> fallbackTxt;
- SkTDArray<SkScalar> fallbackPos;
- SkPoint offset;
- this->internalDrawDFText(blob, 0, dfPaint, paint.getColor(), viewMatrix, text,
- byteLength, x, y, textRatio, &fallbackTxt, &fallbackPos,
- &offset, skPaint);
- if (fallbackTxt.count()) {
- this->fallbackDrawPosText(blob, 0, clip, paint.getColor(), skPaint, viewMatrix,
- fallbackTxt, fallbackPos, 2, offset);
- }
+ this->internalDrawDFText(blob, 0, cache, dfPaint, paint.getColor(), viewMatrix, text,
+ byteLength, x, y, textRatio, skPaint);
+ SkGlyphCache::AttachCache(cache);
} else {
blob = fCache->createBlob(glyphCount, 1, GrAtlasTextBlob::kGrayTextVASize);
blob->fViewMatrix = viewMatrix;
@@ -496,12 +479,11 @@ GrAtlasTextContext::createDrawTextBlob(const GrClip& clip,
}
inline GrAtlasTextBlob*
-GrAtlasTextContext::createDrawPosTextBlob(const GrClip& clip,
- const GrPaint& paint, const SkPaint& skPaint,
+GrAtlasTextContext::createDrawPosTextBlob(const GrPaint& paint, const SkPaint& skPaint,
const SkMatrix& viewMatrix,
const char text[], size_t byteLength,
const SkScalar pos[], int scalarsPerPosition,
- const SkPoint& offset, const SkIRect& regionClipBounds) {
+ const SkPoint& offset) {
int glyphCount = skPaint.countText(text, byteLength);
GrAtlasTextBlob* blob;
@@ -509,16 +491,12 @@ GrAtlasTextContext::createDrawPosTextBlob(const GrClip& clip,
SkPaint dfPaint;
SkScalar textRatio;
blob = this->setupDFBlob(glyphCount, skPaint, viewMatrix, &dfPaint, &textRatio);
+ SkGlyphCache* cache = this->setupCache(&blob->fRuns[0], dfPaint, nullptr, true);
- SkTDArray<char> fallbackTxt;
- SkTDArray<SkScalar> fallbackPos;
- this->internalDrawDFPosText(blob, 0, dfPaint, paint.getColor(), viewMatrix, text,
- byteLength, pos, scalarsPerPosition, offset,
- textRatio, &fallbackTxt, &fallbackPos);
- if (fallbackTxt.count()) {
- this->fallbackDrawPosText(blob, 0, clip, paint.getColor(), skPaint, viewMatrix,
- fallbackTxt, fallbackPos, scalarsPerPosition, offset);
- }
+ this->internalDrawDFPosText(blob, 0, cache, 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;
@@ -538,8 +516,7 @@ void GrAtlasTextContext::onDrawText(GrDrawContext* dc,
const char text[], size_t byteLength,
SkScalar x, SkScalar y, const SkIRect& regionClipBounds) {
SkAutoTUnref<GrAtlasTextBlob> blob(
- this->createDrawTextBlob(clip, paint, skPaint, viewMatrix,
- text, byteLength, x, y, regionClipBounds));
+ this->createDrawTextBlob(paint, skPaint, viewMatrix, text, byteLength, x, y));
blob->flushThrowaway(fContext, dc, fSurfaceProps, fDistanceAdjustTable, skPaint, paint,
clip, regionClipBounds);
}
@@ -552,24 +529,22 @@ void GrAtlasTextContext::onDrawPosText(GrDrawContext* dc,
const SkScalar pos[], int scalarsPerPosition,
const SkPoint& offset, const SkIRect& regionClipBounds) {
SkAutoTUnref<GrAtlasTextBlob> blob(
- this->createDrawPosTextBlob(clip, paint, skPaint, viewMatrix,
+ this->createDrawPosTextBlob(paint, skPaint, viewMatrix,
text, byteLength,
pos, scalarsPerPosition,
- offset, regionClipBounds));
+ offset));
blob->flushThrowaway(fContext, dc, fSurfaceProps, fDistanceAdjustTable, skPaint, paint, clip,
regionClipBounds);
}
void GrAtlasTextContext::internalDrawDFText(GrAtlasTextBlob* blob, int runIndex,
+ SkGlyphCache* cache,
const SkPaint& skPaint, GrColor color,
const SkMatrix& viewMatrix,
const char text[], size_t byteLength,
SkScalar x, SkScalar y,
SkScalar textRatio,
- SkTDArray<char>* fallbackTxt,
- SkTDArray<SkScalar>* fallbackPos,
- SkPoint* offset,
const SkPaint& origPaint) {
SkASSERT(byteLength == 0 || text != nullptr);
@@ -628,22 +603,22 @@ void GrAtlasTextContext::internalDrawDFText(GrAtlasTextBlob* blob, int runIndex,
}
x -= alignX;
y -= alignY;
- *offset = SkPoint::Make(x, y);
+ SkPoint offset = SkPoint::Make(x, y);
- this->internalDrawDFPosText(blob, runIndex, skPaint, color, viewMatrix, text, byteLength,
- positions.begin(), 2, *offset, textRatio, fallbackTxt,
- fallbackPos);
+ this->internalDrawDFPosText(blob, runIndex, cache, skPaint, color, viewMatrix, text, byteLength,
+ positions.begin(), 2, offset, textRatio, origPaint);
}
void GrAtlasTextContext::internalDrawDFPosText(GrAtlasTextBlob* blob, int runIndex,
- const SkPaint& skPaint, GrColor color,
+ SkGlyphCache* cache,
+ const SkPaint& skPaint,
+ GrColor color,
const SkMatrix& viewMatrix,
const char text[], size_t byteLength,
const SkScalar pos[], int scalarsPerPosition,
const SkPoint& offset,
SkScalar textRatio,
- SkTDArray<char>* fallbackTxt,
- SkTDArray<SkScalar>* fallbackPos) {
+ const SkPaint& origPaint) {
SkASSERT(byteLength == 0 || text != nullptr);
SkASSERT(1 == scalarsPerPosition || 2 == scalarsPerPosition);
@@ -653,10 +628,12 @@ void GrAtlasTextContext::internalDrawDFPosText(GrAtlasTextBlob* blob, int runInd
return;
}
+ SkTDArray<char> fallbackTxt;
+ SkTDArray<SkScalar> fallbackPos;
+
fCurrStrike = nullptr;
SkDrawCacheProc glyphCacheProc = skPaint.getDrawCacheProc();
- SkGlyphCache* cache = this->setupCache(&blob->fRuns[runIndex], skPaint, nullptr, true);
GrFontScaler* fontScaler = GetGrFontScaler(cache);
const char* stop = text + byteLength;
@@ -677,10 +654,10 @@ void GrAtlasTextContext::internalDrawDFPosText(GrAtlasTextBlob* blob, int runInd
x, y, color, fontScaler,
textRatio, viewMatrix)) {
// couldn't append, send to fallback
- fallbackTxt->append(SkToInt(text-lastText), lastText);
- *fallbackPos->append() = pos[0];
+ fallbackTxt.append(SkToInt(text-lastText), lastText);
+ *fallbackPos.append() = pos[0];
if (2 == scalarsPerPosition) {
- *fallbackPos->append() = pos[1];
+ *fallbackPos.append() = pos[1];
}
}
}
@@ -709,10 +686,10 @@ void GrAtlasTextContext::internalDrawDFPosText(GrAtlasTextBlob* blob, int runInd
textRatio,
viewMatrix)) {
// couldn't append, send to fallback
- fallbackTxt->append(SkToInt(text-lastText), lastText);
- *fallbackPos->append() = pos[0];
+ fallbackTxt.append(SkToInt(text-lastText), lastText);
+ *fallbackPos.append() = pos[0];
if (2 == scalarsPerPosition) {
- *fallbackPos->append() = pos[1];
+ *fallbackPos.append() = pos[1];
}
}
}
@@ -720,7 +697,10 @@ void GrAtlasTextContext::internalDrawDFPosText(GrAtlasTextBlob* blob, int runInd
}
}
- SkGlyphCache::AttachCache(cache);
+ if (fallbackTxt.count()) {
jvanverth1 2015/12/11 18:12:57 +1. This makes a lot more sense than passing it ou
+ this->fallbackDrawPosText(blob, runIndex, origPaint.getColor(), origPaint, viewMatrix,
+ fallbackTxt, fallbackPos, scalarsPerPosition, offset);
+ }
}
bool GrAtlasTextContext::dfAppendGlyph(GrAtlasTextBlob* blob, int runIndex,
@@ -803,13 +783,12 @@ DRAW_BATCH_TEST_DEFINE(TextBlobBatch) {
// Setup clip
GrClip clip;
- SkIRect noClip = SkIRect::MakeLargest();
// right now we don't handle textblobs, nor do we handle drawPosText. Since we only
// intend to test the batch with this unit test, that is okay.
SkAutoTUnref<GrAtlasTextBlob> blob(
- gTextContext->createDrawTextBlob(clip, grPaint, skPaint, viewMatrix, text,
- static_cast<size_t>(textLen), 0, 0, noClip));
+ gTextContext->createDrawTextBlob(grPaint, skPaint, viewMatrix, text,
+ static_cast<size_t>(textLen), 0, 0));
SkScalar transX = static_cast<SkScalar>(random->nextU());
SkScalar transY = static_cast<SkScalar>(random->nextU());
« no previous file with comments | « src/gpu/text/GrAtlasTextContext.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698