SkDebugCanvas.h revision 902ebe5eb41a350b766238b3b103c22fe9fc0fb5
1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
2f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)/*
3f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) * Copyright 2012 Google Inc.
4f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) *
5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be
6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) * found in the LICENSE file.
7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) */
8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#ifndef SKDEBUGCANVAS_H_
11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define SKDEBUGCANVAS_H_
12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include <iostream>
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "SkCanvas.h"
15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "SkDrawCommand.h"
16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "SkPicture.h"
17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include <vector>
18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class SkDebugCanvas : public SkCanvas {
20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)public:
21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    bool fFilter;
22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
23f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    SkDebugCanvas();
24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    ~SkDebugCanvas();
25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    void toggleFilter(bool toggle);
27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    /**
29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        Executes all draw calls to the canvas.
30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        @param canvas  The canvas being drawn to
31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)     */
32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    void draw(SkCanvas* canvas);
33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    /**
35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        Executes the draw calls in the specified range.
36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        @param canvas  The canvas being drawn to
37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        @param i  The beginning of the range
38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        @param j  The end of the range
39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        TODO(chudy): Implement
40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)     */
41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    void drawRange(SkCanvas* canvas, int i, int j);
42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    /**
44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        Executes the draw calls up to the specified index.
45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        @param canvas  The canvas being drawn to
4603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        @param index  The index of the final command being executed
4703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)     */
48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    void drawTo(SkCanvas* canvas, int index);
49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    /**
51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        Returns the draw command at the given index.
52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        @param index  The index of the command
53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)     */
54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    SkDrawCommand* getDrawCommandAt(int index);
55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    /**
57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        Returns information about the command at the given index.
58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        @param index  The index of the command
5903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)     */
6003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    std::vector<std::string>* getCommandInfoAt(int index);
61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
62f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    /**
63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        Returns the vector of draw commands
64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)     */
65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::vector<SkDrawCommand*> getDrawCommands();
66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    /**
68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)     * Returns the string vector of draw commands
69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)     */
70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::vector<std::string>* getDrawCommandsAsStrings();
71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
72f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    /**
73f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        Toggles the execution of the draw command at index i.
745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     */
755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    void toggleCommand(int index);
765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    /**
785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        Toggles the visibility / execution of the draw command at index i with
795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        the value of toggle.
805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)     */
815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    void toggleCommand(int index, bool toggle);
825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)////////////////////////////////////////////////////////////////////////////////
845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Inherited from SkCanvas
85f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)////////////////////////////////////////////////////////////////////////////////
86f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
87f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    virtual void clear(SkColor) SK_OVERRIDE;
88f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
89f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    virtual bool clipPath(const SkPath&, SkRegion::Op, bool) SK_OVERRIDE;
90f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
91f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    virtual bool clipRect(const SkRect&, SkRegion::Op, bool) SK_OVERRIDE;
92f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
93f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    virtual bool clipRegion(const SkRegion& region, SkRegion::Op op) SK_OVERRIDE;
94f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
95f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    virtual bool concat(const SkMatrix& matrix) SK_OVERRIDE;
96f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
97f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    virtual void drawBitmap(const SkBitmap&, SkScalar left, SkScalar top,
98f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                            const SkPaint*) SK_OVERRIDE;
99f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
100f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    virtual void drawBitmapRect(const SkBitmap&, const SkIRect* src,
101f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                const SkRect& dst, const SkPaint*) SK_OVERRIDE;
102f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
103f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    virtual void drawBitmapMatrix(const SkBitmap&, const SkMatrix&,
104f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                  const SkPaint*) SK_OVERRIDE;
105f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
106f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    virtual void drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center,
107f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                const SkRect& dst, const SkPaint*) SK_OVERRIDE;
108f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
109f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    virtual void drawData(const void*, size_t) SK_OVERRIDE;
110f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
111f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    virtual void drawPaint(const SkPaint& paint) SK_OVERRIDE;
112f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
113f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    virtual void drawPath(const SkPath& path, const SkPaint&) SK_OVERRIDE;
114f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
115f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    virtual void drawPicture(SkPicture& picture) SK_OVERRIDE;
116f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
117f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    virtual void drawPoints(PointMode, size_t count, const SkPoint pts[],
118f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                            const SkPaint&) SK_OVERRIDE;
119f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
120f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    virtual void drawPosText(const void* text, size_t byteLength,
121f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                             const SkPoint pos[], const SkPaint&) SK_OVERRIDE;
122f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
123f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    virtual void drawPosTextH(const void* text, size_t byteLength,
124f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                      const SkScalar xpos[], SkScalar constY, const SkPaint&) SK_OVERRIDE;
125f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
126f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    virtual void drawRect(const SkRect& rect, const SkPaint&) SK_OVERRIDE;
127f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
128f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    virtual void drawSprite(const SkBitmap&, int left, int top,
129f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                            const SkPaint*) SK_OVERRIDE;
130f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
131f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    virtual void drawText(const void* text, size_t byteLength, SkScalar x,
132f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                          SkScalar y, const SkPaint&) SK_OVERRIDE;
133f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
134f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    virtual void drawTextOnPath(const void* text, size_t byteLength,
135f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                            const SkPath& path, const SkMatrix* matrix,
136f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                const SkPaint&) SK_OVERRIDE;
137f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
138f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    virtual void drawVertices(VertexMode, int vertexCount,
139f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                          const SkPoint vertices[], const SkPoint texs[],
140f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                          const SkColor colors[], SkXfermode*,
1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                          const uint16_t indices[], int indexCount,
1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                              const SkPaint&) SK_OVERRIDE;
1435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    virtual void restore() SK_OVERRIDE;
1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    virtual bool rotate(SkScalar degrees) SK_OVERRIDE;
1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    virtual int save(SaveFlags) SK_OVERRIDE;
1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    virtual int saveLayer(const SkRect* bounds, const SkPaint*, SaveFlags) SK_OVERRIDE;
1515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    virtual bool scale(SkScalar sx, SkScalar sy) SK_OVERRIDE;
1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
154f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    virtual void setMatrix(const SkMatrix& matrix) SK_OVERRIDE;
155f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
156f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    virtual bool skew(SkScalar sx, SkScalar sy) SK_OVERRIDE;
157f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
158f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    virtual bool translate(SkScalar dx, SkScalar dy) SK_OVERRIDE;
159f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
160f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)private:
161f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    typedef SkCanvas INHERITED;
162f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::vector<SkDrawCommand*> commandVector;
163f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    std::vector<SkDrawCommand*>::const_iterator it;
164f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
165f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    SkBitmap fBm;
166f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
167f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    /**
168f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        Adds the command to the classes vector of commands.
169f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        @param command  The draw command for execution
170f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)     */
171f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    void addDrawCommand(SkDrawCommand* command);
172f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)};
173f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
174f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif
175f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)