| Index: include/gpu/GrContext.h | 
| diff --git a/include/gpu/GrContext.h b/include/gpu/GrContext.h | 
| index c3c11b7be7900ebbffaa97786184df782f69e9a1..4df1dac381437673d787764d364bfcb05053ed91 100644 | 
| --- a/include/gpu/GrContext.h | 
| +++ b/include/gpu/GrContext.h | 
| @@ -387,34 +387,6 @@ public: | 
| GrRenderTarget* wrapBackendRenderTarget(const GrBackendRenderTargetDesc& desc); | 
|  | 
| /////////////////////////////////////////////////////////////////////////// | 
| -    // Matrix state | 
| - | 
| -    /** | 
| -     * Gets the current transformation matrix. | 
| -     * @return the current matrix. | 
| -     */ | 
| -    const SkMatrix& getMatrix() const { return fViewMatrix; } | 
| - | 
| -    /** | 
| -     * Sets the transformation matrix. | 
| -     * @param m the matrix to set. | 
| -     */ | 
| -    void setMatrix(const SkMatrix& m) { fViewMatrix = m; } | 
| - | 
| -    /** | 
| -     * Sets the current transformation matrix to identity. | 
| -     */ | 
| -    void setIdentityMatrix() { fViewMatrix.reset(); } | 
| - | 
| -    /** | 
| -     * Concats the current matrix. The passed matrix is applied before the | 
| -     * current matrix. | 
| -     * @param m the matrix to concat. | 
| -     */ | 
| -    void concatMatrix(const SkMatrix& m) { fViewMatrix.preConcat(m); } | 
| - | 
| - | 
| -    /////////////////////////////////////////////////////////////////////////// | 
| // Clip state | 
| /** | 
| * Gets the current clip. | 
| @@ -444,11 +416,12 @@ public: | 
| /** | 
| *  Draw everywhere (respecting the clip) with the paint. | 
| */ | 
| -    void drawPaint(const GrPaint& paint); | 
| +    void drawPaint(const GrPaint&, const SkMatrix& viewMatrix); | 
|  | 
| /** | 
| *  Draw the rect using a paint. | 
| *  @param paint        describes how to color pixels. | 
| +     *  @param viewMatrix   transformation matrix | 
| *  @param strokeInfo   the stroke information (width, join, cap), and. | 
| *                      the dash information (intervals, count, phase). | 
| *                      If strokeInfo == NULL, then the rect is filled. | 
| @@ -458,6 +431,7 @@ public: | 
| *  The rects coords are used to access the paint (through texture matrix) | 
| */ | 
| void drawRect(const GrPaint& paint, | 
| +                  const SkMatrix& viewMatrix, | 
| const SkRect&, | 
| const GrStrokeInfo* strokeInfo = NULL); | 
|  | 
| @@ -468,24 +442,26 @@ public: | 
| *  provided to transform the local rect. | 
| * | 
| * @param paint         describes how to color pixels. | 
| +     * @param viewMatrix    transformation matrix | 
| * @param dstRect       the destination rect to draw. | 
| * @param localRect     rect of local coordinates to be mapped onto dstRect | 
| -     * @param localMatrix   Optional matrix to transform localRect. | 
| */ | 
| void drawRectToRect(const GrPaint& paint, | 
| +                        const SkMatrix& viewMatrix, | 
| const SkRect& dstRect, | 
| -                        const SkRect& localRect, | 
| -                        const SkMatrix* localMatrix = NULL); | 
| +                        const SkRect& localRect); | 
|  | 
| /** | 
| *  Draw a roundrect using a paint. | 
| * | 
| *  @param paint        describes how to color pixels. | 
| +     *  @param viewMatrix   transformation matrix | 
| *  @param rrect        the roundrect to draw | 
| *  @param strokeInfo   the stroke information (width, join, cap) and | 
| *                      the dash information (intervals, count, phase). | 
| */ | 
| -    void drawRRect(const GrPaint& paint, const SkRRect& rrect, const GrStrokeInfo& strokeInfo); | 
| +    void drawRRect(const GrPaint&, const SkMatrix& viewMatrix, const SkRRect& rrect, | 
| +                   const GrStrokeInfo&); | 
|  | 
| /** | 
| *  Shortcut for drawing an SkPath consisting of nested rrects using a paint. | 
| @@ -493,26 +469,30 @@ public: | 
| *  inner. | 
| * | 
| *  @param paint        describes how to color pixels. | 
| +     *  @param viewMatrix   transformation matrix | 
| *  @param outer        the outer roundrect | 
| *  @param inner        the inner roundrect | 
| */ | 
| -    void drawDRRect(const GrPaint& paint, const SkRRect& outer, const SkRRect& inner); | 
| +    void drawDRRect(const GrPaint&, const SkMatrix& viewMatrix, const SkRRect& outer, | 
| +                    const SkRRect& inner); | 
|  | 
|  | 
| /** | 
| * Draws a path. | 
| * | 
| * @param paint         describes how to color pixels. | 
| +     * @param viewMatrix    transformation matrix | 
| * @param path          the path to draw | 
| * @param strokeInfo    the stroke information (width, join, cap) and | 
| *                      the dash information (intervals, count, phase). | 
| */ | 
| -    void drawPath(const GrPaint& paint, const SkPath& path, const GrStrokeInfo& strokeInfo); | 
| +    void drawPath(const GrPaint&, const SkMatrix& viewMatrix, const SkPath&, const GrStrokeInfo&); | 
|  | 
| /** | 
| * Draws vertices with a paint. | 
| * | 
| * @param   paint           describes how to color pixels. | 
| +     * @param   viewMatrix      transformation matrix | 
| * @param   primitiveType   primitives type to draw. | 
| * @param   vertexCount     number of vertices. | 
| * @param   positions       array of vertex positions, required. | 
| @@ -526,6 +506,7 @@ public: | 
| *                          number of indices. | 
| */ | 
| void drawVertices(const GrPaint& paint, | 
| +                      const SkMatrix& viewMatrix, | 
| GrPrimitiveType primitiveType, | 
| int vertexCount, | 
| const SkPoint positions[], | 
| @@ -538,11 +519,13 @@ public: | 
| * Draws an oval. | 
| * | 
| * @param paint         describes how to color pixels. | 
| +     * @param viewMatrix    transformation matrix | 
| * @param oval          the bounding rect of the oval. | 
| * @param strokeInfo    the stroke information (width, join, cap) and | 
| *                      the dash information (intervals, count, phase). | 
| */ | 
| void drawOval(const GrPaint& paint, | 
| +                  const SkMatrix& viewMatrix, | 
| const SkRect& oval, | 
| const GrStrokeInfo& strokeInfo); | 
|  | 
| @@ -709,113 +692,6 @@ public: | 
| GrRenderTarget* fPrevTarget; | 
| }; | 
|  | 
| -    /** | 
| -     * Save/restore the view-matrix in the context. It can optionally adjust a paint to account | 
| -     * for a coordinate system change. Here is an example of how the paint param can be used: | 
| -     * | 
| -     * A GrPaint is setup with GrProcessors. The stages will have access to the pre-matrix source | 
| -     * geometry positions when the draw is executed. Later on a decision is made to transform the | 
| -     * geometry to device space on the CPU. The effects now need to know that the space in which | 
| -     * the geometry will be specified has changed. | 
| -     * | 
| -     * Note that when restore is called (or in the destructor) the context's matrix will be | 
| -     * restored. However, the paint will not be restored. The caller must make a copy of the | 
| -     * paint if necessary. Hint: use SkTCopyOnFirstWrite if the AutoMatrix is conditionally | 
| -     * initialized. | 
| -     */ | 
| -    class AutoMatrix : public ::SkNoncopyable { | 
| -    public: | 
| -        AutoMatrix() : fContext(NULL) {} | 
| - | 
| -        ~AutoMatrix() { this->restore(); } | 
| - | 
| -        /** | 
| -         * Initializes by pre-concat'ing the context's current matrix with the preConcat param. | 
| -         */ | 
| -        void setPreConcat(GrContext* context, const SkMatrix& preConcat, GrPaint* paint = NULL) { | 
| -            SkASSERT(context); | 
| - | 
| -            this->restore(); | 
| - | 
| -            fContext = context; | 
| -            fMatrix = context->getMatrix(); | 
| -            this->preConcat(preConcat, paint); | 
| -        } | 
| - | 
| -        /** | 
| -         * Sets the context's matrix to identity. Returns false if the inverse matrix is required to | 
| -         * update a paint but the matrix cannot be inverted. | 
| -         */ | 
| -        bool setIdentity(GrContext* context, GrPaint* paint = NULL) { | 
| -            SkASSERT(context); | 
| - | 
| -            this->restore(); | 
| - | 
| -            if (paint) { | 
| -                if (!paint->localCoordChangeInverse(context->getMatrix())) { | 
| -                    return false; | 
| -                } | 
| -            } | 
| -            fMatrix = context->getMatrix(); | 
| -            fContext = context; | 
| -            context->setIdentityMatrix(); | 
| -            return true; | 
| -        } | 
| - | 
| -        /** | 
| -         * Replaces the context's matrix with a new matrix. Returns false if the inverse matrix is | 
| -         * required to update a paint but the matrix cannot be inverted. | 
| -         */ | 
| -        bool set(GrContext* context, const SkMatrix& newMatrix, GrPaint* paint = NULL) { | 
| -            if (paint) { | 
| -                if (!this->setIdentity(context, paint)) { | 
| -                    return false; | 
| -                } | 
| -                this->preConcat(newMatrix, paint); | 
| -            } else { | 
| -                this->restore(); | 
| -                fContext = context; | 
| -                fMatrix = context->getMatrix(); | 
| -                context->setMatrix(newMatrix); | 
| -            } | 
| -            return true; | 
| -        } | 
| - | 
| -        /** | 
| -         * If this has been initialized then the context's matrix will be further updated by | 
| -         * pre-concat'ing the preConcat param. The matrix that will be restored remains unchanged. | 
| -         * The paint is assumed to be relative to the context's matrix at the time this call is | 
| -         * made, not the matrix at the time AutoMatrix was first initialized. In other words, this | 
| -         * performs an incremental update of the paint. | 
| -         */ | 
| -        void preConcat(const SkMatrix& preConcat, GrPaint* paint = NULL) { | 
| -            if (paint) { | 
| -                paint->localCoordChange(preConcat); | 
| -            } | 
| -            fContext->concatMatrix(preConcat); | 
| -        } | 
| - | 
| -        /** | 
| -         * Returns false if never initialized or the inverse matrix was required to update a paint | 
| -         * but the matrix could not be inverted. | 
| -         */ | 
| -        bool succeeded() const { return SkToBool(fContext); } | 
| - | 
| -        /** | 
| -         * If this has been initialized then the context's original matrix is restored. | 
| -         */ | 
| -        void restore() { | 
| -            if (fContext) { | 
| -                fContext->setMatrix(fMatrix); | 
| -                fContext = NULL; | 
| -            } | 
| -        } | 
| - | 
| -    private: | 
| -        GrContext*  fContext; | 
| -        SkMatrix    fMatrix; | 
| -    }; | 
| - | 
| class AutoClip : public ::SkNoncopyable { | 
| public: | 
| // This enum exists to require a caller of the constructor to acknowledge that the clip will | 
| @@ -861,15 +737,11 @@ public: | 
| AutoWideOpenIdentityDraw(GrContext* ctx, GrRenderTarget* rt) | 
| : fAutoClip(ctx, AutoClip::kWideOpen_InitialClip) | 
| , fAutoRT(ctx, rt) { | 
| -            fAutoMatrix.setIdentity(ctx); | 
| -            // should never fail with no paint param. | 
| -            SkASSERT(fAutoMatrix.succeeded()); | 
| } | 
|  | 
| private: | 
| AutoClip fAutoClip; | 
| AutoRenderTarget fAutoRT; | 
| -        AutoMatrix fAutoMatrix; | 
| }; | 
|  | 
| /////////////////////////////////////////////////////////////////////////// | 
| @@ -934,7 +806,6 @@ public: | 
|  | 
| private: | 
| GrGpu*                          fGpu; | 
| -    SkMatrix                        fViewMatrix; | 
| SkAutoTUnref<GrRenderTarget>    fRenderTarget; | 
| const GrClipData*               fClip;  // TODO: make this ref counted | 
|  | 
| @@ -979,10 +850,14 @@ private: | 
| class AutoCheckFlush; | 
| /// Sets the paint and returns the target to draw into. The paint can be NULL in which case the | 
| /// draw state is left unmodified. | 
| -    GrDrawTarget* prepareToDraw(GrDrawState* ds, const GrPaint* paint, const AutoCheckFlush*); | 
| +    GrDrawTarget* prepareToDraw(GrDrawState* ds, | 
| +                                const GrPaint* paint, | 
| +                                const SkMatrix* viewMatrix, | 
| +                                const AutoCheckFlush*); | 
|  | 
| void internalDrawPath(GrDrawTarget*, | 
| GrDrawState*, | 
| +                          const SkMatrix& viewMatrix, | 
| GrColor, | 
| bool useAA, | 
| const SkPath&, | 
|  |