| Index: include/utils/SkPaintFilterCanvas.h
 | 
| diff --git a/include/utils/SkPaintFilterCanvas.h b/include/utils/SkPaintFilterCanvas.h
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..942fbda8763d2cbaa7c623893748d1671aa91496
 | 
| --- /dev/null
 | 
| +++ b/include/utils/SkPaintFilterCanvas.h
 | 
| @@ -0,0 +1,93 @@
 | 
| +/*
 | 
| + * Copyright 2015 Google Inc.
 | 
| + *
 | 
| + * Use of this source code is governed by a BSD-style license that can be
 | 
| + * found in the LICENSE file.
 | 
| + */
 | 
| +
 | 
| +#ifndef SkPaintFilterCanvas_DEFINED
 | 
| +#define SkPaintFilterCanvas_DEFINED
 | 
| +
 | 
| +#include "SkNWayCanvas.h"
 | 
| +
 | 
| +/** \class SkPaintFilterCanvas
 | 
| +
 | 
| +    A utility proxy base class for implementing paint filters.
 | 
| +*/
 | 
| +class SK_API SkPaintFilterCanvas : public SkNWayCanvas {
 | 
| +public:
 | 
| +    SkPaintFilterCanvas(int width, int height);
 | 
| +
 | 
| +    enum Type {
 | 
| +        kPaint_Type,
 | 
| +        kPoint_Type,
 | 
| +        kBitmap_Type,
 | 
| +        kRect_Type,
 | 
| +        kRRect_Type,
 | 
| +        kDRRect_Type,
 | 
| +        kOval_Type,
 | 
| +        kPath_Type,
 | 
| +        kPicture_Type,
 | 
| +        kText_Type,
 | 
| +        kTextBlob_Type,
 | 
| +        kVertices_Type,
 | 
| +        kPatch_Type,
 | 
| +
 | 
| +        kTypeCount
 | 
| +    };
 | 
| +
 | 
| +protected:
 | 
| +    /**
 | 
| +     *  Called with the paint that will be used to draw the specified type.
 | 
| +     *  The implementation may modify the paint as they wish.
 | 
| +     *
 | 
| +     *  Note: The base implementation calls onFilterPaint() for top-level/explicit paints only.
 | 
| +     *        To also filter encapsulated paints (e.g. SkPicture, SkTextBlob), clients may need to
 | 
| +     *        override the relevant methods (i.e. drawPicture, drawTextBlob).
 | 
| +     */
 | 
| +    virtual void onFilterPaint(SkPaint* paint, Type type) const = 0;
 | 
| +
 | 
| +    void onDrawPaint(const SkPaint&) override;
 | 
| +    void onDrawPoints(PointMode, size_t count, const SkPoint pts[], const SkPaint&) override;
 | 
| +    void onDrawRect(const SkRect&, const SkPaint&) override;
 | 
| +    void onDrawRRect(const SkRRect&, const SkPaint&) override;
 | 
| +    void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) override;
 | 
| +    void onDrawOval(const SkRect&, const SkPaint&) override;
 | 
| +    void onDrawPath(const SkPath&, const SkPaint&) override;
 | 
| +    void onDrawBitmap(const SkBitmap&, SkScalar left, SkScalar top, const SkPaint*) override;
 | 
| +    void onDrawBitmapRect(const SkBitmap&, const SkRect* src, const SkRect& dst, const SkPaint*,
 | 
| +                          DrawBitmapRectFlags flags) override;
 | 
| +    void onDrawImage(const SkImage*, SkScalar left, SkScalar top, const SkPaint*) override;
 | 
| +    void onDrawImageRect(const SkImage*, const SkRect* src, const SkRect& dst,
 | 
| +                         const SkPaint*) override;
 | 
| +    void onDrawBitmapNine(const SkBitmap&, const SkIRect& center, const SkRect& dst,
 | 
| +                          const SkPaint*) override;
 | 
| +    void onDrawSprite(const SkBitmap&, int left, int top, const SkPaint*) override;
 | 
| +    void onDrawVertices(VertexMode vmode, int vertexCount,
 | 
| +                              const SkPoint vertices[], const SkPoint texs[],
 | 
| +                              const SkColor colors[], SkXfermode* xmode,
 | 
| +                              const uint16_t indices[], int indexCount,
 | 
| +                              const SkPaint&) override;
 | 
| +    void onDrawPatch(const SkPoint cubics[12], const SkColor colors[4],
 | 
| +                             const SkPoint texCoords[4], SkXfermode* xmode,
 | 
| +                             const SkPaint& paint) override;
 | 
| +    void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*) override;
 | 
| +
 | 
| +    void onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y,
 | 
| +                    const SkPaint&) override;
 | 
| +    void onDrawPosText(const void* text, size_t byteLength, const SkPoint pos[],
 | 
| +                       const SkPaint&) override;
 | 
| +    void onDrawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[],
 | 
| +                        SkScalar constY, const SkPaint&) override;
 | 
| +    void onDrawTextOnPath(const void* text, size_t byteLength, const SkPath& path,
 | 
| +                          const SkMatrix* matrix, const SkPaint&) override;
 | 
| +    void onDrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y,
 | 
| +                        const SkPaint& paint) override;
 | 
| +
 | 
| +private:
 | 
| +    class AutoPaintFilter;
 | 
| +
 | 
| +    typedef SkNWayCanvas INHERITED;
 | 
| +};
 | 
| +
 | 
| +#endif
 | 
| 
 |