SkDumpCanvas.h revision ab5827354e2c23624acc3fc1fe4a83788bc99e96
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 1376f9e938df0b5826fd4c80b854ceafaf385cfbe1robertphillips@google.com#ifdef SK_DEVELOPER 1476f9e938df0b5826fd4c80b854ceafaf385cfbe1robertphillips@google.com 158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/** This class overrides all the draw methods on SkCanvas, and formats them 168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com as text, and then sends that to a Dumper helper object. 1774b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com Typical use might be to dump a display list to a log file to see what is 198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com being drawn. 208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkDumpCanvas : public SkCanvas { 228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com class Dumper; 248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com explicit SkDumpCanvas(Dumper* = 0); 268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual ~SkDumpCanvas(); 2774b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com enum Verb { 298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kNULL_Verb, 308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kSave_Verb, 328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kRestore_Verb, 3374b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kMatrix_Verb, 3574b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kClip_Verb, 3774b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kDrawPaint_Verb, 398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kDrawPoints_Verb, 404ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com kDrawOval_Verb, 418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kDrawRect_Verb, 424ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com kDrawRRect_Verb, 43ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org kDrawDRRect_Verb, 448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kDrawPath_Verb, 458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kDrawBitmap_Verb, 468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kDrawText_Verb, 478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com kDrawPicture_Verb, 48cb60844b34766aad4151df5e87c144d4a57e9abereed@android.com kDrawVertices_Verb, 490a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com kDrawData_Verb, 500a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com 510a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com kBeginCommentGroup_Verb, 520a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com kAddComment_Verb, 530a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com kEndCommentGroup_Verb 548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com }; 5574b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com /** Subclasses of this are installed on the DumpCanvas, and then called for 578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com each drawing command. 588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com class Dumper : public SkRefCnt { 608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com public: 61563a3b410269a987b70204d0aa44a0de3a1f0f61reed@google.com SK_DECLARE_INST_COUNT(Dumper) 62563a3b410269a987b70204d0aa44a0de3a1f0f61reed@google.com 638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void dump(SkDumpCanvas*, SkDumpCanvas::Verb, const char str[], 648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const SkPaint*) = 0; 65fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 66563a3b410269a987b70204d0aa44a0de3a1f0f61reed@google.com private: 67563a3b410269a987b70204d0aa44a0de3a1f0f61reed@google.com typedef SkRefCnt INHERITED; 688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com }; 6974b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com Dumper* getDumper() const { return fDumper; } 718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void setDumper(Dumper*); 7274b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 739b46e77ec2b387f4502926c2b9bf09450eec257creed@android.com int getNestLevel() const { return fNestLevel; } 7474b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 7543d748446a880c46d5b1ad8828cdbf796c07d9d9reed@google.com virtual int save(SaveFlags) SK_OVERRIDE; 768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual int saveLayer(const SkRect* bounds, const SkPaint* paint, 7743d748446a880c46d5b1ad8828cdbf796c07d9d9reed@google.com SaveFlags) SK_OVERRIDE; 782d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com virtual void restore() SK_OVERRIDE; 798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 802d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com virtual bool translate(SkScalar dx, SkScalar dy) SK_OVERRIDE; 812d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com virtual bool scale(SkScalar sx, SkScalar sy) SK_OVERRIDE; 822d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com virtual bool rotate(SkScalar degrees) SK_OVERRIDE; 832d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com virtual bool skew(SkScalar sx, SkScalar sy) SK_OVERRIDE; 842d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com virtual bool concat(const SkMatrix& matrix) SK_OVERRIDE; 852d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com virtual void setMatrix(const SkMatrix& matrix) SK_OVERRIDE; 8674b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 87071eef918d70b6ca8334bc1241d1ea6923e828d5reed@google.com virtual bool clipRect(const SkRect&, SkRegion::Op, bool) SK_OVERRIDE; 884ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com virtual bool clipRRect(const SkRRect&, SkRegion::Op, bool) SK_OVERRIDE; 89071eef918d70b6ca8334bc1241d1ea6923e828d5reed@google.com virtual bool clipPath(const SkPath&, SkRegion::Op, bool) SK_OVERRIDE; 908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual bool clipRegion(const SkRegion& deviceRgn, 9143d748446a880c46d5b1ad8828cdbf796c07d9d9reed@google.com SkRegion::Op) SK_OVERRIDE; 928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 932d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com virtual void drawPaint(const SkPaint& paint) SK_OVERRIDE; 948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void drawPoints(PointMode mode, size_t count, const SkPoint pts[], 952d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com const SkPaint& paint) SK_OVERRIDE; 964ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com virtual void drawOval(const SkRect&, const SkPaint& paint) SK_OVERRIDE; 977ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.com virtual void drawRect(const SkRect&, const SkPaint& paint) SK_OVERRIDE; 984ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com virtual void drawRRect(const SkRRect&, const SkPaint& paint) SK_OVERRIDE; 997ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.com virtual void drawPath(const SkPath& path, const SkPaint& paint) SK_OVERRIDE; 1008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top, 10143d748446a880c46d5b1ad8828cdbf796c07d9d9reed@google.com const SkPaint* paint) SK_OVERRIDE; 1027112173c3c4cd1b1e7da8cdf971d71f01dd91299reed@google.com virtual void drawBitmapRectToRect(const SkBitmap& bitmap, const SkRect* src, 103eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org const SkRect& dst, const SkPaint* paint, 104eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org DrawBitmapRectFlags flags) SK_OVERRIDE; 1058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void drawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& m, 10643d748446a880c46d5b1ad8828cdbf796c07d9d9reed@google.com const SkPaint* paint) SK_OVERRIDE; 1078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void drawSprite(const SkBitmap& bitmap, int left, int top, 10843d748446a880c46d5b1ad8828cdbf796c07d9d9reed@google.com const SkPaint* paint) SK_OVERRIDE; 1098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void drawText(const void* text, size_t byteLength, SkScalar x, 1102d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com SkScalar y, const SkPaint& paint) SK_OVERRIDE; 1118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void drawPosText(const void* text, size_t byteLength, 1122d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com const SkPoint pos[], const SkPaint& paint) SK_OVERRIDE; 1138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void drawPosTextH(const void* text, size_t byteLength, 1148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const SkScalar xpos[], SkScalar constY, 1152d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com const SkPaint& paint) SK_OVERRIDE; 1168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void drawTextOnPath(const void* text, size_t byteLength, 1178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const SkPath& path, const SkMatrix* matrix, 1182d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com const SkPaint& paint) SK_OVERRIDE; 1192d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com virtual void drawPicture(SkPicture&) SK_OVERRIDE; 1208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void drawVertices(VertexMode vmode, int vertexCount, 1218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const SkPoint vertices[], const SkPoint texs[], 1228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const SkColor colors[], SkXfermode* xmode, 1238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const uint16_t indices[], int indexCount, 1242d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com const SkPaint& paint) SK_OVERRIDE; 1252d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com virtual void drawData(const void*, size_t) SK_OVERRIDE; 1260a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com virtual void beginCommentGroup(const char* description) SK_OVERRIDE; 1270a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com virtual void addComment(const char* kywd, const char* value) SK_OVERRIDE; 1280a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com virtual void endCommentGroup() SK_OVERRIDE; 1298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 130ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.orgprotected: 131ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org virtual void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) SK_OVERRIDE; 132ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org 1338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 1348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com Dumper* fDumper; 1359b46e77ec2b387f4502926c2b9bf09450eec257creed@android.com int fNestLevel; // for nesting recursive elements like pictures 13674b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 1378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void dump(Verb, const SkPaint*, const char format[], ...); 1388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkCanvas INHERITED; 1408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/** Formats the draw commands, and send them to a function-pointer provided 1438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com by the caller. 1448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 1458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkFormatDumper : public SkDumpCanvas::Dumper { 1468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 1478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkFormatDumper(void (*)(const char text[], void* refcon), void* refcon); 14874b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 1498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // override from baseclass that does the formatting, and in turn calls 1508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // the function pointer that was passed to the constructor 1518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void dump(SkDumpCanvas*, SkDumpCanvas::Verb, const char str[], 1522d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com const SkPaint*) SK_OVERRIDE; 15374b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 1548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 1558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void (*fProc)(const char*, void*); 1568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void* fRefcon; 15774b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 1588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkDumpCanvas::Dumper INHERITED; 1598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/** Subclass of Dumper that dumps the drawing command to SkDebugf 1628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 1638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkDebugfDumper : public SkFormatDumper { 1648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 1658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDebugfDumper(); 1668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 1688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkFormatDumper INHERITED; 1698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 17276f9e938df0b5826fd4c80b854ceafaf385cfbe1robertphillips@google.com 17376f9e938df0b5826fd4c80b854ceafaf385cfbe1robertphillips@google.com#endif 174