Index: src/gpu/GrAtlasTextContext.cpp |
diff --git a/src/gpu/GrAtlasTextContext.cpp b/src/gpu/GrAtlasTextContext.cpp |
index 735693b48cd23549bf7ef92d1b9e4a010255a915..aca839cf2c4bd7e44b82493280f0d54befb29948 100644 |
--- a/src/gpu/GrAtlasTextContext.cpp |
+++ b/src/gpu/GrAtlasTextContext.cpp |
@@ -12,6 +12,7 @@ |
#include "GrStrokeInfo.h" |
#include "GrTextBlobCache.h" |
#include "GrTexturePriv.h" |
+#include "GrTextUtils.h" |
#include "GrVertexBuffer.h" |
#include "SkAutoKern.h" |
@@ -333,19 +334,22 @@ void GrAtlasTextContext::regenerateTextBlob(GrAtlasTextBlob* cacheBlob, |
false); |
switch (it.positioning()) { |
case SkTextBlob::kDefault_Positioning: |
- this->internalDrawBMPText(cacheBlob, run, cache, runPaint, color, viewMatrix, |
- (const char *)it.glyphs(), textLen, |
- x + offset.x(), y + offset.y()); |
+ GrTextUtils::DrawBmpText(cacheBlob, run, fContext->getBatchFontCache(), |
+ cache, runPaint, color, viewMatrix, |
+ (const char *)it.glyphs(), textLen, |
+ x + offset.x(), y + offset.y()); |
break; |
case SkTextBlob::kHorizontal_Positioning: |
- this->internalDrawBMPPosText(cacheBlob, run, cache, runPaint, color, viewMatrix, |
- (const char*)it.glyphs(), textLen, it.pos(), 1, |
- SkPoint::Make(x, y + offset.y())); |
+ GrTextUtils::DrawBmpPosText(cacheBlob, run, fContext->getBatchFontCache(), |
+ cache, runPaint, color, viewMatrix, |
+ (const char*)it.glyphs(), textLen, it.pos(), 1, |
+ SkPoint::Make(x, y + offset.y())); |
break; |
case SkTextBlob::kFull_Positioning: |
- this->internalDrawBMPPosText(cacheBlob, run, cache, runPaint, color, viewMatrix, |
- (const char*)it.glyphs(), textLen, it.pos(), 2, |
- SkPoint::Make(x, y)); |
+ GrTextUtils::DrawBmpPosText(cacheBlob, run, fContext->getBatchFontCache(), |
+ cache, runPaint, color, viewMatrix, |
+ (const char*)it.glyphs(), textLen, it.pos(), 2, |
+ SkPoint::Make(x, y)); |
break; |
} |
SkGlyphCache::AttachCache(cache); |
@@ -432,9 +436,9 @@ inline void GrAtlasTextContext::fallbackDrawPosText(GrAtlasTextBlob* blob, |
fSurfaceProps, &viewMatrix, false); |
SkGlyphCache* cache = SkGlyphCache::DetachCache(run.fTypeface, |
run.fOverrideDescriptor->getDesc()); |
- this->internalDrawBMPPosText(blob, runIndex, cache, skPaint, color, viewMatrix, |
- fallbackTxt.begin(), fallbackTxt.count(), |
- fallbackPos.begin(), scalarsPerPosition, offset); |
+ GrTextUtils::DrawBmpPosText(blob, runIndex, fContext->getBatchFontCache(), cache, skPaint, |
+ color, viewMatrix, fallbackTxt.begin(), fallbackTxt.count(), |
+ fallbackPos.begin(), scalarsPerPosition, offset); |
SkGlyphCache::AttachCache(cache); |
} |
@@ -484,8 +488,8 @@ GrAtlasTextContext::createDrawTextBlob(const GrClip& clip, |
blob->fViewMatrix = viewMatrix; |
SkGlyphCache* cache = this->setupCache(&blob->fRuns[0], skPaint, &viewMatrix, false); |
- this->internalDrawBMPText(blob, 0, cache, skPaint, paint.getColor(), viewMatrix, text, |
- byteLength, x, y); |
+ GrTextUtils::DrawBmpText(blob, 0, fContext->getBatchFontCache(), cache, skPaint, |
+ paint.getColor(), viewMatrix, text, byteLength, x, y); |
SkGlyphCache::AttachCache(cache); |
} |
return blob; |
@@ -519,8 +523,9 @@ GrAtlasTextContext::createDrawPosTextBlob(const GrClip& clip, |
blob = fCache->createBlob(glyphCount, 1, GrAtlasTextBlob::kGrayTextVASize); |
blob->fViewMatrix = viewMatrix; |
SkGlyphCache* cache = this->setupCache(&blob->fRuns[0], skPaint, &viewMatrix, false); |
- this->internalDrawBMPPosText(blob, 0, cache, skPaint, paint.getColor(), viewMatrix, text, |
- byteLength, pos, scalarsPerPosition, offset); |
+ GrTextUtils::DrawBmpPosText(blob, 0, fContext->getBatchFontCache(), cache, skPaint, |
+ paint.getColor(), viewMatrix, text, |
+ byteLength, pos, scalarsPerPosition, offset); |
SkGlyphCache::AttachCache(cache); |
} |
return blob; |
@@ -556,72 +561,6 @@ void GrAtlasTextContext::onDrawPosText(GrDrawContext* dc, |
regionClipBounds); |
} |
-void GrAtlasTextContext::internalDrawBMPText(GrAtlasTextBlob* blob, int runIndex, |
- SkGlyphCache* cache, const SkPaint& skPaint, |
- GrColor color, |
- const SkMatrix& viewMatrix, |
- const char text[], size_t byteLength, |
- SkScalar x, SkScalar y) { |
- SkASSERT(byteLength == 0 || text != nullptr); |
- |
- // nothing to draw |
- if (text == nullptr || byteLength == 0) { |
- return; |
- } |
- |
- fCurrStrike = nullptr; |
- |
- // Get GrFontScaler from cache |
- GrFontScaler* fontScaler = GetGrFontScaler(cache); |
- |
- SkFindAndPlaceGlyph::ProcessText( |
- skPaint.getTextEncoding(), text, byteLength, |
- {x, y}, viewMatrix, skPaint.getTextAlign(), |
- cache, |
- [&](const SkGlyph& glyph, SkPoint position, SkPoint rounding) { |
- position += rounding; |
- this->bmpAppendGlyph( |
- blob, runIndex, glyph, |
- SkScalarFloorToInt(position.fX), SkScalarFloorToInt(position.fY), |
- color, fontScaler); |
- } |
- ); |
-} |
- |
-void GrAtlasTextContext::internalDrawBMPPosText(GrAtlasTextBlob* blob, int runIndex, |
- SkGlyphCache* cache, const SkPaint& skPaint, |
- GrColor color, |
- const SkMatrix& viewMatrix, |
- const char text[], size_t byteLength, |
- const SkScalar pos[], int scalarsPerPosition, |
- const SkPoint& offset) { |
- SkASSERT(byteLength == 0 || text != nullptr); |
- SkASSERT(1 == scalarsPerPosition || 2 == scalarsPerPosition); |
- |
- // nothing to draw |
- if (text == nullptr || byteLength == 0) { |
- return; |
- } |
- |
- fCurrStrike = nullptr; |
- |
- // Get GrFontScaler from cache |
- GrFontScaler* fontScaler = GetGrFontScaler(cache); |
- |
- SkFindAndPlaceGlyph::ProcessPosText( |
- skPaint.getTextEncoding(), text, byteLength, |
- offset, viewMatrix, pos, scalarsPerPosition, |
- skPaint.getTextAlign(), cache, |
- [&](const SkGlyph& glyph, SkPoint position, SkPoint rounding) { |
- position += rounding; |
- this->bmpAppendGlyph( |
- blob, runIndex, glyph, |
- SkScalarFloorToInt(position.fX), SkScalarFloorToInt(position.fY), |
- color, fontScaler); |
- } |
- ); |
-} |
- |
void GrAtlasTextContext::internalDrawDFText(GrAtlasTextBlob* blob, int runIndex, |
const SkPaint& skPaint, GrColor color, |
const SkMatrix& viewMatrix, |
@@ -784,39 +723,6 @@ void GrAtlasTextContext::internalDrawDFPosText(GrAtlasTextBlob* blob, int runInd |
SkGlyphCache::AttachCache(cache); |
} |
-void GrAtlasTextContext::bmpAppendGlyph(GrAtlasTextBlob* blob, int runIndex, |
- const SkGlyph& skGlyph, |
- int vx, int vy, GrColor color, GrFontScaler* scaler) { |
- if (!fCurrStrike) { |
- fCurrStrike = fContext->getBatchFontCache()->getStrike(scaler); |
- } |
- |
- GrGlyph::PackedID id = GrGlyph::Pack(skGlyph.getGlyphID(), |
- skGlyph.getSubXFixed(), |
- skGlyph.getSubYFixed(), |
- GrGlyph::kCoverage_MaskStyle); |
- GrGlyph* glyph = fCurrStrike->getGlyph(skGlyph, id, scaler); |
- if (!glyph) { |
- return; |
- } |
- |
- int x = vx + glyph->fBounds.fLeft; |
- int y = vy + glyph->fBounds.fTop; |
- |
- // keep them as ints until we've done the clip-test |
- int width = glyph->fBounds.width(); |
- int height = glyph->fBounds.height(); |
- |
- SkRect r; |
- r.fLeft = SkIntToScalar(x); |
- r.fTop = SkIntToScalar(y); |
- r.fRight = r.fLeft + SkIntToScalar(width); |
- r.fBottom = r.fTop + SkIntToScalar(height); |
- |
- blob->appendGlyph(runIndex, r, color, fCurrStrike, glyph, scaler, skGlyph, |
- SkIntToScalar(vx), SkIntToScalar(vy), 1.0f, false); |
-} |
- |
bool GrAtlasTextContext::dfAppendGlyph(GrAtlasTextBlob* blob, int runIndex, |
const SkGlyph& skGlyph, |
SkScalar sx, SkScalar sy, GrColor color, |