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, 53210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.org kEndCommentGroup_Verb, 54210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.org 55210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.org kCull_Verb 568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com }; 5774b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com /** Subclasses of this are installed on the DumpCanvas, and then called for 598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com each drawing command. 608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com class Dumper : public SkRefCnt { 628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com public: 63563a3b410269a987b70204d0aa44a0de3a1f0f61reed@google.com SK_DECLARE_INST_COUNT(Dumper) 64563a3b410269a987b70204d0aa44a0de3a1f0f61reed@google.com 658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void dump(SkDumpCanvas*, SkDumpCanvas::Verb, const char str[], 668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const SkPaint*) = 0; 67fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 68563a3b410269a987b70204d0aa44a0de3a1f0f61reed@google.com private: 69563a3b410269a987b70204d0aa44a0de3a1f0f61reed@google.com typedef SkRefCnt INHERITED; 708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com }; 7174b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com Dumper* getDumper() const { return fDumper; } 738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void setDumper(Dumper*); 7474b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 759b46e77ec2b387f4502926c2b9bf09450eec257creed@android.com int getNestLevel() const { return fNestLevel; } 7674b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 772d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com virtual void drawPaint(const SkPaint& paint) SK_OVERRIDE; 788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void drawPoints(PointMode mode, size_t count, const SkPoint pts[], 792d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com const SkPaint& paint) SK_OVERRIDE; 804ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com virtual void drawOval(const SkRect&, const SkPaint& paint) SK_OVERRIDE; 817ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.com virtual void drawRect(const SkRect&, const SkPaint& paint) SK_OVERRIDE; 824ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com virtual void drawRRect(const SkRRect&, const SkPaint& paint) SK_OVERRIDE; 837ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.com virtual void drawPath(const SkPath& path, const SkPaint& paint) SK_OVERRIDE; 848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top, 8543d748446a880c46d5b1ad8828cdbf796c07d9d9reed@google.com const SkPaint* paint) SK_OVERRIDE; 867112173c3c4cd1b1e7da8cdf971d71f01dd91299reed@google.com virtual void drawBitmapRectToRect(const SkBitmap& bitmap, const SkRect* src, 87eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org const SkRect& dst, const SkPaint* paint, 88eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org DrawBitmapRectFlags flags) SK_OVERRIDE; 898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void drawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& m, 9043d748446a880c46d5b1ad8828cdbf796c07d9d9reed@google.com const SkPaint* paint) SK_OVERRIDE; 918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void drawSprite(const SkBitmap& bitmap, int left, int top, 9243d748446a880c46d5b1ad8828cdbf796c07d9d9reed@google.com const SkPaint* paint) SK_OVERRIDE; 938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void drawVertices(VertexMode vmode, int vertexCount, 948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const SkPoint vertices[], const SkPoint texs[], 958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const SkColor colors[], SkXfermode* xmode, 968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const uint16_t indices[], int indexCount, 972d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com const SkPaint& paint) SK_OVERRIDE; 982d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com virtual void drawData(const void*, size_t) SK_OVERRIDE; 990a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com virtual void beginCommentGroup(const char* description) SK_OVERRIDE; 1000a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com virtual void addComment(const char* kywd, const char* value) SK_OVERRIDE; 1010a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com virtual void endCommentGroup() SK_OVERRIDE; 1028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 103ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.orgprotected: 104e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org virtual void willSave(SaveFlags) SK_OVERRIDE; 105e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org virtual SaveLayerStrategy willSaveLayer(const SkRect*, const SkPaint*, SaveFlags) SK_OVERRIDE; 106e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org virtual void willRestore() SK_OVERRIDE; 107e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org 10844c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.org virtual void didConcat(const SkMatrix&) SK_OVERRIDE; 10944c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.org virtual void didSetMatrix(const SkMatrix&) SK_OVERRIDE; 11044c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.org 111ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org virtual void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) SK_OVERRIDE; 112e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com virtual void onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y, 113e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com const SkPaint&) SK_OVERRIDE; 114e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com virtual void onDrawPosText(const void* text, size_t byteLength, const SkPoint pos[], 115e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com const SkPaint&) SK_OVERRIDE; 116e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com virtual void onDrawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[], 117e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com SkScalar constY, const SkPaint&) SK_OVERRIDE; 118e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com virtual void onDrawTextOnPath(const void* text, size_t byteLength, const SkPath& path, 119e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com const SkMatrix* matrix, const SkPaint&) SK_OVERRIDE; 120210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.org virtual void onPushCull(const SkRect& cullRect) SK_OVERRIDE; 121210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.org virtual void onPopCull() SK_OVERRIDE; 122ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org 1238f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com virtual void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE; 1248f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com virtual void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE; 1258f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com virtual void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE; 1268f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com virtual void onClipRegion(const SkRegion&, SkRegion::Op) SK_OVERRIDE; 1278f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com 1289b14f26d0f3a974f3dd626c8354e1db1cfcd322frobertphillips virtual void onDrawPicture(const SkPicture*) SK_OVERRIDE; 1299b14f26d0f3a974f3dd626c8354e1db1cfcd322frobertphillips 1308f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com static const char* EdgeStyleToAAString(ClipEdgeStyle edgeStyle); 1318f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com 1328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 1338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com Dumper* fDumper; 1349b46e77ec2b387f4502926c2b9bf09450eec257creed@android.com int fNestLevel; // for nesting recursive elements like pictures 13574b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 1368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void dump(Verb, const SkPaint*, const char format[], ...); 1378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkCanvas INHERITED; 1398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/** Formats the draw commands, and send them to a function-pointer provided 1428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com by the caller. 1438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 1448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkFormatDumper : public SkDumpCanvas::Dumper { 1458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 1468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkFormatDumper(void (*)(const char text[], void* refcon), void* refcon); 14774b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 1488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // override from baseclass that does the formatting, and in turn calls 1498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // the function pointer that was passed to the constructor 1508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void dump(SkDumpCanvas*, SkDumpCanvas::Verb, const char str[], 1512d4297cfa40e69ef155b70614d5cee6a6c21d2f9reed@google.com const SkPaint*) SK_OVERRIDE; 15274b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 1538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 1548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void (*fProc)(const char*, void*); 1558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void* fRefcon; 15674b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 1578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkDumpCanvas::Dumper INHERITED; 1588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/** Subclass of Dumper that dumps the drawing command to SkDebugf 1618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 1628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkDebugfDumper : public SkFormatDumper { 1638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 1648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDebugfDumper(); 1658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 1678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkFormatDumper INHERITED; 1688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 17176f9e938df0b5826fd4c80b854ceafaf385cfbe1robertphillips@google.com 17276f9e938df0b5826fd4c80b854ceafaf385cfbe1robertphillips@google.com#endif 173