SkDebugCanvas.h revision 1643b2c9bc5adb4324bb459bb7811f58bc7c2d62
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
26768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org    void toggleFilter(bool toggle) { fFilter = toggle; }
27768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org
28768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org    void setMegaVizMode(bool megaVizMode) { fMegaVizMode = megaVizMode; }
29902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
30902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
31f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com     * Enable or disable overdraw visualization
32f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com     */
33f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com    void setOverdrawViz(bool overdrawViz) { fOverdrawViz = overdrawViz; }
34f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com
35f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com    /**
3632bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com     * Enable or disable texure filtering override
3732bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com     */
38f84ad8f7fc0194389a8099da2c5e8fff9f092890skia.committer@gmail.com    void overrideTexFiltering(bool overrideTexFiltering, SkPaint::FilterLevel level);
3932bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com
4032bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com    /**
41902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Executes all draw calls to the canvas.
42902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param canvas  The canvas being drawn to
43902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
44902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    void draw(SkCanvas* canvas);
45902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
46902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
47902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Executes the draw calls up to the specified index.
48902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param canvas  The canvas being drawn to
49902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param index  The index of the final command being executed
50902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
510b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com    void drawTo(SkCanvas* canvas, int index);
520b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com
530b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com    /**
54a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com        Returns the most recently calculated transformation matrix
55a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com     */
56a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    const SkMatrix& getCurrentMatrix() {
57a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com        return fMatrix;
58a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    }
59a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com
60a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    /**
61a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com        Returns the most recently calculated clip
62a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com     */
63a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    const SkIRect& getCurrentClip() {
64a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com        return fClip;
65a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    }
66a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com
67a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    /**
680b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com        Returns the index of the last draw command to write to the pixel at (x,y)
690b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com     */
70830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    int getCommandAtPoint(int x, int y, int index);
71902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
72902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
7350c84da68b17647371a81593402e897d639989e4robertphillips@google.com        Removes the command at the specified index
7450c84da68b17647371a81593402e897d639989e4robertphillips@google.com        @param index  The index of the command to delete
7550c84da68b17647371a81593402e897d639989e4robertphillips@google.com     */
7650c84da68b17647371a81593402e897d639989e4robertphillips@google.com    void deleteDrawCommandAt(int index);
7750c84da68b17647371a81593402e897d639989e4robertphillips@google.com
7850c84da68b17647371a81593402e897d639989e4robertphillips@google.com    /**
79902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Returns the draw command at the given index.
80902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param index  The index of the command
81902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
82902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkDrawCommand* getDrawCommandAt(int index);
83902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
84902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
8550c84da68b17647371a81593402e897d639989e4robertphillips@google.com        Sets the draw command for a given index.
8650c84da68b17647371a81593402e897d639989e4robertphillips@google.com        @param index  The index to overwrite
8750c84da68b17647371a81593402e897d639989e4robertphillips@google.com        @param command The new command
8850c84da68b17647371a81593402e897d639989e4robertphillips@google.com     */
8950c84da68b17647371a81593402e897d639989e4robertphillips@google.com    void setDrawCommandAt(int index, SkDrawCommand* command);
9050c84da68b17647371a81593402e897d639989e4robertphillips@google.com
9150c84da68b17647371a81593402e897d639989e4robertphillips@google.com    /**
92902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Returns information about the command at the given index.
93902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param index  The index of the command
94902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
9597cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com    SkTDArray<SkString*>* getCommandInfo(int index);
96902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
97902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
987e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        Returns the visibility of the command at the given index.
997e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        @param index  The index of the command
1007e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com     */
1017e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    bool getDrawCommandVisibilityAt(int index);
1027e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com
1037e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    /**
104902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Returns the vector of draw commands
105902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
1064469938e92d779dff05e745559e67907bbf21e78reed@google.com    SK_ATTR_DEPRECATED("please use getDrawCommandAt and getSize instead")
1078a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com    const SkTDArray<SkDrawCommand*>& getDrawCommands() const;
1082e71f1619d9a2c51c1292e618f42a56ad2da1de8skia.committer@gmail.com
109febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com    /**
110febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com        Returns the vector of draw commands. Do not use this entry
111febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com        point - it is going away!
112febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com     */
113febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com    SkTDArray<SkDrawCommand*>& getDrawCommands();
114902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
115902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
116902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     * Returns the string vector of draw commands
117902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
1188a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com    SkTArray<SkString>* getDrawCommandsAsStrings() const;
119902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
120902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
121f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com        Returns length of draw command vector.
122f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com     */
1230d4fe14a41bd04535310f8b2edee9e30191fdd79commit-bot@chromium.org    int getSize() const {
12467baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com        return fCommandVector.count();
125f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com    }
126f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com
127902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
128902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Toggles the visibility / execution of the draw command at index i with
129902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        the value of toggle.
130902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
131902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    void toggleCommand(int index, bool toggle);
132902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
133b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com    void setBounds(int width, int height) {
134b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com        fWidth = width;
135b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com        fHeight = height;
136b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com    }
137b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com
138e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com    void setUserMatrix(SkMatrix matrix) {
139e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com        fUserMatrix = matrix;
140830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    }
141830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com
142902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com////////////////////////////////////////////////////////////////////////////////
143902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com// Inherited from SkCanvas
144902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com////////////////////////////////////////////////////////////////////////////////
145902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
146902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void clear(SkColor) SK_OVERRIDE;
147902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
148902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool concat(const SkMatrix& matrix) SK_OVERRIDE;
149902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
150902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawBitmap(const SkBitmap&, SkScalar left, SkScalar top,
151902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                            const SkPaint*) SK_OVERRIDE;
152902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1537112173c3c4cd1b1e7da8cdf971d71f01dd91299reed@google.com    virtual void drawBitmapRectToRect(const SkBitmap&, const SkRect* src,
154eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org                                      const SkRect& dst, const SkPaint* paint,
155eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org                                      DrawBitmapRectFlags flags) SK_OVERRIDE;
156902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
157902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawBitmapMatrix(const SkBitmap&, const SkMatrix&,
158902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                                  const SkPaint*) SK_OVERRIDE;
159902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
160902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center,
161902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                                const SkRect& dst, const SkPaint*) SK_OVERRIDE;
162902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
163902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawData(const void*, size_t) SK_OVERRIDE;
164902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1650a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    virtual void beginCommentGroup(const char* description) SK_OVERRIDE;
1660a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
1670a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    virtual void addComment(const char* kywd, const char* value) SK_OVERRIDE;
1680a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
1690a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    virtual void endCommentGroup() SK_OVERRIDE;
1700a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
17167baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com    virtual void drawOval(const SkRect& oval, const SkPaint&) SK_OVERRIDE;
17267baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
173902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPaint(const SkPaint& paint) SK_OVERRIDE;
174902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1757ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.com    virtual void drawPath(const SkPath& path, const SkPaint&) SK_OVERRIDE;
1767ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.com
177902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPicture(SkPicture& picture) SK_OVERRIDE;
178902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
179902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPoints(PointMode, size_t count, const SkPoint pts[],
180902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                            const SkPaint&) SK_OVERRIDE;
181902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
182902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPosText(const void* text, size_t byteLength,
183902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                             const SkPoint pos[], const SkPaint&) SK_OVERRIDE;
184902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
185902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPosTextH(const void* text, size_t byteLength,
186422188f3c6286d2991a029027958387b070e4dc6skia.committer@gmail.com                              const SkScalar xpos[], SkScalar constY,
18767baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com                              const SkPaint&) SK_OVERRIDE;
188902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1897ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.com    virtual void drawRect(const SkRect& rect, const SkPaint&) SK_OVERRIDE;
1907ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.com
19167baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com    virtual void drawRRect(const SkRRect& rrect, const SkPaint& paint) SK_OVERRIDE;
19267baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
193902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawSprite(const SkBitmap&, int left, int top,
194902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                            const SkPaint*) SK_OVERRIDE;
195902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
196902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawText(const void* text, size_t byteLength, SkScalar x,
197902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                          SkScalar y, const SkPaint&) SK_OVERRIDE;
198902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
199902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawTextOnPath(const void* text, size_t byteLength,
20067baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com                                const SkPath& path, const SkMatrix* matrix,
201902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                                const SkPaint&) SK_OVERRIDE;
202902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
203902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawVertices(VertexMode, int vertexCount,
20467baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com                              const SkPoint vertices[], const SkPoint texs[],
20567baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com                              const SkColor colors[], SkXfermode*,
20667baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com                              const uint16_t indices[], int indexCount,
207902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                              const SkPaint&) SK_OVERRIDE;
208902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
209902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void restore() SK_OVERRIDE;
210902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
211902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool rotate(SkScalar degrees) SK_OVERRIDE;
212902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
213902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual int save(SaveFlags) SK_OVERRIDE;
214902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
215902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual int saveLayer(const SkRect* bounds, const SkPaint*, SaveFlags) SK_OVERRIDE;
216902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
217902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool scale(SkScalar sx, SkScalar sy) SK_OVERRIDE;
218902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
219902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void setMatrix(const SkMatrix& matrix) SK_OVERRIDE;
220902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
221902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool skew(SkScalar sx, SkScalar sy) SK_OVERRIDE;
222902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
223902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool translate(SkScalar dx, SkScalar dy) SK_OVERRIDE;
224902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
2253b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    static const int kVizImageHeight = 256;
2263b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    static const int kVizImageWidth = 256;
2273b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com
2288f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    virtual bool isClipEmpty() const SK_OVERRIDE { return false; }
229370a89980b2d38a6d01903b484bf404d6c48b496skia.committer@gmail.com    virtual ClipType getClipType() const SK_OVERRIDE {
230370a89980b2d38a6d01903b484bf404d6c48b496skia.committer@gmail.com        return kRect_ClipType;
2318f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    }
2328f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    virtual bool getClipBounds(SkRect* bounds) const SK_OVERRIDE {
2338f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com        if (NULL != bounds) {
234370a89980b2d38a6d01903b484bf404d6c48b496skia.committer@gmail.com            bounds->setXYWH(0, 0,
235370a89980b2d38a6d01903b484bf404d6c48b496skia.committer@gmail.com                            SkIntToScalar(this->imageInfo().fWidth),
2368f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com                            SkIntToScalar(this->imageInfo().fHeight));
2378f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com        }
2388f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com        return true;
2398f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    }
2408f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    virtual bool getClipDeviceBounds(SkIRect* bounds) const SK_OVERRIDE {
2418f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com        if (NULL != bounds) {
2428f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com            bounds->setLargest();
2438f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com        }
2448f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com        return true;
2458f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    }
2468f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com
247ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.orgprotected:
248ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org    virtual void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) SK_OVERRIDE;
249210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.org    virtual void onPushCull(const SkRect& cullRect) SK_OVERRIDE;
250210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.org    virtual void onPopCull() SK_OVERRIDE;
251ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org
2528f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    virtual void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
2538f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    virtual void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
2548f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    virtual void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
2558f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    virtual void onClipRegion(const SkRegion& region, SkRegion::Op) SK_OVERRIDE;
2568f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com
2571643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org    void markActiveCommands(int index);
258768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org
259902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
26067baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com    SkTDArray<SkDrawCommand*> fCommandVector;
261b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com    int fWidth;
2621735d6696e9a941925e6ca352849307d698ef139commit-bot@chromium.org    int fHeight;
2637e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    bool fFilter;
264768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org    bool fMegaVizMode;
265830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    int fIndex;
266e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com    SkMatrix fUserMatrix;
267a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    SkMatrix fMatrix;
268a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    SkIRect fClip;
26932bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com
270f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com    bool fOverdrawViz;
271f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com    SkDrawFilter* fOverdrawFilter;
272902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
27332bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com    bool fOverrideTexFiltering;
27432bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com    SkTexOverrideFilter* fTexOverrideFilter;
27532bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com
276902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
2770699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com        Number of unmatched save() calls at any point during a draw.
2780699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com        If there are any saveLayer() calls outstanding, we need to resolve
2790699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com        all of them, which in practice means resolving all save() calls,
2800699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com        to avoid corruption of our canvas.
2810699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com    */
2820699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com    int fOutstandingSaveCount;
2830699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com
2841643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org    /**
2851643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org        The active saveLayer commands at a given point in the renderering.
2861643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org        Only used when "mega" visualization is enabled.
2871643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org    */
2881643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org    SkTDArray<SkDrawCommand*> fActiveLayers;
2891643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org
2901643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org    /**
2911643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org        The active cull commands at a given point in the rendering.
2921643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org        Only used when "mega" visualization is enabled.
2931643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org    */
2941643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org    SkTDArray<SkDrawCommand*> fActiveCulls;
2951643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org
2960699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com    /**
297902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Adds the command to the classes vector of commands.
298902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param command  The draw command for execution
299902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
300902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    void addDrawCommand(SkDrawCommand* command);
301830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com
302830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    /**
303830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com        Applies any panning and zooming the user has specified before
304830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com        drawing anything else into the canvas.
305830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com     */
306830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    void applyUserTransform(SkCanvas* canvas);
3073b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com
3083b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    typedef SkCanvas INHERITED;
309902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
310902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
311902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#endif
312