SkDebugCanvas.h revision 7ce564cccb246ec56427085872b2e1458fe74bd1
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 in the specified range.
46902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param canvas  The canvas being drawn to
47902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param i  The beginning of the range
48902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param j  The end of the range
49902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        TODO(chudy): Implement
50902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
51902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    void drawRange(SkCanvas* canvas, int i, int j);
52902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
53902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
54902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Executes the draw calls up to the specified index.
55902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param canvas  The canvas being drawn to
56902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param index  The index of the final command being executed
57902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
580b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com    void drawTo(SkCanvas* canvas, int index);
590b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com
600b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com    /**
61a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com        Returns the most recently calculated transformation matrix
62a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com     */
63a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    const SkMatrix& getCurrentMatrix() {
64a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com        return fMatrix;
65a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    }
66a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com
67a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    /**
68a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com        Returns the most recently calculated clip
69a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com     */
70a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    const SkIRect& getCurrentClip() {
71a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com        return fClip;
72a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    }
73a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com
74a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    /**
750b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com        Returns the index of the last draw command to write to the pixel at (x,y)
760b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com     */
77830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    int getCommandAtPoint(int x, int y, int index);
78902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
79902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
8050c84da68b17647371a81593402e897d639989e4robertphillips@google.com        Removes the command at the specified index
8150c84da68b17647371a81593402e897d639989e4robertphillips@google.com        @param index  The index of the command to delete
8250c84da68b17647371a81593402e897d639989e4robertphillips@google.com     */
8350c84da68b17647371a81593402e897d639989e4robertphillips@google.com    void deleteDrawCommandAt(int index);
8450c84da68b17647371a81593402e897d639989e4robertphillips@google.com
8550c84da68b17647371a81593402e897d639989e4robertphillips@google.com    /**
86902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Returns the draw command at the given index.
87902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param index  The index of the command
88902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
89902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkDrawCommand* getDrawCommandAt(int index);
90902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
91902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
9250c84da68b17647371a81593402e897d639989e4robertphillips@google.com        Sets the draw command for a given index.
9350c84da68b17647371a81593402e897d639989e4robertphillips@google.com        @param index  The index to overwrite
9450c84da68b17647371a81593402e897d639989e4robertphillips@google.com        @param command The new command
9550c84da68b17647371a81593402e897d639989e4robertphillips@google.com     */
9650c84da68b17647371a81593402e897d639989e4robertphillips@google.com    void setDrawCommandAt(int index, SkDrawCommand* command);
9750c84da68b17647371a81593402e897d639989e4robertphillips@google.com
9850c84da68b17647371a81593402e897d639989e4robertphillips@google.com    /**
99902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Returns information about the command at the given index.
100902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param index  The index of the command
101902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
10297cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com    SkTDArray<SkString*>* getCommandInfo(int index);
103902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
104902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
1057e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        Returns the visibility of the command at the given index.
1067e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        @param index  The index of the command
1077e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com     */
1087e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    bool getDrawCommandVisibilityAt(int index);
1097e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com
1107e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    /**
111902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Returns the vector of draw commands
11250c84da68b17647371a81593402e897d639989e4robertphillips@google.com        DEPRECATED: please use getDrawCommandAt and getSize instead
113902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
1148a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com    const SkTDArray<SkDrawCommand*>& getDrawCommands() const;
1152e71f1619d9a2c51c1292e618f42a56ad2da1de8skia.committer@gmail.com
116febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com    /**
117febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com        Returns the vector of draw commands. Do not use this entry
118febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com        point - it is going away!
119febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com     */
120febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com    SkTDArray<SkDrawCommand*>& getDrawCommands();
121902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
122902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
123902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     * Returns the string vector of draw commands
124902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
1258a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com    SkTArray<SkString>* getDrawCommandsAsStrings() const;
126902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
127902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
128f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com        Returns length of draw command vector.
129f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com     */
1300d4fe14a41bd04535310f8b2edee9e30191fdd79commit-bot@chromium.org    int getSize() const {
13167baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com        return fCommandVector.count();
132f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com    }
133f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com
134902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
135902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Toggles the visibility / execution of the draw command at index i with
136902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        the value of toggle.
137902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
138902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    void toggleCommand(int index, bool toggle);
139902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
140b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com    void setBounds(int width, int height) {
141b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com        fWidth = width;
142b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com        fHeight = height;
143b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com    }
144b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com
145e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com    void setUserMatrix(SkMatrix matrix) {
146e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com        fUserMatrix = matrix;
147830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    }
148830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com
149902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com////////////////////////////////////////////////////////////////////////////////
150902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com// Inherited from SkCanvas
151902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com////////////////////////////////////////////////////////////////////////////////
152902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
153902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void clear(SkColor) SK_OVERRIDE;
154902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
155902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool clipPath(const SkPath&, SkRegion::Op, bool) SK_OVERRIDE;
156902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
157902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool clipRect(const SkRect&, SkRegion::Op, bool) SK_OVERRIDE;
158902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
15967baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com    virtual bool clipRRect(const SkRRect& rrect,
16067baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com                           SkRegion::Op op = SkRegion::kIntersect_Op,
16167baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com                           bool doAntiAlias = false) SK_OVERRIDE;
16267baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
163902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool clipRegion(const SkRegion& region, SkRegion::Op op) SK_OVERRIDE;
164902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
165902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool concat(const SkMatrix& matrix) SK_OVERRIDE;
166902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
167902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawBitmap(const SkBitmap&, SkScalar left, SkScalar top,
168902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                            const SkPaint*) SK_OVERRIDE;
169902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1707112173c3c4cd1b1e7da8cdf971d71f01dd91299reed@google.com    virtual void drawBitmapRectToRect(const SkBitmap&, const SkRect* src,
171eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org                                      const SkRect& dst, const SkPaint* paint,
172eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org                                      DrawBitmapRectFlags flags) SK_OVERRIDE;
173902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
174902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawBitmapMatrix(const SkBitmap&, const SkMatrix&,
175902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                                  const SkPaint*) SK_OVERRIDE;
176902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
177902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center,
178902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                                const SkRect& dst, const SkPaint*) SK_OVERRIDE;
179902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
180902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawData(const void*, size_t) SK_OVERRIDE;
181902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1820a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    virtual void beginCommentGroup(const char* description) SK_OVERRIDE;
1830a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
1840a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    virtual void addComment(const char* kywd, const char* value) SK_OVERRIDE;
1850a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
1860a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    virtual void endCommentGroup() SK_OVERRIDE;
1870a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
18867baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com    virtual void drawOval(const SkRect& oval, const SkPaint&) SK_OVERRIDE;
18967baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
190902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPaint(const SkPaint& paint) SK_OVERRIDE;
191902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1927ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.com    virtual void drawPath(const SkPath& path, const SkPaint&) SK_OVERRIDE;
1937ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.com
194902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPicture(SkPicture& picture) SK_OVERRIDE;
195902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
196902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPoints(PointMode, size_t count, const SkPoint pts[],
197902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                            const SkPaint&) SK_OVERRIDE;
198902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
199902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPosText(const void* text, size_t byteLength,
200902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                             const SkPoint pos[], const SkPaint&) SK_OVERRIDE;
201902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
202902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPosTextH(const void* text, size_t byteLength,
203422188f3c6286d2991a029027958387b070e4dc6skia.committer@gmail.com                              const SkScalar xpos[], SkScalar constY,
20467baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com                              const SkPaint&) SK_OVERRIDE;
205902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
2067ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.com    virtual void drawRect(const SkRect& rect, const SkPaint&) SK_OVERRIDE;
2077ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.com
20867baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com    virtual void drawRRect(const SkRRect& rrect, const SkPaint& paint) SK_OVERRIDE;
20967baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
210902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawSprite(const SkBitmap&, int left, int top,
211902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                            const SkPaint*) SK_OVERRIDE;
212902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
213902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawText(const void* text, size_t byteLength, SkScalar x,
214902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                          SkScalar y, const SkPaint&) SK_OVERRIDE;
215902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
216902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawTextOnPath(const void* text, size_t byteLength,
21767baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com                                const SkPath& path, const SkMatrix* matrix,
218902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                                const SkPaint&) SK_OVERRIDE;
219902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
220902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawVertices(VertexMode, int vertexCount,
22167baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com                              const SkPoint vertices[], const SkPoint texs[],
22267baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com                              const SkColor colors[], SkXfermode*,
22367baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com                              const uint16_t indices[], int indexCount,
224902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                              const SkPaint&) SK_OVERRIDE;
225902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
226902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void restore() SK_OVERRIDE;
227902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
228902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool rotate(SkScalar degrees) SK_OVERRIDE;
229902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
230902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual int save(SaveFlags) SK_OVERRIDE;
231902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
232902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual int saveLayer(const SkRect* bounds, const SkPaint*, SaveFlags) SK_OVERRIDE;
233902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
234902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool scale(SkScalar sx, SkScalar sy) SK_OVERRIDE;
235902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
236902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void setMatrix(const SkMatrix& matrix) SK_OVERRIDE;
237902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
238902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool skew(SkScalar sx, SkScalar sy) SK_OVERRIDE;
239902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
240902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool translate(SkScalar dx, SkScalar dy) SK_OVERRIDE;
241902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
2423b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    static const int kVizImageHeight = 256;
2433b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    static const int kVizImageWidth = 256;
2443b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com
245902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
24667baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com    SkTDArray<SkDrawCommand*> fCommandVector;
247b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com    int fHeight;
248b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com    int fWidth;
249902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkBitmap fBm;
2507e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    bool fFilter;
251830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    int fIndex;
252e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com    SkMatrix fUserMatrix;
253a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    SkMatrix fMatrix;
254a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    SkIRect fClip;
25532bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com
256f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com    bool fOverdrawViz;
257f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com    SkDrawFilter* fOverdrawFilter;
258902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
25932bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com    bool fOverrideTexFiltering;
26032bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com    SkTexOverrideFilter* fTexOverrideFilter;
26132bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com
262902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
2630699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com        Number of unmatched save() calls at any point during a draw.
2640699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com        If there are any saveLayer() calls outstanding, we need to resolve
2650699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com        all of them, which in practice means resolving all save() calls,
2660699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com        to avoid corruption of our canvas.
2670699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com    */
2680699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com    int fOutstandingSaveCount;
2690699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com
2700699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com    /**
271902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Adds the command to the classes vector of commands.
272902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param command  The draw command for execution
273902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
274902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    void addDrawCommand(SkDrawCommand* command);
275830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com
276830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    /**
277830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com        Applies any panning and zooming the user has specified before
278830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com        drawing anything else into the canvas.
279830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com     */
280830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    void applyUserTransform(SkCanvas* canvas);
2813b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com
2823b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    typedef SkCanvas INHERITED;
283902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
284902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
285902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#endif
286