SkDumpCanvas.h revision 2d4297cfa40e69ef155b70614d5cee6a6c21d2f9
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SkDumpCanvas_DEFINED 98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SkDumpCanvas_DEFINED 108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkCanvas.h" 128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/** This class overrides all the draw methods on SkCanvas, and formats them 148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com as text, and then sends that to a Dumper helper object. 158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com Typical use might be to dump a display list to a log file to see what is 178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com being drawn. 188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkDumpCanvas : public SkCanvas { 208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com class Dumper; 228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com explicit SkDumpCanvas(Dumper* = 0); 248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual ~SkDumpCanvas(); 258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com enum Verb { 278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kNULL_Verb, 288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kSave_Verb, 308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kRestore_Verb, 318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kMatrix_Verb, 338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kClip_Verb, 358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kDrawPaint_Verb, 378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kDrawPoints_Verb, 388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kDrawRect_Verb, 398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kDrawPath_Verb, 408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kDrawBitmap_Verb, 418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kDrawText_Verb, 428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kDrawPicture_Verb, 43cb60844b34766aad4151df5e87c144d4a57e9abereed@android.com kDrawVertices_Verb, 44cb60844b34766aad4151df5e87c144d4a57e9abereed@android.com kDrawData_Verb 458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com }; 468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com /** Subclasses of this are installed on the DumpCanvas, and then called for 488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com each drawing command. 498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com class Dumper : public SkRefCnt { 518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com public: 528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void dump(SkDumpCanvas*, SkDumpCanvas::Verb, const char str[], 538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const SkPaint*) = 0; 548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com }; 558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com Dumper* getDumper() const { return fDumper; } 578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void setDumper(Dumper*); 588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 599b46e77ec2b387f4502926c2b9bf09450eec257creed@android.com int getNestLevel() const { return fNestLevel; } 609b46e77ec2b387f4502926c2b9bf09450eec257creed@android.com 612d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com virtual int save(SaveFlags flags = kMatrixClip_SaveFlag) SK_OVERRIDE; 628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual int saveLayer(const SkRect* bounds, const SkPaint* paint, 632d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com SaveFlags flags = kARGB_ClipLayer_SaveFlag) SK_OVERRIDE; 642d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com virtual void restore() SK_OVERRIDE; 658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 662d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com virtual bool translate(SkScalar dx, SkScalar dy) SK_OVERRIDE; 672d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com virtual bool scale(SkScalar sx, SkScalar sy) SK_OVERRIDE; 682d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com virtual bool rotate(SkScalar degrees) SK_OVERRIDE; 692d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com virtual bool skew(SkScalar sx, SkScalar sy) SK_OVERRIDE; 702d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com virtual bool concat(const SkMatrix& matrix) SK_OVERRIDE; 712d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com virtual void setMatrix(const SkMatrix& matrix) SK_OVERRIDE; 728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual bool clipRect(const SkRect& rect, 742d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com SkRegion::Op op = SkRegion::kIntersect_Op) SK_OVERRIDE; 758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual bool clipPath(const SkPath& path, 762d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com SkRegion::Op op = SkRegion::kIntersect_Op) SK_OVERRIDE; 778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual bool clipRegion(const SkRegion& deviceRgn, 782d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com SkRegion::Op op = SkRegion::kIntersect_Op) SK_OVERRIDE; 798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 802d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com virtual void drawPaint(const SkPaint& paint) SK_OVERRIDE; 818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void drawPoints(PointMode mode, size_t count, const SkPoint pts[], 822d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com const SkPaint& paint) SK_OVERRIDE; 832d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com virtual void drawRect(const SkRect& rect, const SkPaint& paint) SK_OVERRIDE; 842d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com virtual void drawPath(const SkPath& path, const SkPaint& paint) SK_OVERRIDE; 858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top, 862d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com const SkPaint* paint = NULL) SK_OVERRIDE; 878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void drawBitmapRect(const SkBitmap& bitmap, const SkIRect* src, 882d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com const SkRect& dst, const SkPaint* paint = NULL) SK_OVERRIDE; 898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void drawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& m, 902d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com const SkPaint* paint = NULL) SK_OVERRIDE; 918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void drawSprite(const SkBitmap& bitmap, int left, int top, 922d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com const SkPaint* paint = NULL) SK_OVERRIDE; 938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void drawText(const void* text, size_t byteLength, SkScalar x, 942d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com SkScalar y, const SkPaint& paint) SK_OVERRIDE; 958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void drawPosText(const void* text, size_t byteLength, 962d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com const SkPoint pos[], const SkPaint& paint) SK_OVERRIDE; 978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void drawPosTextH(const void* text, size_t byteLength, 988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const SkScalar xpos[], SkScalar constY, 992d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com const SkPaint& paint) SK_OVERRIDE; 1008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void drawTextOnPath(const void* text, size_t byteLength, 1018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const SkPath& path, const SkMatrix* matrix, 1022d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com const SkPaint& paint) SK_OVERRIDE; 1032d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com virtual void drawPicture(SkPicture&) SK_OVERRIDE; 1048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void drawVertices(VertexMode vmode, int vertexCount, 1058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const SkPoint vertices[], const SkPoint texs[], 1068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const SkColor colors[], SkXfermode* xmode, 1078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const uint16_t indices[], int indexCount, 1082d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com const SkPaint& paint) SK_OVERRIDE; 1092d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com virtual void drawData(const void*, size_t) SK_OVERRIDE; 1108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 1128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com Dumper* fDumper; 1139b46e77ec2b387f4502926c2b9bf09450eec257creed@android.com int fNestLevel; // for nesting recursive elements like pictures 1148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void dump(Verb, const SkPaint*, const char format[], ...); 1168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkCanvas INHERITED; 1188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/** Formats the draw commands, and send them to a function-pointer provided 1218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com by the caller. 1228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 1238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkFormatDumper : public SkDumpCanvas::Dumper { 1248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 1258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkFormatDumper(void (*)(const char text[], void* refcon), void* refcon); 1268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // override from baseclass that does the formatting, and in turn calls 1288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // the function pointer that was passed to the constructor 1298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void dump(SkDumpCanvas*, SkDumpCanvas::Verb, const char str[], 1302d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com const SkPaint*) SK_OVERRIDE; 1318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 1338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void (*fProc)(const char*, void*); 1348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void* fRefcon; 1358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkDumpCanvas::Dumper INHERITED; 1378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/** Subclass of Dumper that dumps the drawing command to SkDebugf 1408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 1418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkDebugfDumper : public SkFormatDumper { 1428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 1438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDebugfDumper(); 1448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 1468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkFormatDumper INHERITED; 1478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 150