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)