SkDebugCanvas.h revision 44c48d062f7996b5b46917e1b312a32ad101f326
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 void drawBitmap(const SkBitmap&, SkScalar left, SkScalar top,
149902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                            const SkPaint*) SK_OVERRIDE;
150902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1517112173c3c4cd1b1e7da8cdf971d71f01dd91299reed@google.com    virtual void drawBitmapRectToRect(const SkBitmap&, const SkRect* src,
152eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org                                      const SkRect& dst, const SkPaint* paint,
153eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org                                      DrawBitmapRectFlags flags) SK_OVERRIDE;
154902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
155902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawBitmapMatrix(const SkBitmap&, const SkMatrix&,
156902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                                  const SkPaint*) SK_OVERRIDE;
157902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
158902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center,
159902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                                const SkRect& dst, const SkPaint*) SK_OVERRIDE;
160902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
161902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawData(const void*, size_t) SK_OVERRIDE;
162902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1630a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    virtual void beginCommentGroup(const char* description) SK_OVERRIDE;
1640a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
1650a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    virtual void addComment(const char* kywd, const char* value) SK_OVERRIDE;
1660a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
1670a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    virtual void endCommentGroup() SK_OVERRIDE;
1680a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
16967baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com    virtual void drawOval(const SkRect& oval, const SkPaint&) SK_OVERRIDE;
17067baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
171902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPaint(const SkPaint& paint) SK_OVERRIDE;
172902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1737ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.com    virtual void drawPath(const SkPath& path, const SkPaint&) SK_OVERRIDE;
1747ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.com
175902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPicture(SkPicture& picture) SK_OVERRIDE;
176902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
177902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPoints(PointMode, size_t count, const SkPoint pts[],
178902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                            const SkPaint&) SK_OVERRIDE;
179902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
180902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPosText(const void* text, size_t byteLength,
181902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                             const SkPoint pos[], const SkPaint&) SK_OVERRIDE;
182902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
183902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPosTextH(const void* text, size_t byteLength,
184422188f3c6286d2991a029027958387b070e4dc6skia.committer@gmail.com                              const SkScalar xpos[], SkScalar constY,
18567baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com                              const SkPaint&) SK_OVERRIDE;
186902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1877ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.com    virtual void drawRect(const SkRect& rect, const SkPaint&) SK_OVERRIDE;
1887ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.com
18967baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com    virtual void drawRRect(const SkRRect& rrect, const SkPaint& paint) SK_OVERRIDE;
19067baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
191902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawSprite(const SkBitmap&, int left, int top,
192902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                            const SkPaint*) SK_OVERRIDE;
193902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
194902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawText(const void* text, size_t byteLength, SkScalar x,
195902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                          SkScalar y, const SkPaint&) SK_OVERRIDE;
196902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
197902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawTextOnPath(const void* text, size_t byteLength,
19867baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com                                const SkPath& path, const SkMatrix* matrix,
199902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                                const SkPaint&) SK_OVERRIDE;
200902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
201902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawVertices(VertexMode, int vertexCount,
20267baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com                              const SkPoint vertices[], const SkPoint texs[],
20367baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com                              const SkColor colors[], SkXfermode*,
20467baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com                              const uint16_t indices[], int indexCount,
205902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                              const SkPaint&) SK_OVERRIDE;
206902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
2073b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    static const int kVizImageHeight = 256;
2083b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    static const int kVizImageWidth = 256;
2093b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com
2108f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    virtual bool isClipEmpty() const SK_OVERRIDE { return false; }
2115c70cdca5efe541b70d010e91607bf8626ea49cacommit-bot@chromium.org    virtual bool isClipRect() const SK_OVERRIDE { return true; }
2125c70cdca5efe541b70d010e91607bf8626ea49cacommit-bot@chromium.org#ifdef SK_SUPPORT_LEGACY_GETCLIPTYPE
213370a89980b2d38a6d01903b484bf404d6c48b496skia.committer@gmail.com    virtual ClipType getClipType() const SK_OVERRIDE {
214370a89980b2d38a6d01903b484bf404d6c48b496skia.committer@gmail.com        return kRect_ClipType;
2158f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    }
2165c70cdca5efe541b70d010e91607bf8626ea49cacommit-bot@chromium.org#endif
2178f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    virtual bool getClipBounds(SkRect* bounds) const SK_OVERRIDE {
2188f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com        if (NULL != bounds) {
219370a89980b2d38a6d01903b484bf404d6c48b496skia.committer@gmail.com            bounds->setXYWH(0, 0,
220370a89980b2d38a6d01903b484bf404d6c48b496skia.committer@gmail.com                            SkIntToScalar(this->imageInfo().fWidth),
2218f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com                            SkIntToScalar(this->imageInfo().fHeight));
2228f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com        }
2238f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com        return true;
2248f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    }
2258f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    virtual bool getClipDeviceBounds(SkIRect* bounds) const SK_OVERRIDE {
2268f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com        if (NULL != bounds) {
2278f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com            bounds->setLargest();
2288f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com        }
2298f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com        return true;
2308f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    }
2318f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com
232ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.orgprotected:
233e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org    virtual void willSave(SaveFlags) SK_OVERRIDE;
234e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org    virtual SaveLayerStrategy willSaveLayer(const SkRect*, const SkPaint*, SaveFlags) SK_OVERRIDE;
235e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org    virtual void willRestore() SK_OVERRIDE;
236e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org
23744c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.org    virtual void didTranslate(SkScalar, SkScalar) SK_OVERRIDE;
23844c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.org    virtual void didScale(SkScalar, SkScalar) SK_OVERRIDE;
23944c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.org    virtual void didRotate(SkScalar) SK_OVERRIDE;
24044c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.org    virtual void didSkew(SkScalar, SkScalar) SK_OVERRIDE;
24144c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.org    virtual void didConcat(const SkMatrix&) SK_OVERRIDE;
24244c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.org    virtual void didSetMatrix(const SkMatrix&) SK_OVERRIDE;
24344c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.org
244ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org    virtual void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) SK_OVERRIDE;
245210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.org    virtual void onPushCull(const SkRect& cullRect) SK_OVERRIDE;
246210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.org    virtual void onPopCull() SK_OVERRIDE;
247ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org
2488f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    virtual void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
2498f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    virtual void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
2508f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    virtual void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
2518f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    virtual void onClipRegion(const SkRegion& region, SkRegion::Op) SK_OVERRIDE;
2528f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com
2531643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org    void markActiveCommands(int index);
254768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org
255902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
25667baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com    SkTDArray<SkDrawCommand*> fCommandVector;
257b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com    int fWidth;
2581735d6696e9a941925e6ca352849307d698ef139commit-bot@chromium.org    int fHeight;
2597e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    bool fFilter;
260768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org    bool fMegaVizMode;
261830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    int fIndex;
262e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com    SkMatrix fUserMatrix;
263a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    SkMatrix fMatrix;
264a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    SkIRect fClip;
26532bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com
266f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com    bool fOverdrawViz;
267f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com    SkDrawFilter* fOverdrawFilter;
268902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
26932bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com    bool fOverrideTexFiltering;
27032bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com    SkTexOverrideFilter* fTexOverrideFilter;
27132bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com
272902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
2730699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com        Number of unmatched save() calls at any point during a draw.
2740699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com        If there are any saveLayer() calls outstanding, we need to resolve
2750699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com        all of them, which in practice means resolving all save() calls,
2760699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com        to avoid corruption of our canvas.
2770699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com    */
2780699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com    int fOutstandingSaveCount;
2790699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com
280ade9a3485e78d471f5f0902e9e50a2ec74c88e76skia.committer@gmail.com    /**
2811643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org        The active saveLayer commands at a given point in the renderering.
2821643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org        Only used when "mega" visualization is enabled.
2831643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org    */
2841643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org    SkTDArray<SkDrawCommand*> fActiveLayers;
2851643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org
286ade9a3485e78d471f5f0902e9e50a2ec74c88e76skia.committer@gmail.com    /**
2871643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org        The active cull commands at a given point in the rendering.
2881643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org        Only used when "mega" visualization is enabled.
2891643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org    */
2901643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org    SkTDArray<SkDrawCommand*> fActiveCulls;
2911643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org
2920699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com    /**
293902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Adds the command to the classes vector of commands.
294902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param command  The draw command for execution
295902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
296902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    void addDrawCommand(SkDrawCommand* command);
297830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com
298830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    /**
299830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com        Applies any panning and zooming the user has specified before
300830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com        drawing anything else into the canvas.
301830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com     */
302830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    void applyUserTransform(SkCanvas* canvas);
3033b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com
3043b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    typedef SkCanvas INHERITED;
305902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
306902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
307902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#endif
308