Index: src/gpu/GrStencilAndCoverTextContext.cpp |
diff --git a/src/gpu/GrStencilAndCoverTextContext.cpp b/src/gpu/GrStencilAndCoverTextContext.cpp |
index b53ff797fa4718616fbab42936faf96eb4ba965b..9b4c4d77543cbf06bab967584d9f9296b7cebf95 100644 |
--- a/src/gpu/GrStencilAndCoverTextContext.cpp |
+++ b/src/gpu/GrStencilAndCoverTextContext.cpp |
@@ -11,7 +11,6 @@ |
#include "GrGpu.h" |
#include "GrPath.h" |
#include "GrPathRange.h" |
-#include "SkAutoKern.h" |
#include "SkDraw.h" |
#include "SkDrawProcs.h" |
#include "SkGlyphCache.h" |
@@ -62,96 +61,6 @@ bool GrStencilAndCoverTextContext::canDraw(const SkPaint& paint) { |
return rec.getFormat() != SkMask::kARGB32_Format; |
} |
-void GrStencilAndCoverTextContext::onDrawText(const GrPaint& paint, |
- const SkPaint& skPaint, |
- const char text[], |
- size_t byteLength, |
- SkScalar x, SkScalar y) { |
- SkASSERT(byteLength == 0 || text != NULL); |
- |
- if (text == NULL || byteLength == 0 /*|| fRC->isEmpty()*/) { |
- return; |
- } |
- |
- // This is the slow path, mainly used by Skia unit tests. The other |
- // backends (8888, gpu, ...) use device-space dependent glyph caches. In |
- // order to match the glyph positions that the other code paths produce, we |
- // must also use device-space dependent glyph cache. This has the |
- // side-effect that the glyph shape outline will be in device-space, |
- // too. This in turn has the side-effect that NVPR can not stroke the paths, |
- // as the stroke in NVPR is defined in object-space. |
- // NOTE: here we have following coincidence that works at the moment: |
- // - When using the device-space glyphs, the transforms we pass to NVPR |
- // instanced drawing are the global transforms, and the view transform is |
- // identity. NVPR can not use non-affine transforms in the instanced |
- // drawing. This is taken care of by SkDraw::ShouldDrawTextAsPaths since it |
- // will turn off the use of device-space glyphs when perspective transforms |
- // are in use. |
- |
- this->init(paint, skPaint, byteLength, kMaxAccuracy_RenderMode, SkPoint::Make(0, 0)); |
- |
- // Transform our starting point. |
- if (fNeedsDeviceSpaceGlyphs) { |
- SkPoint loc; |
- fContextInitialMatrix.mapXY(x, y, &loc); |
- x = loc.fX; |
- y = loc.fY; |
- } |
- |
- SkDrawCacheProc glyphCacheProc = fSkPaint.getDrawCacheProc(); |
- |
- fTransformType = GrPathRendering::kTranslate_PathTransformType; |
- |
- const char* stop = text + byteLength; |
- |
- // Measure first if needed. |
- if (fSkPaint.getTextAlign() != SkPaint::kLeft_Align) { |
- SkFixed stopX = 0; |
- SkFixed stopY = 0; |
- |
- const char* textPtr = text; |
- while (textPtr < stop) { |
- // We don't need x, y here, since all subpixel variants will have the |
- // same advance. |
- const SkGlyph& glyph = glyphCacheProc(fGlyphCache, &textPtr, 0, 0); |
- |
- stopX += glyph.fAdvanceX; |
- stopY += glyph.fAdvanceY; |
- } |
- SkASSERT(textPtr == stop); |
- |
- SkScalar alignX = SkFixedToScalar(stopX) * fTextRatio; |
- SkScalar alignY = SkFixedToScalar(stopY) * fTextRatio; |
- |
- if (fSkPaint.getTextAlign() == SkPaint::kCenter_Align) { |
- alignX = SkScalarHalf(alignX); |
- alignY = SkScalarHalf(alignY); |
- } |
- |
- x -= alignX; |
- y -= alignY; |
- } |
- |
- SkAutoKern autokern; |
- |
- SkFixed fixedSizeRatio = SkScalarToFixed(fTextRatio); |
- |
- SkFixed fx = SkScalarToFixed(x); |
- SkFixed fy = SkScalarToFixed(y); |
- while (text < stop) { |
- const SkGlyph& glyph = glyphCacheProc(fGlyphCache, &text, 0, 0); |
- fx += SkFixedMul_portable(autokern.adjust(glyph), fixedSizeRatio); |
- if (glyph.fWidth) { |
- this->appendGlyph(glyph.getGlyphID(), SkFixedToScalar(fx), SkFixedToScalar(fy)); |
- } |
- |
- fx += SkFixedMul_portable(glyph.fAdvanceX, fixedSizeRatio); |
- fy += SkFixedMul_portable(glyph.fAdvanceY, fixedSizeRatio); |
- } |
- |
- this->finish(); |
-} |
- |
void GrStencilAndCoverTextContext::onDrawPosText(const GrPaint& paint, |
const SkPaint& skPaint, |
const char text[], |