| Index: src/core/SkTextMapStateProc.h
 | 
| diff --git a/src/core/SkTextMapStateProc.h b/src/core/SkTextMapStateProc.h
 | 
| index 8ef9389b3ab5f07d3ae76654ef922cf33f04e5d4..5a8dcaa3b1a5b9e84c2fc3e127498a644c9d0697 100644
 | 
| --- a/src/core/SkTextMapStateProc.h
 | 
| +++ b/src/core/SkTextMapStateProc.h
 | 
| @@ -13,22 +13,20 @@
 | 
|  
 | 
|  class SkTextMapStateProc {
 | 
|  public:
 | 
| -    SkTextMapStateProc(const SkMatrix& matrix, const SkPoint& offset, int scalarsPerPosition)
 | 
| +    SkTextMapStateProc(const SkMatrix& matrix, SkScalar y, int scalarsPerPosition)
 | 
|          : fMatrix(matrix)
 | 
|          , fProc(matrix.getMapXYProc())
 | 
| -        , fOffset(offset)
 | 
| -        , fScaleX(fMatrix.getScaleX()) {
 | 
| +        , fY(y)
 | 
| +        , fScaleX(fMatrix.getScaleX())
 | 
| +        , fTransX(fMatrix.getTranslateX()) {
 | 
|          SkASSERT(1 == scalarsPerPosition || 2 == scalarsPerPosition);
 | 
|          if (1 == scalarsPerPosition) {
 | 
|              unsigned mtype = fMatrix.getType();
 | 
|              if (mtype & (SkMatrix::kAffine_Mask | SkMatrix::kPerspective_Mask)) {
 | 
|                  fMapCase = kX;
 | 
|              } else {
 | 
| -                // Bake the matrix scale/translation components into fOffset,
 | 
| -                // to expedite proc computations.
 | 
| -                fOffset.set(SkScalarMul(offset.x(), fMatrix.getScaleX()) + fMatrix.getTranslateX(),
 | 
| -                            SkScalarMul(offset.y(), fMatrix.getScaleY()) + fMatrix.getTranslateY());
 | 
| -
 | 
| +                fY = SkScalarMul(y, fMatrix.getScaleY()) +
 | 
| +                    fMatrix.getTranslateY();
 | 
|                  if (mtype & SkMatrix::kScale_Mask) {
 | 
|                      fMapCase = kOnlyScaleX;
 | 
|                  } else {
 | 
| @@ -51,25 +49,25 @@
 | 
|          kX
 | 
|      } fMapCase;
 | 
|      const SkMatrix::MapXYProc fProc;
 | 
| -    SkPoint  fOffset; // In kOnly* mode, this includes the matrix translation component.
 | 
| -    SkScalar fScaleX; // This is only used by kOnly... cases.
 | 
| +    SkScalar fY; // Ignored by kXY case.
 | 
| +    SkScalar fScaleX, fTransX; // These are only used by Only... cases.
 | 
|  };
 | 
|  
 | 
|  inline void SkTextMapStateProc::operator()(const SkScalar pos[], SkPoint* loc) const {
 | 
|      switch(fMapCase) {
 | 
|      case kXY:
 | 
| -        fProc(fMatrix, pos[0] + fOffset.x(), pos[1] + fOffset.y(), loc);
 | 
| +        fProc(fMatrix, pos[0], pos[1], loc);
 | 
|          break;
 | 
|      case kOnlyScaleX:
 | 
| -        loc->set(SkScalarMul(fScaleX, *pos) + fOffset.x(), fOffset.y());
 | 
| +        loc->set(SkScalarMul(fScaleX, *pos) + fTransX, fY);
 | 
|          break;
 | 
|      case kOnlyTransX:
 | 
| -        loc->set(*pos + fOffset.x(), fOffset.y());
 | 
| +        loc->set(*pos + fTransX, fY);
 | 
|          break;
 | 
|      default:
 | 
|          SkASSERT(false);
 | 
|      case kX:
 | 
| -        fProc(fMatrix, *pos + fOffset.x(), fOffset.y(), loc);
 | 
| +        fProc(fMatrix, *pos, fY, loc);
 | 
|          break;
 | 
|      }
 | 
|  }
 | 
| 
 |