Index: src/gpu/GrAtlasTextContext.cpp |
diff --git a/src/gpu/GrAtlasTextContext.cpp b/src/gpu/GrAtlasTextContext.cpp |
index f8004656c10207c976daf982525506565607ff70..37fe092496d0f4521d4f8ce77a36544ac880072d 100644 |
--- a/src/gpu/GrAtlasTextContext.cpp |
+++ b/src/gpu/GrAtlasTextContext.cpp |
@@ -487,7 +487,7 @@ void GrAtlasTextContext::regenerateTextBlob(GrAtlasTextBlob* cacheBlob, |
const SkTextBlob* blob, SkScalar x, SkScalar y, |
SkDrawFilter* drawFilter, const SkIRect& clipRect, |
GrRenderTarget* rt, const GrClip& clip) { |
- // The color here is the GrPaint color, and it is used to determine whether we |
+ // The color here is the GrPaint color, and it is used to determine whether we |
// have to regenerate LCD text blobs. |
// We use this color vs the SkPaint color because it has the colorfilter applied. |
cacheBlob->fPaintColor = color; |
@@ -686,8 +686,8 @@ inline void GrAtlasTextContext::fallbackDrawPosText(GrAtlasTextBlob* blob, |
} |
inline GrAtlasTextBlob* |
-GrAtlasTextContext::setupDFBlob(int glyphCount, const SkPaint& origPaint, |
- const SkMatrix& viewMatrix, SkPaint* dfPaint, |
+GrAtlasTextContext::setupDFBlob(int glyphCount, const SkPaint& origPaint, |
+ const SkMatrix& viewMatrix, SkPaint* dfPaint, |
SkScalar* textRatio) { |
GrAtlasTextBlob* blob = fCache->createBlob(glyphCount, 1, kGrayTextVASize); |
@@ -725,7 +725,7 @@ GrAtlasTextContext::createDrawTextBlob(GrRenderTarget* rt, const GrClip& clip, |
byteLength, x, y, clipRect, textRatio, &fallbackTxt, &fallbackPos, |
&offset, skPaint); |
if (fallbackTxt.count()) { |
- this->fallbackDrawPosText(blob, 0, rt, clip, paint.getColor(), skPaint, viewMatrix, |
+ this->fallbackDrawPosText(blob, 0, rt, clip, paint.getColor(), skPaint, viewMatrix, |
fallbackTxt, fallbackPos, 2, offset, clipRect); |
} |
} else { |
@@ -764,8 +764,8 @@ GrAtlasTextContext::createDrawPosTextBlob(GrRenderTarget* rt, const GrClip& clip |
byteLength, pos, scalarsPerPosition, offset, clipRect, |
textRatio, &fallbackTxt, &fallbackPos); |
if (fallbackTxt.count()) { |
- this->fallbackDrawPosText(blob, 0, rt, clip, paint.getColor(), skPaint, viewMatrix, |
- fallbackTxt, fallbackPos, scalarsPerPosition, offset, |
+ this->fallbackDrawPosText(blob, 0, rt, clip, paint.getColor(), skPaint, viewMatrix, |
+ fallbackTxt, fallbackPos, scalarsPerPosition, offset, |
clipRect); |
} |
} else { |
@@ -780,7 +780,7 @@ GrAtlasTextContext::createDrawPosTextBlob(GrRenderTarget* rt, const GrClip& clip |
} |
void GrAtlasTextContext::onDrawText(GrDrawContext* dc, GrRenderTarget* rt, |
- const GrClip& clip, |
+ const GrClip& clip, |
const GrPaint& paint, const SkPaint& skPaint, |
const SkMatrix& viewMatrix, |
const char text[], size_t byteLength, |
@@ -826,73 +826,16 @@ void GrAtlasTextContext::internalDrawBMPText(GrAtlasTextBlob* blob, int runIndex |
// Get GrFontScaler from cache |
GrFontScaler* fontScaler = GetGrFontScaler(cache); |
- // transform our starting point |
- { |
- SkPoint loc; |
- viewMatrix.mapXY(x, y, &loc); |
- x = loc.fX; |
- y = loc.fY; |
- } |
- |
- // need to measure first |
- if (skPaint.getTextAlign() != SkPaint::kLeft_Align) { |
- SkVector stopVector; |
- MeasureText(cache, glyphCacheProc, text, byteLength, &stopVector); |
- |
- SkScalar stopX = stopVector.fX; |
- SkScalar stopY = stopVector.fY; |
- |
- if (skPaint.getTextAlign() == SkPaint::kCenter_Align) { |
- stopX = SkScalarHalf(stopX); |
- stopY = SkScalarHalf(stopY); |
- } |
- x -= stopX; |
- y -= stopY; |
- } |
- |
- const char* stop = text + byteLength; |
- |
- SkAutoKern autokern; |
- |
- SkFixed fxMask = ~0; |
- SkFixed fyMask = ~0; |
- SkScalar halfSampleX, halfSampleY; |
- if (cache->isSubpixel()) { |
- halfSampleX = halfSampleY = SkFixedToScalar(SkGlyph::kSubpixelRound); |
- SkAxisAlignment baseline = SkComputeAxisAlignmentForHText(viewMatrix); |
- if (kX_SkAxisAlignment == baseline) { |
- fyMask = 0; |
- halfSampleY = SK_ScalarHalf; |
- } else if (kY_SkAxisAlignment == baseline) { |
- fxMask = 0; |
- halfSampleX = SK_ScalarHalf; |
- } |
- } else { |
- halfSampleX = halfSampleY = SK_ScalarHalf; |
- } |
- |
- Sk48Dot16 fx = SkScalarTo48Dot16(x + halfSampleX); |
- Sk48Dot16 fy = SkScalarTo48Dot16(y + halfSampleY); |
- |
- while (text < stop) { |
- const SkGlyph& glyph = glyphCacheProc(cache, &text, fx & fxMask, fy & fyMask); |
- |
- fx += autokern.adjust(glyph); |
- |
- if (glyph.fWidth) { |
- this->bmpAppendGlyph(blob, |
- runIndex, |
- glyph, |
- Sk48Dot16FloorToInt(fx), |
- Sk48Dot16FloorToInt(fy), |
- color, |
- fontScaler, |
- clipRect); |
+ SkFindAndPlaceGlyph::ProcessText( |
+ text, byteLength, {x, y}, viewMatrix, skPaint.getTextAlign(), glyphCacheProc, cache, |
+ [&](const SkGlyph& glyph, SkPoint position, SkPoint rounding) { |
+ position += rounding; |
+ this->bmpAppendGlyph( |
+ blob, runIndex, glyph, |
+ SkScalarFloorToInt(position.fX), SkScalarFloorToInt(position.fY), |
+ color, fontScaler, clipRect); |
} |
- |
- fx += glyph.fAdvanceX; |
- fy += glyph.fAdvanceY; |
- } |
+ ); |
} |
void GrAtlasTextContext::internalDrawBMPPosText(GrAtlasTextBlob* blob, int runIndex, |
@@ -949,7 +892,7 @@ void GrAtlasTextContext::internalDrawDFText(GrAtlasTextBlob* blob, int runIndex, |
SkDrawCacheProc glyphCacheProc = origPaint.getDrawCacheProc(); |
SkAutoDescriptor desc; |
origPaint.getScalerContextDescriptor(&desc, fSurfaceProps, nullptr, true); |
- SkGlyphCache* origPaintCache = SkGlyphCache::DetachCache(origPaint.getTypeface(), |
+ SkGlyphCache* origPaintCache = SkGlyphCache::DetachCache(origPaint.getTypeface(), |
desc.getDesc()); |
SkTArray<SkScalar> positions; |
@@ -1932,7 +1875,7 @@ private: |
}; |
void GrAtlasTextContext::flushRunAsPaths(GrDrawContext* dc, GrRenderTarget* rt, |
- const SkTextBlobRunIterator& it, |
+ const SkTextBlobRunIterator& it, |
const GrClip& clip, const SkPaint& skPaint, |
SkDrawFilter* drawFilter, const SkMatrix& viewMatrix, |
const SkIRect& clipBounds, SkScalar x, SkScalar y) { |
@@ -2029,7 +1972,7 @@ inline void GrAtlasTextContext::flushRun(GrDrawContext* dc, GrPipelineBuilder* p |
} |
} |
-inline void GrAtlasTextContext::flushBigGlyphs(GrAtlasTextBlob* cacheBlob, |
+inline void GrAtlasTextContext::flushBigGlyphs(GrAtlasTextBlob* cacheBlob, |
GrDrawContext* dc, GrRenderTarget* rt, |
const GrClip& clip, const SkPaint& skPaint, |
SkScalar transX, SkScalar transY, |
@@ -2056,7 +1999,7 @@ inline void GrAtlasTextContext::flushBigGlyphs(GrAtlasTextBlob* cacheBlob, |
void GrAtlasTextContext::flush(const SkTextBlob* blob, |
GrAtlasTextBlob* cacheBlob, |
- GrDrawContext* dc, |
+ GrDrawContext* dc, |
GrRenderTarget* rt, |
const SkPaint& skPaint, |
const GrPaint& grPaint, |