aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar joshualitt <joshualitt@chromium.org>2016-02-11 12:42:02 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2016-02-11 12:42:02 -0800
commitbc81111f246ce2d5fbb61d7a347c9d890f6c8359 (patch)
treea33726def6e6f99833b21ce3142b3e1bcde3d58b /src
parent0eed945294fa0b2dee7d971c16dc9beefab2ec1c (diff)
start to chip away at friending of GrAtlasTextBatch/GrAtlasTextBlob
Diffstat (limited to 'src')
-rw-r--r--src/gpu/batches/GrAtlasTextBatch.cpp1
-rw-r--r--src/gpu/batches/GrAtlasTextBatch.h36
-rw-r--r--src/gpu/text/GrAtlasTextBlob.h48
3 files changed, 45 insertions, 40 deletions
diff --git a/src/gpu/batches/GrAtlasTextBatch.cpp b/src/gpu/batches/GrAtlasTextBatch.cpp
index b2251a42a8..6a172df5a6 100644
--- a/src/gpu/batches/GrAtlasTextBatch.cpp
+++ b/src/gpu/batches/GrAtlasTextBatch.cpp
@@ -147,7 +147,6 @@ inline void GrAtlasTextBatch::regenBlob(Target* target, FlushInfo* flushInfo, Bl
*desc = newDesc;
*cache = SkGlyphCache::DetachCache(run->fTypeface, *desc);
*scaler = GrTextContext::GetGrFontScaler(*cache);
- strike = info->strike();
*typeface = run->fTypeface;
}
diff --git a/src/gpu/batches/GrAtlasTextBatch.h b/src/gpu/batches/GrAtlasTextBatch.h
index f4008c9471..05d6afdb51 100644
--- a/src/gpu/batches/GrAtlasTextBatch.h
+++ b/src/gpu/batches/GrAtlasTextBatch.h
@@ -81,39 +81,9 @@ public:
void init() {
const Geometry& geo = fGeoData[0];
fBatch.fColor = geo.fColor;
- fBatch.fViewMatrix = geo.fBlob->fViewMatrix;
-
- // We don't yet position distance field text on the cpu, so we have to map the vertex bounds
- // into device space.
- // We handle vertex bounds differently for distance field text and bitmap text because
- // the vertex bounds of bitmap text are in device space. If we are flushing multiple runs
- // from one blob then we are going to pay the price here of mapping the rect for each run.
- const Run& run = geo.fBlob->fRuns[geo.fRun];
- SkRect bounds = run.fSubRunInfo[geo.fSubRun].vertexBounds();
- if (run.fSubRunInfo[geo.fSubRun].drawAsDistanceFields()) {
- // Distance field text is positioned with the (X,Y) as part of the glyph position,
- // and currently the view matrix is applied on the GPU
- bounds.offset(geo.fBlob->fX - geo.fBlob->fInitialX,
- geo.fBlob->fY - geo.fBlob->fInitialY);
- fBatch.fViewMatrix.mapRect(&bounds);
- this->setBounds(bounds);
- } else {
- // Bitmap text is fully positioned on the CPU, and offset by an (X,Y) translate in
- // device space.
- SkMatrix boundsMatrix = geo.fBlob->fInitialViewMatrixInverse;
-
- boundsMatrix.postTranslate(-geo.fBlob->fInitialX, -geo.fBlob->fInitialY);
-
- boundsMatrix.postTranslate(geo.fBlob->fX, geo.fBlob->fY);
-
- boundsMatrix.postConcat(geo.fBlob->fViewMatrix);
- boundsMatrix.mapRect(&bounds);
-
- // Due to floating point numerical inaccuracies, we have to round out here
- SkRect roundedOutBounds;
- bounds.roundOut(&roundedOutBounds);
- this->setBounds(roundedOutBounds);
- }
+ fBatch.fViewMatrix = geo.fBlob->viewMatrix();
+
+ geo.fBlob->computeSubRunBounds(&fBounds, geo.fRun, geo.fSubRun);
}
const char* name() const override { return "TextBatch"; }
diff --git a/src/gpu/text/GrAtlasTextBlob.h b/src/gpu/text/GrAtlasTextBlob.h
index 68cba3d506..b4168e921e 100644
--- a/src/gpu/text/GrAtlasTextBlob.h
+++ b/src/gpu/text/GrAtlasTextBlob.h
@@ -200,6 +200,40 @@ public:
const GrClip& clip,
const SkIRect& clipBounds);
+ void computeSubRunBounds(SkRect* outBounds, int runIndex, int subRunIndex) {
+ // We don't yet position distance field text on the cpu, so we have to map the vertex bounds
+ // into device space.
+ // We handle vertex bounds differently for distance field text and bitmap text because
+ // the vertex bounds of bitmap text are in device space. If we are flushing multiple runs
+ // from one blob then we are going to pay the price here of mapping the rect for each run.
+ const Run& run = fRuns[runIndex];
+ const Run::SubRunInfo& subRun = run.fSubRunInfo[subRunIndex];
+ *outBounds = subRun.vertexBounds();
+ if (subRun.drawAsDistanceFields()) {
+ // Distance field text is positioned with the (X,Y) as part of the glyph position,
+ // and currently the view matrix is applied on the GPU
+ outBounds->offset(fX - fInitialX, fY - fInitialY);
+ fViewMatrix.mapRect(outBounds);
+ } else {
+ // Bitmap text is fully positioned on the CPU, and offset by an (X,Y) translate in
+ // device space.
+ SkMatrix boundsMatrix = fInitialViewMatrixInverse;
+
+ boundsMatrix.postTranslate(-fInitialX, -fInitialY);
+
+ boundsMatrix.postTranslate(fX, fY);
+
+ boundsMatrix.postConcat(fViewMatrix);
+ boundsMatrix.mapRect(outBounds);
+
+ // Due to floating point numerical inaccuracies, we have to round out here
+ outBounds->roundOut(outBounds);
+ }
+ }
+
+ const SkMatrix& viewMatrix() const { return fViewMatrix; }
+
+
// position + local coord
static const size_t kColorTextVASize = sizeof(SkPoint) + sizeof(SkIPoint16);
static const size_t kGrayTextVASize = sizeof(SkPoint) + sizeof(GrColor) + sizeof(SkIPoint16);
@@ -221,12 +255,6 @@ public:
this->setupViewMatrix(viewMatrix, x, y);
}
- GrDrawBatch* test_createBatch(int glyphCount, int run, int subRun,
- GrColor color, SkScalar transX, SkScalar transY,
- const SkPaint& skPaint, const SkSurfaceProps& props,
- const GrDistanceFieldAdjustTable* distanceAdjustTable,
- GrBatchFontCache* cache);
-
const Key& key() const { return fKey; }
~GrAtlasTextBlob() {
@@ -235,6 +263,14 @@ public:
}
}
+ ////////////////////////////////////////////////////////////////////////////////////////////////
+ // Internal test methods
+ GrDrawBatch* test_createBatch(int glyphCount, int run, int subRun,
+ GrColor color, SkScalar transX, SkScalar transY,
+ const SkPaint& skPaint, const SkSurfaceProps& props,
+ const GrDistanceFieldAdjustTable* distanceAdjustTable,
+ GrBatchFontCache* cache);
+
private:
GrAtlasTextBlob()
: fMaxMinScale(-SK_ScalarMax)