SkDebugCanvas.h revision ab5827354e2c23624acc3fc1fe4a83788bc99e96
1902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
2902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com/*
3902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com * Copyright 2012 Google Inc.
4902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com *
5902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com * Use of this source code is governed by a BSD-style license that can be
6902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com * found in the LICENSE file.
7902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com */
8902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
9902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
10902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#ifndef SKDEBUGCANVAS_H_
11902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#define SKDEBUGCANVAS_H_
12902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
13902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#include "SkCanvas.h"
14902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#include "SkDrawCommand.h"
15902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#include "SkPicture.h"
168a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com#include "SkTArray.h"
1797cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com#include "SkString.h"
18902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1932bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.comclass SkTexOverrideFilter;
2032bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com
2186681b37bd20204e47a492119b345c01d00bc939fmalita@google.comclass SK_API SkDebugCanvas : public SkCanvas {
22902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
2380a4a60f96c33ccd850f9b0eb4b69ab08c198196chudy@google.com    SkDebugCanvas(int width, int height);
24f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com    virtual ~SkDebugCanvas();
25902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
26902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    void toggleFilter(bool toggle);
27902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
28902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
29f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com     * Enable or disable overdraw visualization
30f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com     */
31f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com    void setOverdrawViz(bool overdrawViz) { fOverdrawViz = overdrawViz; }
32f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com
33f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com    /**
3432bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com     * Enable or disable texure filtering override
3532bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com     */
36f84ad8f7fc0194389a8099da2c5e8fff9f092890skia.committer@gmail.com    void overrideTexFiltering(bool overrideTexFiltering, SkPaint::FilterLevel level);
3732bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com
3832bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com    /**
39902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Executes all draw calls to the canvas.
40902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param canvas  The canvas being drawn to
41902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
42902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    void draw(SkCanvas* canvas);
43902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
44902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
45902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Executes the draw calls up to the specified index.
46902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param canvas  The canvas being drawn to
47902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param index  The index of the final command being executed
48902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
490b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com    void drawTo(SkCanvas* canvas, int index);
500b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com
510b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com    /**
52a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com        Returns the most recently calculated transformation matrix
53a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com     */
54a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    const SkMatrix& getCurrentMatrix() {
55a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com        return fMatrix;
56a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    }
57a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com
58a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    /**
59a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com        Returns the most recently calculated clip
60a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com     */
61a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    const SkIRect& getCurrentClip() {
62a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com        return fClip;
63a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    }
64a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com
65a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    /**
660b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com        Returns the index of the last draw command to write to the pixel at (x,y)
670b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com     */
68830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    int getCommandAtPoint(int x, int y, int index);
69902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
70902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
7150c84da68b17647371a81593402e897d639989e4robertphillips@google.com        Removes the command at the specified index
7250c84da68b17647371a81593402e897d639989e4robertphillips@google.com        @param index  The index of the command to delete
7350c84da68b17647371a81593402e897d639989e4robertphillips@google.com     */
7450c84da68b17647371a81593402e897d639989e4robertphillips@google.com    void deleteDrawCommandAt(int index);
7550c84da68b17647371a81593402e897d639989e4robertphillips@google.com
7650c84da68b17647371a81593402e897d639989e4robertphillips@google.com    /**
77902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Returns the draw command at the given index.
78902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param index  The index of the command
79902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
80902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkDrawCommand* getDrawCommandAt(int index);
81902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
82902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
8350c84da68b17647371a81593402e897d639989e4robertphillips@google.com        Sets the draw command for a given index.
8450c84da68b17647371a81593402e897d639989e4robertphillips@google.com        @param index  The index to overwrite
8550c84da68b17647371a81593402e897d639989e4robertphillips@google.com        @param command The new command
8650c84da68b17647371a81593402e897d639989e4robertphillips@google.com     */
8750c84da68b17647371a81593402e897d639989e4robertphillips@google.com    void setDrawCommandAt(int index, SkDrawCommand* command);
8850c84da68b17647371a81593402e897d639989e4robertphillips@google.com
8950c84da68b17647371a81593402e897d639989e4robertphillips@google.com    /**
90902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Returns information about the command at the given index.
91902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param index  The index of the command
92902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
9397cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com    SkTDArray<SkString*>* getCommandInfo(int index);
94902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
95902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
967e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        Returns the visibility of the command at the given index.
977e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        @param index  The index of the command
987e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com     */
997e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    bool getDrawCommandVisibilityAt(int index);
1007e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com
1017e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    /**
102902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Returns the vector of draw commands
103902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
1044469938e92d779dff05e745559e67907bbf21e78reed@google.com    SK_ATTR_DEPRECATED("please use getDrawCommandAt and getSize instead")
1058a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com    const SkTDArray<SkDrawCommand*>& getDrawCommands() const;
1062e71f1619d9a2c51c1292e618f42a56ad2da1de8skia.committer@gmail.com
107febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com    /**
108febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com        Returns the vector of draw commands. Do not use this entry
109febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com        point - it is going away!
110febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com     */
111febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com    SkTDArray<SkDrawCommand*>& getDrawCommands();
112902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
113902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
114902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     * Returns the string vector of draw commands
115902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
1168a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com    SkTArray<SkString>* getDrawCommandsAsStrings() const;
117902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
118902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
119f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com        Returns length of draw command vector.
120f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com     */
1210d4fe14a41bd04535310f8b2edee9e30191fdd79commit-bot@chromium.org    int getSize() const {
12267baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com        return fCommandVector.count();
123f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com    }
124f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com
125902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
126902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Toggles the visibility / execution of the draw command at index i with
127902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        the value of toggle.
128902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
129902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    void toggleCommand(int index, bool toggle);
130902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
131b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com    void setBounds(int width, int height) {
132b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com        fWidth = width;
133b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com        fHeight = height;
134b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com    }
135b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com
136e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com    void setUserMatrix(SkMatrix matrix) {
137e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com        fUserMatrix = matrix;
138830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    }
139830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com
140902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com////////////////////////////////////////////////////////////////////////////////
141902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com// Inherited from SkCanvas
142902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com////////////////////////////////////////////////////////////////////////////////
143902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
144902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void clear(SkColor) SK_OVERRIDE;
145902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
146902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool clipPath(const SkPath&, SkRegion::Op, bool) SK_OVERRIDE;
147902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
148902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool clipRect(const SkRect&, SkRegion::Op, bool) SK_OVERRIDE;
149902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
15067baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com    virtual bool clipRRect(const SkRRect& rrect,
15167baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com                           SkRegion::Op op = SkRegion::kIntersect_Op,
15267baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com                           bool doAntiAlias = false) SK_OVERRIDE;
15367baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
154902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool clipRegion(const SkRegion& region, SkRegion::Op op) SK_OVERRIDE;
155902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
156902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool concat(const SkMatrix& matrix) SK_OVERRIDE;
157902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
158902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawBitmap(const SkBitmap&, SkScalar left, SkScalar top,
159902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                            const SkPaint*) SK_OVERRIDE;
160902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1617112173c3c4cd1b1e7da8cdf971d71f01dd91299reed@google.com    virtual void drawBitmapRectToRect(const SkBitmap&, const SkRect* src,
162eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org                                      const SkRect& dst, const SkPaint* paint,
163eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org                                      DrawBitmapRectFlags flags) SK_OVERRIDE;
164902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
165902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawBitmapMatrix(const SkBitmap&, const SkMatrix&,
166902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                                  const SkPaint*) SK_OVERRIDE;
167902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
168902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center,
169902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                                const SkRect& dst, const SkPaint*) SK_OVERRIDE;
170902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
171902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawData(const void*, size_t) SK_OVERRIDE;
172902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1730a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    virtual void beginCommentGroup(const char* description) SK_OVERRIDE;
1740a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
1750a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    virtual void addComment(const char* kywd, const char* value) SK_OVERRIDE;
1760a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
1770a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    virtual void endCommentGroup() SK_OVERRIDE;
1780a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
17967baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com    virtual void drawOval(const SkRect& oval, const SkPaint&) SK_OVERRIDE;
18067baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
181902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPaint(const SkPaint& paint) SK_OVERRIDE;
182902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1837ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.com    virtual void drawPath(const SkPath& path, const SkPaint&) SK_OVERRIDE;
1847ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.com
185902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPicture(SkPicture& picture) SK_OVERRIDE;
186902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
187902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPoints(PointMode, size_t count, const SkPoint pts[],
188902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                            const SkPaint&) SK_OVERRIDE;
189902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
190902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPosText(const void* text, size_t byteLength,
191902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                             const SkPoint pos[], const SkPaint&) SK_OVERRIDE;
192902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
193902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPosTextH(const void* text, size_t byteLength,
194422188f3c6286d2991a029027958387b070e4dc6skia.committer@gmail.com                              const SkScalar xpos[], SkScalar constY,
19567baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com                              const SkPaint&) SK_OVERRIDE;
196902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1977ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.com    virtual void drawRect(const SkRect& rect, const SkPaint&) SK_OVERRIDE;
1987ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.com
19967baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com    virtual void drawRRect(const SkRRect& rrect, const SkPaint& paint) SK_OVERRIDE;
20067baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
201902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawSprite(const SkBitmap&, int left, int top,
202902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                            const SkPaint*) SK_OVERRIDE;
203902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
204902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawText(const void* text, size_t byteLength, SkScalar x,
205902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                          SkScalar y, const SkPaint&) SK_OVERRIDE;
206902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
207902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawTextOnPath(const void* text, size_t byteLength,
20867baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com                                const SkPath& path, const SkMatrix* matrix,
209902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                                const SkPaint&) SK_OVERRIDE;
210902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
211902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawVertices(VertexMode, int vertexCount,
21267baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com                              const SkPoint vertices[], const SkPoint texs[],
21367baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com                              const SkColor colors[], SkXfermode*,
21467baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com                              const uint16_t indices[], int indexCount,
215902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                              const SkPaint&) SK_OVERRIDE;
216902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
217902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void restore() SK_OVERRIDE;
218902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
219902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool rotate(SkScalar degrees) SK_OVERRIDE;
220902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
221902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual int save(SaveFlags) SK_OVERRIDE;
222902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
223902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual int saveLayer(const SkRect* bounds, const SkPaint*, SaveFlags) SK_OVERRIDE;
224902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
225902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool scale(SkScalar sx, SkScalar sy) SK_OVERRIDE;
226902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
227902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void setMatrix(const SkMatrix& matrix) SK_OVERRIDE;
228902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
229902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool skew(SkScalar sx, SkScalar sy) SK_OVERRIDE;
230902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
231902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool translate(SkScalar dx, SkScalar dy) SK_OVERRIDE;
232902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
2333b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    static const int kVizImageHeight = 256;
2343b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    static const int kVizImageWidth = 256;
2353b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com
236ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.orgprotected:
237ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org    virtual void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) SK_OVERRIDE;
238ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org
239902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
24067baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com    SkTDArray<SkDrawCommand*> fCommandVector;
241b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com    int fWidth;
2421735d6696e9a941925e6ca352849307d698ef139commit-bot@chromium.org    int fHeight;
2437e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    bool fFilter;
244830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    int fIndex;
245e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com    SkMatrix fUserMatrix;
246a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    SkMatrix fMatrix;
247a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    SkIRect fClip;
24832bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com
249f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com    bool fOverdrawViz;
250f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com    SkDrawFilter* fOverdrawFilter;
251902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
25232bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com    bool fOverrideTexFiltering;
25332bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com    SkTexOverrideFilter* fTexOverrideFilter;
25432bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com
255902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
2560699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com        Number of unmatched save() calls at any point during a draw.
2570699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com        If there are any saveLayer() calls outstanding, we need to resolve
2580699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com        all of them, which in practice means resolving all save() calls,
2590699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com        to avoid corruption of our canvas.
2600699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com    */
2610699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com    int fOutstandingSaveCount;
2620699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com
2630699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com    /**
264902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Adds the command to the classes vector of commands.
265902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param command  The draw command for execution
266902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
267902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    void addDrawCommand(SkDrawCommand* command);
268830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com
269830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    /**
270830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com        Applies any panning and zooming the user has specified before
271830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com        drawing anything else into the canvas.
272830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com     */
273830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    void applyUserTransform(SkCanvas* canvas);
2743b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com
2753b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    typedef SkCanvas INHERITED;
276902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
277902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
278902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#endif
279