SkDumpCanvas.h revision 79377cbceeea970b663e7934d7cb1f27bb223d98
10910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifndef SkDumpCanvas_DEFINED 20910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SkDumpCanvas_DEFINED 30910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 40910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkCanvas.h" 50910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 60910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/** This class overrides all the draw methods on SkCanvas, and formats them 70910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project as text, and then sends that to a Dumper helper object. 80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 90910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project Typical use might be to dump a display list to a log file to see what is 100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project being drawn. 110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkDumpCanvas : public SkCanvas { 130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project class Dumper; 150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project explicit SkDumpCanvas(Dumper* = 0); 170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual ~SkDumpCanvas(); 180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project enum Verb { 200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project kNULL_Verb, 210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project kSave_Verb, 230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project kRestore_Verb, 240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project kMatrix_Verb, 260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project kClip_Verb, 280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project kDrawPaint_Verb, 300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project kDrawPoints_Verb, 310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project kDrawRect_Verb, 320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project kDrawPath_Verb, 330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project kDrawBitmap_Verb, 340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project kDrawText_Verb, 350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project kDrawPicture_Verb, 36dab163f0b2658c2dba48839e72f81d3d8ee0ae8bMike Reed kDrawShape_Verb, 370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project kDrawVertices_Verb 380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project }; 390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project /** Subclasses of this are installed on the DumpCanvas, and then called for 410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project each drawing command. 420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project class Dumper : public SkRefCnt { 440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project public: 450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void dump(SkDumpCanvas*, SkDumpCanvas::Verb, const char str[], 460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkPaint*) = 0; 470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project }; 480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project Dumper* getDumper() const { return fDumper; } 500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void setDumper(Dumper*); 510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 5279377cbceeea970b663e7934d7cb1f27bb223d98Mike Reed int getNestLevel() const { return fNestLevel; } 5379377cbceeea970b663e7934d7cb1f27bb223d98Mike Reed 540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // overrides from SkCanvas 550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual int save(SaveFlags flags = kMatrixClip_SaveFlag); 570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual int saveLayer(const SkRect* bounds, const SkPaint* paint, 580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SaveFlags flags = kARGB_ClipLayer_SaveFlag); 590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void restore(); 600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual bool translate(SkScalar dx, SkScalar dy); 620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual bool scale(SkScalar sx, SkScalar sy); 630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual bool rotate(SkScalar degrees); 640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual bool skew(SkScalar sx, SkScalar sy); 650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual bool concat(const SkMatrix& matrix); 660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void setMatrix(const SkMatrix& matrix); 670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual bool clipRect(const SkRect& rect, 690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkRegion::Op op = SkRegion::kIntersect_Op); 700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual bool clipPath(const SkPath& path, 710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkRegion::Op op = SkRegion::kIntersect_Op); 720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual bool clipRegion(const SkRegion& deviceRgn, 730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkRegion::Op op = SkRegion::kIntersect_Op); 740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void drawPaint(const SkPaint& paint); 760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void drawPoints(PointMode mode, size_t count, const SkPoint pts[], 770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkPaint& paint); 780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void drawRect(const SkRect& rect, const SkPaint& paint); 790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void drawPath(const SkPath& path, const SkPaint& paint); 800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top, 810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkPaint* paint = NULL); 820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void drawBitmapRect(const SkBitmap& bitmap, const SkIRect* src, 830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkRect& dst, const SkPaint* paint = NULL); 840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void drawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& m, 850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkPaint* paint = NULL); 860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void drawSprite(const SkBitmap& bitmap, int left, int top, 870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkPaint* paint = NULL); 880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void drawText(const void* text, size_t byteLength, SkScalar x, 890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalar y, const SkPaint& paint); 900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void drawPosText(const void* text, size_t byteLength, 910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkPoint pos[], const SkPaint& paint); 920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void drawPosTextH(const void* text, size_t byteLength, 930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkScalar xpos[], SkScalar constY, 940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkPaint& paint); 950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void drawTextOnPath(const void* text, size_t byteLength, 960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkPath& path, const SkMatrix* matrix, 970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkPaint& paint); 98dab163f0b2658c2dba48839e72f81d3d8ee0ae8bMike Reed virtual void drawPicture(SkPicture&); 99dab163f0b2658c2dba48839e72f81d3d8ee0ae8bMike Reed virtual void drawShape(SkShape*); 1000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void drawVertices(VertexMode vmode, int vertexCount, 1010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkPoint vertices[], const SkPoint texs[], 1020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkColor colors[], SkXfermode* xmode, 1030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const uint16_t indices[], int indexCount, 1040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkPaint& paint); 1050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 1070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project Dumper* fDumper; 10879377cbceeea970b663e7934d7cb1f27bb223d98Mike Reed int fNestLevel; // for nesting recursive elements like pictures 1090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void dump(Verb, const SkPaint*, const char format[], ...); 1110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project typedef SkCanvas INHERITED; 1130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 1140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/** Formats the draw commands, and send them to a function-pointer provided 1160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project by the caller. 1170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 1180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkFormatDumper : public SkDumpCanvas::Dumper { 1190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 1200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkFormatDumper(void (*)(const char text[], void* refcon), void* refcon); 1210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // override from baseclass that does the formatting, and in turn calls 1230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // the function pointer that was passed to the constructor 1240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void dump(SkDumpCanvas*, SkDumpCanvas::Verb, const char str[], 1250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkPaint*); 1260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 1280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void (*fProc)(const char*, void*); 1290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project void* fRefcon; 1300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project typedef SkDumpCanvas::Dumper INHERITED; 1320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 1330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/** Subclass of Dumper that dumps the drawing command to SkDebugf 1350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 1360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkDebugfDumper : public SkFormatDumper { 1370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 1380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDebugfDumper(); 1390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 1410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project typedef SkFormatDumper INHERITED; 1420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 1430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 145