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"
152a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org#include "SkPathOps.h"
16902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#include "SkPicture.h"
178a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com#include "SkTArray.h"
1897cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com#include "SkString.h"
19902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
2032bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.comclass SkTexOverrideFilter;
2132bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com
2286681b37bd20204e47a492119b345c01d00bc939fmalita@google.comclass SK_API SkDebugCanvas : public SkCanvas {
23902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
2480a4a60f96c33ccd850f9b0eb4b69ab08c198196chudy@google.com    SkDebugCanvas(int width, int height);
25f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com    virtual ~SkDebugCanvas();
26902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
27768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org    void toggleFilter(bool toggle) { fFilter = toggle; }
28768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org
29768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org    void setMegaVizMode(bool megaVizMode) { fMegaVizMode = megaVizMode; }
3057f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    bool getMegaVizMode() const { return fMegaVizMode; }
31902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
32902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
33f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com     * Enable or disable overdraw visualization
34f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com     */
35f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com    void setOverdrawViz(bool overdrawViz) { fOverdrawViz = overdrawViz; }
3657f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    bool getOverdrawViz() const { return fOverdrawViz; }
3757f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org
3857f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    void setOutstandingSaveCount(int saveCount) { fOutstandingSaveCount = saveCount; }
3957f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    int getOutstandingSaveCount() const { return fOutstandingSaveCount; }
4057f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org
412a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org    bool getAllowSimplifyClip() const { return fAllowSimplifyClip; }
422a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org
4357f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    void setPicture(SkPicture* picture) { fPicture = picture; }
44f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com
45f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com    /**
4632bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com     * Enable or disable texure filtering override
4732bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com     */
48f84ad8f7fc0194389a8099da2c5e8fff9f092890skia.committer@gmail.com    void overrideTexFiltering(bool overrideTexFiltering, SkPaint::FilterLevel level);
4932bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com
5032bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com    /**
51902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Executes all draw calls to the canvas.
52902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param canvas  The canvas being drawn to
53902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
54902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    void draw(SkCanvas* canvas);
55902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
56902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
57902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Executes the draw calls up to the specified index.
58902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param canvas  The canvas being drawn to
59902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param index  The index of the final command being executed
60902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
610b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com    void drawTo(SkCanvas* canvas, int index);
620b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com
630b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com    /**
64a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com        Returns the most recently calculated transformation matrix
65a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com     */
66a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    const SkMatrix& getCurrentMatrix() {
67a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com        return fMatrix;
68a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    }
69a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com
70a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    /**
71a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com        Returns the most recently calculated clip
72a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com     */
73a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    const SkIRect& getCurrentClip() {
74a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com        return fClip;
75a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    }
76a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com
77a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    /**
780b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com        Returns the index of the last draw command to write to the pixel at (x,y)
790b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com     */
80830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    int getCommandAtPoint(int x, int y, int index);
81902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
82902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
8350c84da68b17647371a81593402e897d639989e4robertphillips@google.com        Removes the command at the specified index
8450c84da68b17647371a81593402e897d639989e4robertphillips@google.com        @param index  The index of the command to delete
8550c84da68b17647371a81593402e897d639989e4robertphillips@google.com     */
8650c84da68b17647371a81593402e897d639989e4robertphillips@google.com    void deleteDrawCommandAt(int index);
8750c84da68b17647371a81593402e897d639989e4robertphillips@google.com
8850c84da68b17647371a81593402e897d639989e4robertphillips@google.com    /**
89902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Returns the draw command at the given index.
90902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param index  The index of the command
91902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
92902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkDrawCommand* getDrawCommandAt(int index);
93902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
94902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
9550c84da68b17647371a81593402e897d639989e4robertphillips@google.com        Sets the draw command for a given index.
9650c84da68b17647371a81593402e897d639989e4robertphillips@google.com        @param index  The index to overwrite
9750c84da68b17647371a81593402e897d639989e4robertphillips@google.com        @param command The new command
9850c84da68b17647371a81593402e897d639989e4robertphillips@google.com     */
9950c84da68b17647371a81593402e897d639989e4robertphillips@google.com    void setDrawCommandAt(int index, SkDrawCommand* command);
10050c84da68b17647371a81593402e897d639989e4robertphillips@google.com
10150c84da68b17647371a81593402e897d639989e4robertphillips@google.com    /**
102902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Returns information about the command at the given index.
103902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param index  The index of the command
104902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
10597cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com    SkTDArray<SkString*>* getCommandInfo(int index);
106902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
107902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
1087e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        Returns the visibility of the command at the given index.
1097e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        @param index  The index of the command
1107e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com     */
1117e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    bool getDrawCommandVisibilityAt(int index);
1127e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com
1137e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    /**
114902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Returns the vector of draw commands
115902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
1164469938e92d779dff05e745559e67907bbf21e78reed@google.com    SK_ATTR_DEPRECATED("please use getDrawCommandAt and getSize instead")
1178a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com    const SkTDArray<SkDrawCommand*>& getDrawCommands() const;
1182e71f1619d9a2c51c1292e618f42a56ad2da1de8skia.committer@gmail.com
119febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com    /**
120febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com        Returns the vector of draw commands. Do not use this entry
121febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com        point - it is going away!
122febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com     */
123febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com    SkTDArray<SkDrawCommand*>& getDrawCommands();
124902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
125902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
126902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     * Returns the string vector of draw commands
127902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
1288a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com    SkTArray<SkString>* getDrawCommandsAsStrings() const;
129902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
130902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
13157f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org     * Returns an array containing an offset (in the SkPicture) for each command
13257f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org     */
13357f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    SkTDArray<size_t>* getDrawCommandOffsets() const;
13457f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org
13557f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    /**
136f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com        Returns length of draw command vector.
137f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com     */
1380d4fe14a41bd04535310f8b2edee9e30191fdd79commit-bot@chromium.org    int getSize() const {
13967baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com        return fCommandVector.count();
140f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com    }
141f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com
142902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
143902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Toggles the visibility / execution of the draw command at index i with
144902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        the value of toggle.
145902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
146902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    void toggleCommand(int index, bool toggle);
147902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
148b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com    void setBounds(int width, int height) {
149b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com        fWidth = width;
150b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com        fHeight = height;
151b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com    }
152b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com
153e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com    void setUserMatrix(SkMatrix matrix) {
154e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com        fUserMatrix = matrix;
155830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    }
156830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com
1572a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org    SkString clipStackData() const { return fClipStackData; }
1582a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org
159902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com////////////////////////////////////////////////////////////////////////////////
160902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com// Inherited from SkCanvas
161902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com////////////////////////////////////////////////////////////////////////////////
162902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
163902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void clear(SkColor) SK_OVERRIDE;
164902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
165902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawBitmap(const SkBitmap&, SkScalar left, SkScalar top,
166902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                            const SkPaint*) SK_OVERRIDE;
167902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1687112173c3c4cd1b1e7da8cdf971d71f01dd91299reed@google.com    virtual void drawBitmapRectToRect(const SkBitmap&, const SkRect* src,
169eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org                                      const SkRect& dst, const SkPaint* paint,
170eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org                                      DrawBitmapRectFlags flags) SK_OVERRIDE;
171902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
172902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawBitmapMatrix(const SkBitmap&, const SkMatrix&,
173902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                                  const SkPaint*) SK_OVERRIDE;
174902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
175902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center,
176902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                                const SkRect& dst, const SkPaint*) SK_OVERRIDE;
177902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
178902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawData(const void*, size_t) SK_OVERRIDE;
179902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1800a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    virtual void beginCommentGroup(const char* description) SK_OVERRIDE;
1810a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
1820a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    virtual void addComment(const char* kywd, const char* value) SK_OVERRIDE;
1830a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
1840a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    virtual void endCommentGroup() SK_OVERRIDE;
1850a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
18667baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com    virtual void drawOval(const SkRect& oval, const SkPaint&) SK_OVERRIDE;
18767baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
188902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPaint(const SkPaint& paint) SK_OVERRIDE;
189902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1907ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.com    virtual void drawPath(const SkPath& path, const SkPaint&) SK_OVERRIDE;
1917ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.com
192902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPoints(PointMode, size_t count, const SkPoint pts[],
193902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                            const SkPaint&) SK_OVERRIDE;
194902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1957ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.com    virtual void drawRect(const SkRect& rect, const SkPaint&) SK_OVERRIDE;
1967ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.com
19767baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com    virtual void drawRRect(const SkRRect& rrect, const SkPaint& paint) SK_OVERRIDE;
19867baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
199902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawSprite(const SkBitmap&, int left, int top,
200902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                            const SkPaint*) SK_OVERRIDE;
201902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
202902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawVertices(VertexMode, int vertexCount,
20367baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com                              const SkPoint vertices[], const SkPoint texs[],
20467baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com                              const SkColor colors[], SkXfermode*,
20567baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com                              const uint16_t indices[], int indexCount,
206902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                              const SkPaint&) SK_OVERRIDE;
207902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
2083b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    static const int kVizImageHeight = 256;
2093b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    static const int kVizImageWidth = 256;
2103b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com
2118f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    virtual bool isClipEmpty() const SK_OVERRIDE { return false; }
2125c70cdca5efe541b70d010e91607bf8626ea49cacommit-bot@chromium.org    virtual bool isClipRect() const SK_OVERRIDE { return true; }
2135c70cdca5efe541b70d010e91607bf8626ea49cacommit-bot@chromium.org#ifdef SK_SUPPORT_LEGACY_GETCLIPTYPE
214370a89980b2d38a6d01903b484bf404d6c48b496skia.committer@gmail.com    virtual ClipType getClipType() const SK_OVERRIDE {
215370a89980b2d38a6d01903b484bf404d6c48b496skia.committer@gmail.com        return kRect_ClipType;
2168f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    }
2175c70cdca5efe541b70d010e91607bf8626ea49cacommit-bot@chromium.org#endif
2188f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    virtual bool getClipBounds(SkRect* bounds) const SK_OVERRIDE {
2198f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com        if (NULL != bounds) {
220370a89980b2d38a6d01903b484bf404d6c48b496skia.committer@gmail.com            bounds->setXYWH(0, 0,
221370a89980b2d38a6d01903b484bf404d6c48b496skia.committer@gmail.com                            SkIntToScalar(this->imageInfo().fWidth),
2228f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com                            SkIntToScalar(this->imageInfo().fHeight));
2238f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com        }
2248f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com        return true;
2258f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    }
2268f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    virtual bool getClipDeviceBounds(SkIRect* bounds) const SK_OVERRIDE {
2278f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com        if (NULL != bounds) {
2288f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com            bounds->setLargest();
2298f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com        }
2308f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com        return true;
2318f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    }
2328f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com
233ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.orgprotected:
234e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org    virtual void willSave(SaveFlags) SK_OVERRIDE;
235e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org    virtual SaveLayerStrategy willSaveLayer(const SkRect*, const SkPaint*, SaveFlags) SK_OVERRIDE;
236e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org    virtual void willRestore() SK_OVERRIDE;
237e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org
23844c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.org    virtual void didConcat(const SkMatrix&) SK_OVERRIDE;
23944c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.org    virtual void didSetMatrix(const SkMatrix&) SK_OVERRIDE;
24044c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.org
241ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org    virtual void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) SK_OVERRIDE;
242e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com    virtual void onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y,
243e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com                            const SkPaint&) SK_OVERRIDE;
244e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com    virtual void onDrawPosText(const void* text, size_t byteLength, const SkPoint pos[],
245e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com                               const SkPaint&) SK_OVERRIDE;
246e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com    virtual void onDrawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[],
247e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com                                SkScalar constY, const SkPaint&) SK_OVERRIDE;
248e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com    virtual void onDrawTextOnPath(const void* text, size_t byteLength, const SkPath& path,
249e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com                                  const SkMatrix* matrix, const SkPaint&) SK_OVERRIDE;
250210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.org    virtual void onPushCull(const SkRect& cullRect) SK_OVERRIDE;
251210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.org    virtual void onPopCull() SK_OVERRIDE;
252ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org
2538f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    virtual void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
2548f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    virtual void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
2558f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    virtual void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE;
2568f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    virtual void onClipRegion(const SkRegion& region, SkRegion::Op) SK_OVERRIDE;
2578f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com
2589b14f26d0f3a974f3dd626c8354e1db1cfcd322frobertphillips    virtual void onDrawPicture(const SkPicture* picture) SK_OVERRIDE;
2599b14f26d0f3a974f3dd626c8354e1db1cfcd322frobertphillips
2601643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org    void markActiveCommands(int index);
261768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org
262902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
26367baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com    SkTDArray<SkDrawCommand*> fCommandVector;
26457f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    SkPicture* fPicture;
265b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com    int fWidth;
2661735d6696e9a941925e6ca352849307d698ef139commit-bot@chromium.org    int fHeight;
2677e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    bool fFilter;
268768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org    bool fMegaVizMode;
269830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    int fIndex;
270e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com    SkMatrix fUserMatrix;
271a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    SkMatrix fMatrix;
272a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com    SkIRect fClip;
27332bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com
2742a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org    SkString fClipStackData;
2752a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org    bool fCalledAddStackData;
2762a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org    SkPath fSaveDevPath;
2772a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org
278f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com    bool fOverdrawViz;
279f4741c1322944e194ca34a8f5cf8188fe2c0efe2robertphillips@google.com    SkDrawFilter* fOverdrawFilter;
280902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
28132bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com    bool fOverrideTexFiltering;
28232bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com    SkTexOverrideFilter* fTexOverrideFilter;
28332bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com
284902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
2850699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com        Number of unmatched save() calls at any point during a draw.
2860699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com        If there are any saveLayer() calls outstanding, we need to resolve
2870699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com        all of them, which in practice means resolving all save() calls,
2880699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com        to avoid corruption of our canvas.
2890699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com    */
2900699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com    int fOutstandingSaveCount;
2910699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com
292ade9a3485e78d471f5f0902e9e50a2ec74c88e76skia.committer@gmail.com    /**
2931643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org        The active saveLayer commands at a given point in the renderering.
2941643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org        Only used when "mega" visualization is enabled.
2951643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org    */
2961643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org    SkTDArray<SkDrawCommand*> fActiveLayers;
2971643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org
298ade9a3485e78d471f5f0902e9e50a2ec74c88e76skia.committer@gmail.com    /**
2991643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org        The active cull commands at a given point in the rendering.
3001643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org        Only used when "mega" visualization is enabled.
3011643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org    */
3021643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org    SkTDArray<SkDrawCommand*> fActiveCulls;
3031643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org
3040699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com    /**
305902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Adds the command to the classes vector of commands.
306902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param command  The draw command for execution
307902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
308902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    void addDrawCommand(SkDrawCommand* command);
309830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com
310830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    /**
311830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com        Applies any panning and zooming the user has specified before
312830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com        drawing anything else into the canvas.
313830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com     */
314830b8793bb1646bb76817bdc228dd8e2a92bef7dchudy@google.com    void applyUserTransform(SkCanvas* canvas);
3153b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com
31657f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    size_t getOpID() const {
31757f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org        if (NULL != fPicture) {
31857f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org            return fPicture->EXPERIMENTAL_curOpID();
31957f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org        }
32057f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org        return 0;
32157f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    }
32257f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org
3232a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org    void resetClipStackData() { fClipStackData.reset(); fCalledAddStackData = false; }
3242a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org
3252a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org    void addClipStackData(const SkPath& devPath, const SkPath& operand, SkRegion::Op elementOp);
3262a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org    void addPathData(const SkPath& path, const char* pathName);
3272a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org    bool lastClipStackData(const SkPath& devPath);
3282a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org    void outputConicPoints(const SkPoint* pts, SkScalar weight);
3292a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org    void outputPoints(const SkPoint* pts, int count);
3302a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org    void outputPointsCommon(const SkPoint* pts, int count);
3312a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org    void outputScalar(SkScalar num);
3323b9e8be760ad0e576d5145e0aecf0dc73efcd640skia.committer@gmail.com
3333b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    typedef SkCanvas INHERITED;
334902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
335902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
336902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#endif
337