| Index: src/core/SkDraw.cpp
|
| diff --git a/src/core/SkDraw.cpp b/src/core/SkDraw.cpp
|
| index ccab56ca62a3902c71c7600360864111d2b40600..5c742938cabfa527470c518a6c31cbfc91d676f0 100644
|
| --- a/src/core/SkDraw.cpp
|
| +++ b/src/core/SkDraw.cpp
|
| @@ -32,22 +32,6 @@
|
| #include "SkDrawProcs.h"
|
| #include "SkMatrixUtils.h"
|
|
|
| -bool SkDraw::ShouldDrawTextAsPaths(const SkPaint& paint, const SkMatrix& ctm) {
|
| - // we don't cache hairlines in the cache
|
| - if (SkPaint::kStroke_Style == paint.getStyle() &&
|
| - 0 == paint.getStrokeWidth()) {
|
| - return true;
|
| - }
|
| -
|
| - // we don't cache perspective
|
| - if (ctm.hasPerspective()) {
|
| - return true;
|
| - }
|
| -
|
| - SkMatrix textM;
|
| - return SkPaint::TooBigToUseCache(ctm, *paint.setTextMatrix(&textM));
|
| -}
|
| -
|
| //#define TRACE_BITMAP_DRAWS
|
|
|
| #define kBlitterStorageLongCount (sizeof(SkBitmapProcShader) >> 2)
|
| @@ -1458,6 +1442,21 @@ static void measure_text(SkGlyphCache* cache, SkDrawCacheProc glyphCacheProc,
|
| SkASSERT(text == stop);
|
| }
|
|
|
| +bool SkDraw::ShouldDrawTextAsPaths(const SkPaint& paint, const SkMatrix& ctm) {
|
| + // hairline glyphs are fast enough so we don't need to cache them
|
| + if (SkPaint::kStroke_Style == paint.getStyle() && 0 == paint.getStrokeWidth()) {
|
| + return true;
|
| + }
|
| +
|
| + // we don't cache perspective
|
| + if (ctm.hasPerspective()) {
|
| + return true;
|
| + }
|
| +
|
| + SkMatrix textM;
|
| + return SkPaint::TooBigToUseCache(ctm, *paint.setTextMatrix(&textM));
|
| +}
|
| +
|
| void SkDraw::drawText_asPaths(const char text[], size_t byteLength,
|
| SkScalar x, SkScalar y,
|
| const SkPaint& paint) const {
|
| @@ -1716,30 +1715,10 @@ void SkDraw::drawText(const char text[], size_t byteLength,
|
|
|
| SkDrawCacheProc glyphCacheProc = paint.getDrawCacheProc();
|
|
|
| -#if SK_DISTANCEFIELD_FONTS
|
| - const SkMatrix* ctm = fMatrix;
|
| - const SkPaint* paintRef = &paint;
|
| - SkPaint paintCopy;
|
| - uint32_t procFlags = fProcs ? fProcs->fFlags : 0;
|
| - if (procFlags & SkDrawProcs::kUseScaledGlyphs_Flag) {
|
| - paintCopy = paint;
|
| - paintCopy.setTextSize(SkDrawProcs::kBaseDFFontSize);
|
| - paintCopy.setLCDRenderText(false);
|
| - paintRef = &paintCopy;
|
| - }
|
| - if (procFlags & SkDrawProcs::kSkipBakedGlyphTransform_Flag) {
|
| - ctm = NULL;
|
| - }
|
| - SkAutoGlyphCache autoCache(*paintRef, &fDevice->fLeakyProperties, ctm);
|
| -#else
|
| SkAutoGlyphCache autoCache(paint, &fDevice->fLeakyProperties, fMatrix);
|
| -#endif
|
| SkGlyphCache* cache = autoCache.getCache();
|
|
|
| // transform our starting point
|
| -#if SK_DISTANCEFIELD_FONTS
|
| - if (!(procFlags & SkDrawProcs::kSkipBakedGlyphTransform_Flag))
|
| -#endif
|
| {
|
| SkPoint loc;
|
| fMatrix->mapXY(x, y, &loc);
|
| @@ -1798,41 +1777,17 @@ void SkDraw::drawText(const char text[], size_t byteLength,
|
| SkFixed fx = SkScalarToFixed(x) + d1g.fHalfSampleX;
|
| SkFixed fy = SkScalarToFixed(y) + d1g.fHalfSampleY;
|
|
|
| -#if SK_DISTANCEFIELD_FONTS
|
| - SkFixed fixedScale;
|
| - if (procFlags & SkDrawProcs::kUseScaledGlyphs_Flag) {
|
| - fixedScale = SkScalarToFixed(paint.getTextSize()/(float)SkDrawProcs::kBaseDFFontSize);
|
| - }
|
| -#endif
|
| while (text < stop) {
|
| const SkGlyph& glyph = glyphCacheProc(cache, &text, fx & fxMask, fy & fyMask);
|
|
|
| -#if SK_DISTANCEFIELD_FONTS
|
| - if (procFlags & SkDrawProcs::kUseScaledGlyphs_Flag) {
|
| - fx += SkFixedMul_portable(autokern.adjust(glyph), fixedScale);
|
| - } else {
|
| - fx += autokern.adjust(glyph);
|
| - }
|
| -#else
|
| fx += autokern.adjust(glyph);
|
| -#endif
|
|
|
| if (glyph.fWidth) {
|
| proc(d1g, fx, fy, glyph);
|
| }
|
|
|
| -#if SK_DISTANCEFIELD_FONTS
|
| - if (procFlags & SkDrawProcs::kUseScaledGlyphs_Flag) {
|
| - fx += SkFixedMul_portable(glyph.fAdvanceX, fixedScale);
|
| - fy += SkFixedMul_portable(glyph.fAdvanceY, fixedScale);
|
| - } else {
|
| - fx += glyph.fAdvanceX;
|
| - fy += glyph.fAdvanceY;
|
| - }
|
| -#else
|
| fx += glyph.fAdvanceX;
|
| fy += glyph.fAdvanceY;
|
| -#endif
|
| }
|
| }
|
|
|
| @@ -2013,23 +1968,7 @@ void SkDraw::drawPosText(const char text[], size_t byteLength,
|
| }
|
|
|
| SkDrawCacheProc glyphCacheProc = paint.getDrawCacheProc();
|
| -#if SK_DISTANCEFIELD_FONTS
|
| - const SkMatrix* ctm = fMatrix;
|
| - const SkPaint* paintRef = &paint;
|
| - SkPaint paintCopy;
|
| - uint32_t procFlags = fProcs ? fProcs->fFlags : 0;
|
| - if (procFlags & SkDrawProcs::kUseScaledGlyphs_Flag) {
|
| - paintCopy = paint;
|
| - paintCopy.setTextSize(SkDrawProcs::kBaseDFFontSize);
|
| - paintRef = &paintCopy;
|
| - }
|
| - if (procFlags & SkDrawProcs::kSkipBakedGlyphTransform_Flag) {
|
| - ctm = &SkMatrix::I();
|
| - }
|
| - SkAutoGlyphCache autoCache(*paintRef, &fDevice->fLeakyProperties, ctm);
|
| -#else
|
| SkAutoGlyphCache autoCache(paint, &fDevice->fLeakyProperties, fMatrix);
|
| -#endif
|
| SkGlyphCache* cache = autoCache.getCache();
|
|
|
| SkAAClipBlitterWrapper wrapper;
|
| @@ -2048,11 +1987,7 @@ void SkDraw::drawPosText(const char text[], size_t byteLength,
|
| AlignProc alignProc = pick_align_proc(paint.getTextAlign());
|
| SkDraw1Glyph d1g;
|
| SkDraw1Glyph::Proc proc = d1g.init(this, blitter, cache, paint);
|
| -#if SK_DISTANCEFIELD_FONTS
|
| - TextMapState tms(*ctm, constY);
|
| -#else
|
| TextMapState tms(*fMatrix, constY);
|
| -#endif
|
| TextMapState::Proc tmsProc = tms.pickProc(scalarsPerPosition);
|
|
|
| if (cache->isSubpixel()) {
|
| @@ -2075,16 +2010,7 @@ void SkDraw::drawPosText(const char text[], size_t byteLength,
|
|
|
| if (SkPaint::kLeft_Align == paint.getTextAlign()) {
|
| while (text < stop) {
|
| -#if SK_DISTANCEFIELD_FONTS
|
| - if (procFlags & SkDrawProcs::kSkipBakedGlyphTransform_Flag) {
|
| - tms.fLoc.fX = *pos;
|
| - tms.fLoc.fY = *(pos+1);
|
| - } else {
|
| - tmsProc(tms, pos);
|
| - }
|
| -#else
|
| tmsProc(tms, pos);
|
| -#endif
|
| SkFixed fx = SkScalarToFixed(tms.fLoc.fX) + d1g.fHalfSampleX;
|
| SkFixed fy = SkScalarToFixed(tms.fLoc.fY) + d1g.fHalfSampleY;
|
|
|
|
|