SkDebugCanvas.h revision 80a4a60f96c33ccd850f9b0eb4b69ab08c198196
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"
16e606d6e210b17dd9dd582d4d3ec70acb4f3213d5chudy@google.com#include "SkHitBox.h"
17902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#include <vector>
18902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
19902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comclass SkDebugCanvas : public SkCanvas {
20902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
2180a4a60f96c33ccd850f9b0eb4b69ab08c198196chudy@google.com    SkDebugCanvas(int width, int height);
22902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    ~SkDebugCanvas();
23902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
24902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    void toggleFilter(bool toggle);
25902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
26902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
27902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Executes all draw calls to the canvas.
28902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param canvas  The canvas being drawn to
29902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
30902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    void draw(SkCanvas* canvas);
31902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
32902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
33902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Executes the draw calls in the specified range.
34902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param canvas  The canvas being drawn to
35902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param i  The beginning of the range
36902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param j  The end of the range
37902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        TODO(chudy): Implement
38902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
39902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    void drawRange(SkCanvas* canvas, int i, int j);
40902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
41902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
42902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Executes the draw calls up to the specified index.
43902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param canvas  The canvas being drawn to
44902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param index  The index of the final command being executed
45902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
46e606d6e210b17dd9dd582d4d3ec70acb4f3213d5chudy@google.com    void drawTo(SkCanvas* canvas, int index, SkBitmap* bitmap);
47902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
48902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
49902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Returns the draw command at the given index.
50902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param index  The index of the command
51902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
52902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkDrawCommand* getDrawCommandAt(int index);
53902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
54902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
55902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Returns information about the command at the given index.
56902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param index  The index of the command
57902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
58902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    std::vector<std::string>* getCommandInfoAt(int index);
59902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
60902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
617e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        Returns the visibility of the command at the given index.
627e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        @param index  The index of the command
637e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com     */
647e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    bool getDrawCommandVisibilityAt(int index);
657e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com
667e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    /**
67902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Returns the vector of draw commands
68902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
69902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    std::vector<SkDrawCommand*> getDrawCommands();
70902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
71902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
72902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     * Returns the string vector of draw commands
73902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
74902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    std::vector<std::string>* getDrawCommandsAsStrings();
75902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
76902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
77e606d6e210b17dd9dd582d4d3ec70acb4f3213d5chudy@google.com        Returns the mapping of all pixels to a layer value.
78e606d6e210b17dd9dd582d4d3ec70acb4f3213d5chudy@google.com     */
79e606d6e210b17dd9dd582d4d3ec70acb4f3213d5chudy@google.com    int* getHitBox() {
80e606d6e210b17dd9dd582d4d3ec70acb4f3213d5chudy@google.com        return fHitBox.getHitBox();
81e606d6e210b17dd9dd582d4d3ec70acb4f3213d5chudy@google.com    }
82e606d6e210b17dd9dd582d4d3ec70acb4f3213d5chudy@google.com
83e606d6e210b17dd9dd582d4d3ec70acb4f3213d5chudy@google.com    SkHitBox* getBoxClass() {
84e606d6e210b17dd9dd582d4d3ec70acb4f3213d5chudy@google.com        return &fHitBox;
85e606d6e210b17dd9dd582d4d3ec70acb4f3213d5chudy@google.com    }
86e606d6e210b17dd9dd582d4d3ec70acb4f3213d5chudy@google.com
87e606d6e210b17dd9dd582d4d3ec70acb4f3213d5chudy@google.com    int getHitBoxPoint() {
88e606d6e210b17dd9dd582d4d3ec70acb4f3213d5chudy@google.com        return fHitBox.getPoint();
89e606d6e210b17dd9dd582d4d3ec70acb4f3213d5chudy@google.com    }
90e606d6e210b17dd9dd582d4d3ec70acb4f3213d5chudy@google.com
91e606d6e210b17dd9dd582d4d3ec70acb4f3213d5chudy@google.com    /**
92f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com        Returns length of draw command vector.
93f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com     */
94f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com    int getSize() {
95f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com        return commandVector.size();
96f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com    }
97f14143226acf209615c4dd841aa6632aff112ab3chudy@google.com
98e606d6e210b17dd9dd582d4d3ec70acb4f3213d5chudy@google.com    void isCalculatingHits(bool isEnabled) {
99e606d6e210b17dd9dd582d4d3ec70acb4f3213d5chudy@google.com        fCalculateHits = isEnabled;
100e606d6e210b17dd9dd582d4d3ec70acb4f3213d5chudy@google.com    }
101902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
102902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
103902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Toggles the visibility / execution of the draw command at index i with
104902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        the value of toggle.
105902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
106902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    void toggleCommand(int index, bool toggle);
107902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
108b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com    void setBounds(int width, int height) {
109b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com        fWidth = width;
110b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com        fHeight = height;
111b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com    }
112b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com
113902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com////////////////////////////////////////////////////////////////////////////////
114902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com// Inherited from SkCanvas
115902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com////////////////////////////////////////////////////////////////////////////////
116902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
117902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void clear(SkColor) SK_OVERRIDE;
118902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
119902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool clipPath(const SkPath&, SkRegion::Op, bool) SK_OVERRIDE;
120902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
121902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool clipRect(const SkRect&, SkRegion::Op, bool) SK_OVERRIDE;
122902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
123902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool clipRegion(const SkRegion& region, SkRegion::Op op) SK_OVERRIDE;
124902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
125902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool concat(const SkMatrix& matrix) SK_OVERRIDE;
126902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
127902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawBitmap(const SkBitmap&, SkScalar left, SkScalar top,
128902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                            const SkPaint*) SK_OVERRIDE;
129902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
130902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawBitmapRect(const SkBitmap&, const SkIRect* src,
131902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                                const SkRect& dst, const SkPaint*) SK_OVERRIDE;
132902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
133902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawBitmapMatrix(const SkBitmap&, const SkMatrix&,
134902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                                  const SkPaint*) SK_OVERRIDE;
135902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
136902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center,
137902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                                const SkRect& dst, const SkPaint*) SK_OVERRIDE;
138902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
139902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawData(const void*, size_t) SK_OVERRIDE;
140902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
141902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPaint(const SkPaint& paint) SK_OVERRIDE;
142902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
143902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPath(const SkPath& path, const SkPaint&) SK_OVERRIDE;
144902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
145902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPicture(SkPicture& picture) SK_OVERRIDE;
146902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
147902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPoints(PointMode, size_t count, const SkPoint pts[],
148902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                            const SkPaint&) SK_OVERRIDE;
149902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
150902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPosText(const void* text, size_t byteLength,
151902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                             const SkPoint pos[], const SkPaint&) SK_OVERRIDE;
152902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
153902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawPosTextH(const void* text, size_t byteLength,
154902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                      const SkScalar xpos[], SkScalar constY, const SkPaint&) SK_OVERRIDE;
155902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
156902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawRect(const SkRect& rect, const SkPaint&) SK_OVERRIDE;
157902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
158902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawSprite(const SkBitmap&, int left, int top,
159902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                            const SkPaint*) SK_OVERRIDE;
160902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
161902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawText(const void* text, size_t byteLength, SkScalar x,
162902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                          SkScalar y, const SkPaint&) SK_OVERRIDE;
163902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
164902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawTextOnPath(const void* text, size_t byteLength,
165902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                            const SkPath& path, const SkMatrix* matrix,
166902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                                const SkPaint&) SK_OVERRIDE;
167902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
168902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void drawVertices(VertexMode, int vertexCount,
169902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                          const SkPoint vertices[], const SkPoint texs[],
170902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                          const SkColor colors[], SkXfermode*,
171902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                          const uint16_t indices[], int indexCount,
172902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com                              const SkPaint&) SK_OVERRIDE;
173902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
174902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void restore() SK_OVERRIDE;
175902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
176902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool rotate(SkScalar degrees) SK_OVERRIDE;
177902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
178902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual int save(SaveFlags) SK_OVERRIDE;
179902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
180902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual int saveLayer(const SkRect* bounds, const SkPaint*, SaveFlags) SK_OVERRIDE;
181902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
182902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool scale(SkScalar sx, SkScalar sy) SK_OVERRIDE;
183902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
184902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual void setMatrix(const SkMatrix& matrix) SK_OVERRIDE;
185902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
186902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool skew(SkScalar sx, SkScalar sy) SK_OVERRIDE;
187902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
188902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual bool translate(SkScalar dx, SkScalar dy) SK_OVERRIDE;
189902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
190902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
191902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    typedef SkCanvas INHERITED;
192902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    std::vector<SkDrawCommand*> commandVector;
193902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    std::vector<SkDrawCommand*>::const_iterator it;
194b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com    int fHeight;
195b9ddd4e9f184f4a4545eca69c55ec1ad1ce59170chudy@google.com    int fWidth;
196902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkBitmap fBm;
197e606d6e210b17dd9dd582d4d3ec70acb4f3213d5chudy@google.com    SkHitBox fHitBox;
198e606d6e210b17dd9dd582d4d3ec70acb4f3213d5chudy@google.com    bool fCalculateHits;
1997e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    bool fFilter;
200902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
201902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    /**
202902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        Adds the command to the classes vector of commands.
203902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        @param command  The draw command for execution
204902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com     */
205902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    void addDrawCommand(SkDrawCommand* command);
206902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
207902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
208902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#endif
209