| Index: src/core/SkDraw.cpp
|
| ===================================================================
|
| --- src/core/SkDraw.cpp (revision 10398)
|
| +++ src/core/SkDraw.cpp (working copy)
|
| @@ -2108,7 +2108,7 @@
|
|
|
| void SkDraw::drawTextOnPath(const char text[], size_t byteLength,
|
| const SkPath& follow, const SkMatrix* matrix,
|
| - const SkPaint& paint) const {
|
| + const SkPaint& origPaint) const {
|
| SkASSERT(byteLength == 0 || text != NULL);
|
|
|
| // nothing to draw
|
| @@ -2116,7 +2116,11 @@
|
| return;
|
| }
|
|
|
| + // setup our std paint, in hopes of getting hits in the cache
|
| + SkPaint paint(origPaint);
|
| + SkScalar textScale = paint.setupForAsPaths();
|
| SkTextToPathIter iter(text, byteLength, paint, true);
|
| +
|
| SkPathMeasure meas(follow, false);
|
| SkScalar hOffset = 0;
|
|
|
| @@ -2129,19 +2133,19 @@
|
| hOffset += pathLen;
|
| }
|
|
|
| - const SkPath* iterPath;
|
| - SkScalar xpos;
|
| - SkMatrix scaledMatrix;
|
| - SkScalar scale = iter.getPathScale();
|
| + SkScalar scale = iter.getPathScale();
|
| + SkMatrix scaledMatrix;
|
| + scaledMatrix.setScale(scale * textScale, scale * textScale);
|
|
|
| - scaledMatrix.setScale(scale, scale);
|
| -
|
| + const SkPath* iterPath;
|
| + SkScalar xpos;
|
| while (iter.next(&iterPath, &xpos)) {
|
| if (iterPath) {
|
| SkPath tmp;
|
| SkMatrix m(scaledMatrix);
|
|
|
| - m.postTranslate(xpos + hOffset, 0);
|
| + SkScalar xposScaled = xpos * textScale;
|
| + m.postTranslate(xposScaled + hOffset, 0);
|
| if (matrix) {
|
| m.postConcat(*matrix);
|
| }
|
|
|