SkDebugCanvas.h revision 0b5bbb0f82e022c8acfbcb6312f0ed18e1ab90ce
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"
16902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#include <vector>
17902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
18902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comclass SkDebugCanvas : public SkCanvas {
19902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
2080a4a60f96c33ccd850f9b0eb4b69ab08c198196chudy@google.com    SkDebugCanvas(int width, int height);
21902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    ~SkDebugCanvas();
22902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
23902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    void toggleFilter(bool toggle);
24902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
25902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
26902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Executes all draw calls to the canvas.
27902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param canvas  The canvas being drawn to
28902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
29902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    void draw(SkCanvas* canvas);
30902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
31902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
32902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Executes the draw calls in the specified range.
33902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param canvas  The canvas being drawn to
34902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param i  The beginning of the range
35902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param j  The end of the range
36902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        TODO(chudy): Implement
37902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
38902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    void drawRange(SkCanvas* canvas, int i, int j);
39902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
40902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
41902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Executes the draw calls up to the specified index.
42902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param canvas  The canvas being drawn to
43902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param index  The index of the final command being executed
44902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
450b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com    void drawTo(SkCanvas* canvas, int index);
460b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com
470b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com    /**
480b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com        Returns the index of the last draw command to write to the pixel at (x,y)
490b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com     */
500b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com    int getCommandAtPoint(int x, int y, int index,
510b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com            SkIPoint transform, float scale);
52902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
53902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
54902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Returns the draw command at the given index.
55902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param index  The index of the command
56902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
57902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkDrawCommand* getDrawCommandAt(int index);
58902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
59902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
60902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Returns information about the command at the given index.
61902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param index  The index of the command
62902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
63902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    std::vector<std::string>* getCommandInfoAt(int index);
64902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
65902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
667e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        Returns the visibility of the command at the given index.
677e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        @param index  The index of the command
687e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com     */
697e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    bool getDrawCommandVisibilityAt(int index);
707e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com
717e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    /**
72902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Returns the vector of draw commands
73902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
74902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    std::vector<SkDrawCommand*> getDrawCommands();
75902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
76902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
77902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     * Returns the string vector of draw commands
78902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
79902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    std::vector<std::string>* getDrawCommandsAsStrings();
80902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
81902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
82f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com        Returns length of draw command vector.
83f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com     */
84f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com    int getSize() {
85f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com        return commandVector.size();
86f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com    }
87f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com
88902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
89902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Toggles the visibility / execution of the draw command at index i with
90902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        the value of toggle.
91902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
92902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    void toggleCommand(int index, bool toggle);
93902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
94b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com    void setBounds(int width, int height) {
95b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com        fWidth = width;
96b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com        fHeight = height;
97b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com    }
98b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com
99902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com////////////////////////////////////////////////////////////////////////////////
100902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com// Inherited from SkCanvas
101902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com////////////////////////////////////////////////////////////////////////////////
102902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
103902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void clear(SkColor) SK_OVERRIDE;
104902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
105902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool clipPath(const SkPath&, SkRegion::Op, bool) SK_OVERRIDE;
106902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
107902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool clipRect(const SkRect&, SkRegion::Op, bool) SK_OVERRIDE;
108902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
109902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool clipRegion(const SkRegion& region, SkRegion::Op op) SK_OVERRIDE;
110902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
111902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool concat(const SkMatrix& matrix) SK_OVERRIDE;
112902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
113902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawBitmap(const SkBitmap&, SkScalar left, SkScalar top,
114902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                            const SkPaint*) SK_OVERRIDE;
115902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
116902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawBitmapRect(const SkBitmap&, const SkIRect* src,
117902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                                const SkRect& dst, const SkPaint*) SK_OVERRIDE;
118902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
119902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawBitmapMatrix(const SkBitmap&, const SkMatrix&,
120902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                                  const SkPaint*) SK_OVERRIDE;
121902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
122902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center,
123902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                                const SkRect& dst, const SkPaint*) SK_OVERRIDE;
124902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
125902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawData(const void*, size_t) SK_OVERRIDE;
126902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
127902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPaint(const SkPaint& paint) SK_OVERRIDE;
128902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
129902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPath(const SkPath& path, const SkPaint&) SK_OVERRIDE;
130902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
131902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPicture(SkPicture& picture) SK_OVERRIDE;
132902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
133902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPoints(PointMode, size_t count, const SkPoint pts[],
134902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                            const SkPaint&) SK_OVERRIDE;
135902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
136902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPosText(const void* text, size_t byteLength,
137902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                             const SkPoint pos[], const SkPaint&) SK_OVERRIDE;
138902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
139902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPosTextH(const void* text, size_t byteLength,
140902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                      const SkScalar xpos[], SkScalar constY, const SkPaint&) SK_OVERRIDE;
141902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
142902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawRect(const SkRect& rect, const SkPaint&) SK_OVERRIDE;
143902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
144902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawSprite(const SkBitmap&, int left, int top,
145902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                            const SkPaint*) SK_OVERRIDE;
146902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
147902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawText(const void* text, size_t byteLength, SkScalar x,
148902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                          SkScalar y, const SkPaint&) SK_OVERRIDE;
149902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
150902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawTextOnPath(const void* text, size_t byteLength,
151902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                            const SkPath& path, const SkMatrix* matrix,
152902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                                const SkPaint&) SK_OVERRIDE;
153902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
154902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawVertices(VertexMode, int vertexCount,
155902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                          const SkPoint vertices[], const SkPoint texs[],
156902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                          const SkColor colors[], SkXfermode*,
157902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                          const uint16_t indices[], int indexCount,
158902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                              const SkPaint&) SK_OVERRIDE;
159902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
160902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void restore() SK_OVERRIDE;
161902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
162902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool rotate(SkScalar degrees) SK_OVERRIDE;
163902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
164902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual int save(SaveFlags) SK_OVERRIDE;
165902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
166902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual int saveLayer(const SkRect* bounds, const SkPaint*, SaveFlags) SK_OVERRIDE;
167902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
168902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool scale(SkScalar sx, SkScalar sy) SK_OVERRIDE;
169902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
170902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void setMatrix(const SkMatrix& matrix) SK_OVERRIDE;
171902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
172902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool skew(SkScalar sx, SkScalar sy) SK_OVERRIDE;
173902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
174902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool translate(SkScalar dx, SkScalar dy) SK_OVERRIDE;
175902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
176902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
177902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    typedef SkCanvas INHERITED;
178902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    std::vector<SkDrawCommand*> commandVector;
179902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    std::vector<SkDrawCommand*>::const_iterator it;
180b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com    int fHeight;
181b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com    int fWidth;
182902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkBitmap fBm;
1837e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    bool fFilter;
184902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
185902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
186902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Adds the command to the classes vector of commands.
187902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param command  The draw command for execution
188902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
189902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    void addDrawCommand(SkDrawCommand* command);
190902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
191902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
192902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#endif
193