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