SkDebugCanvas.h revision a9e937c7b712b024de108fa963f92d0e70e4a296
10e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
20e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*
30e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * Copyright 2012 Google Inc.
40e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org *
50e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * Use of this source code is governed by a BSD-style license that can be
60e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * found in the LICENSE file.
70e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org */
80e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
90e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#ifndef SKDEBUGCANVAS_H_
110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define SKDEBUGCANVAS_H_
120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "SkCanvas.h"
140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "SkDrawCommand.h"
150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "SkPicture.h"
160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <vector>
170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass SkDebugCanvas : public SkCanvas {
190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgpublic:
200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    SkDebugCanvas(int width, int height);
210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    ~SkDebugCanvas();
220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    void toggleFilter(bool toggle);
240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    /**
260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org        Executes all draw calls to the canvas.
270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org        @param canvas  The canvas being drawn to
280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org     */
290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    void draw(SkCanvas* canvas);
300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    /**
320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org        Executes the draw calls in the specified range.
332a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org        @param canvas  The canvas being drawn to
340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org        @param i  The beginning of the range
350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org        @param j  The end of the range
360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org        TODO(chudy): Implement
370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org     */
380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    void drawRange(SkCanvas* canvas, int i, int j);
390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    /**
410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org        Executes the draw calls up to the specified index.
420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org        @param canvas  The canvas being drawn to
430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org        @param index  The index of the final command being executed
441c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org     */
450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    void drawTo(SkCanvas* canvas, int index);
460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    /**
481c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org        Returns the most recently calculated transformation matrix
490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org     */
501c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org    const SkMatrix& getCurrentMatrix() {
510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org        return fMatrix;
521c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org    }
532a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org
540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    /**
550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org        Returns the most recently calculated clip
560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org     */
571c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org    const SkIRect& getCurrentClip() {
582a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org        return fClip;
590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    }
600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    /**
620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org        Returns the index of the last draw command to write to the pixel at (x,y)
630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org     */
640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    int getCommandAtPoint(int x, int y, int index);
650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    /**
671c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org        Returns the draw command at the given index.
680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org        @param index  The index of the command
691c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org     */
700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    SkDrawCommand* getDrawCommandAt(int index);
710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    /**
731c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org        Returns information about the command at the given index.
740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org        @param index  The index of the command
750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org     */
760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    std::vector<std::string>* getCommandInfoAt(int index);
770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    /**
791c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org        Returns the visibility of the command at the given index.
800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org        @param index  The index of the command
810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org     */
820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    bool getDrawCommandVisibilityAt(int index);
831c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org
840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    /**
850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org        Returns the vector of draw commands
860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org     */
871c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org    std::vector<SkDrawCommand*> getDrawCommands();
881a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org
890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    /**
900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org     * Returns the string vector of draw commands
911c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org     */
920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    std::vector<std::string>* getDrawCommandsAsStrings();
930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    /**
951c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org        Returns length of draw command vector.
960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org     */
970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    int getSize() {
980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org        return commandVector.size();
990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    }
1000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1011c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org    /**
1020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org        Toggles the visibility / execution of the draw command at index i with
1030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org        the value of toggle.
1040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org     */
1051c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org    void toggleCommand(int index, bool toggle);
1060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1071c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org    void setBounds(int width, int height) {
1080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org        fWidth = width;
1091c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org        fHeight = height;
1100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    }
1111c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org
1120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    void setUserOffset(SkIPoint offset) {
1131c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org        fUserOffset = offset;
1140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    }
1150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1161c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org    void setUserScale(float scale) {
1170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org        fUserScale = scale;
1180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    }
1190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1201c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org////////////////////////////////////////////////////////////////////////////////
1210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Inherited from SkCanvas
1220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org////////////////////////////////////////////////////////////////////////////////
1230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    virtual void clear(SkColor) SK_OVERRIDE;
1250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    virtual bool clipPath(const SkPath&, SkRegion::Op, bool) SK_OVERRIDE;
1270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1281c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org    virtual bool clipRect(const SkRect&, SkRegion::Op, bool) SK_OVERRIDE;
1290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    virtual bool clipRegion(const SkRegion& region, SkRegion::Op op) SK_OVERRIDE;
1310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1321c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org    virtual bool concat(const SkMatrix& matrix) SK_OVERRIDE;
1331c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org
1340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    virtual void drawBitmap(const SkBitmap&, SkScalar left, SkScalar top,
1350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org                            const SkPaint*) SK_OVERRIDE;
1360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    virtual void drawBitmapRect(const SkBitmap&, const SkIRect* src,
1380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org                                const SkRect& dst, const SkPaint*) SK_OVERRIDE;
1390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    virtual void drawBitmapMatrix(const SkBitmap&, const SkMatrix&,
1410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org                                  const SkPaint*) SK_OVERRIDE;
1421c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org
1430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    virtual void drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center,
1440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org                                const SkRect& dst, const SkPaint*) SK_OVERRIDE;
1450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1461c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org    virtual void drawData(const void*, size_t) SK_OVERRIDE;
1470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    virtual void drawPaint(const SkPaint& paint) SK_OVERRIDE;
1490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1501c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org    virtual void drawPath(const SkPath& path, const SkPaint&) SK_OVERRIDE;
1510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    virtual void drawPicture(SkPicture& picture) SK_OVERRIDE;
1530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    virtual void drawPoints(PointMode, size_t count, const SkPoint pts[],
1550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org                            const SkPaint&) SK_OVERRIDE;
1560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1571c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org    virtual void drawPosText(const void* text, size_t byteLength,
1580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org                             const SkPoint pos[], const SkPaint&) SK_OVERRIDE;
1590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    virtual void drawPosTextH(const void* text, size_t byteLength,
1610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org                      const SkScalar xpos[], SkScalar constY, const SkPaint&) SK_OVERRIDE;
1620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    virtual void drawRect(const SkRect& rect, const SkPaint&) SK_OVERRIDE;
1640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    virtual void drawSprite(const SkBitmap&, int left, int top,
1660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org                            const SkPaint*) SK_OVERRIDE;
1671c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org
1680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    virtual void drawText(const void* text, size_t byteLength, SkScalar x,
1690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org                          SkScalar y, const SkPaint&) SK_OVERRIDE;
1700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    virtual void drawTextOnPath(const void* text, size_t byteLength,
1720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org                            const SkPath& path, const SkMatrix* matrix,
1731c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org                                const SkPaint&) SK_OVERRIDE;
1740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    virtual void drawVertices(VertexMode, int vertexCount,
1760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org                          const SkPoint vertices[], const SkPoint texs[],
1770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org                          const SkColor colors[], SkXfermode*,
1780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org                          const uint16_t indices[], int indexCount,
1790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org                              const SkPaint&) SK_OVERRIDE;
1801c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org
1810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    virtual void restore() SK_OVERRIDE;
1820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    virtual bool rotate(SkScalar degrees) SK_OVERRIDE;
1840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    virtual int save(SaveFlags) SK_OVERRIDE;
1860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1871c84149e27a490de88053bccd9d64f325b2626d7henrik.lundin@webrtc.org    virtual int saveLayer(const SkRect* bounds, const SkPaint*, SaveFlags) SK_OVERRIDE;
1880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    virtual bool scale(SkScalar sx, SkScalar sy) SK_OVERRIDE;
1900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    virtual void setMatrix(const SkMatrix& matrix) SK_OVERRIDE;
1920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    virtual bool skew(SkScalar sx, SkScalar sy) SK_OVERRIDE;
1940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    virtual bool translate(SkScalar dx, SkScalar dy) SK_OVERRIDE;
1960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org
1970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgprivate:
1982a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org    typedef SkCanvas INHERITED;
1990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    std::vector<SkDrawCommand*> commandVector;
2000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    std::vector<SkDrawCommand*>::const_iterator it;
2010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    int fHeight;
2020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org    int fWidth;
203    SkBitmap fBm;
204    bool fFilter;
205    int fIndex;
206    SkIPoint fUserOffset;
207    float fUserScale;
208    SkMatrix fMatrix;
209    SkIRect fClip;
210
211    /**
212        Adds the command to the classes vector of commands.
213        @param command  The draw command for execution
214     */
215    void addDrawCommand(SkDrawCommand* command);
216
217    /**
218        Applies any panning and zooming the user has specified before
219        drawing anything else into the canvas.
220     */
221    void applyUserTransform(SkCanvas* canvas);
222};
223
224#endif
225