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, 49963137b75c0a1fe91f35e9826742f36309f5e65ddandov kDrawPatch_Verb, 50c4fda92f45b9649f233a5b8636618a6431aa59cbreed kDrawData_Verb, // obsolete 510a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com 520a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com kBeginCommentGroup_Verb, 530a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com kAddComment_Verb, 54210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.org kEndCommentGroup_Verb, 55210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.org 56210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.org kCull_Verb 578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com }; 5874b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com /** Subclasses of this are installed on the DumpCanvas, and then called for 608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com each drawing command. 618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com class Dumper : public SkRefCnt { 638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com public: 64563a3b410269a987b70204d0aa44a0de3a1f0f61reed@google.com SK_DECLARE_INST_COUNT(Dumper) 65563a3b410269a987b70204d0aa44a0de3a1f0f61reed@google.com 668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void dump(SkDumpCanvas*, SkDumpCanvas::Verb, const char str[], 678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const SkPaint*) = 0; 68fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 69563a3b410269a987b70204d0aa44a0de3a1f0f61reed@google.com private: 70563a3b410269a987b70204d0aa44a0de3a1f0f61reed@google.com typedef SkRefCnt INHERITED; 718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com }; 7274b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com Dumper* getDumper() const { return fDumper; } 748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void setDumper(Dumper*); 7574b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 769b46e77ec2b387f4502926c2b9bf09450eec257creed@android.com int getNestLevel() const { return fNestLevel; } 7774b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 7836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void beginCommentGroup(const char* description) override; 7936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void addComment(const char* kywd, const char* value) override; 8036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void endCommentGroup() override; 818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 82ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.orgprotected: 8336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void willSave() override; 8436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SaveLayerStrategy willSaveLayer(const SkRect*, const SkPaint*, SaveFlags) override; 8536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void willRestore() override; 86e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org 8736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void didConcat(const SkMatrix&) override; 8836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void didSetMatrix(const SkMatrix&) override; 8944c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.org 9036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) override; 91e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com virtual void onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y, 9236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const SkPaint&) override; 93e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com virtual void onDrawPosText(const void* text, size_t byteLength, const SkPoint pos[], 9436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const SkPaint&) override; 95e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com virtual void onDrawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[], 9636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkScalar constY, const SkPaint&) override; 97e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com virtual void onDrawTextOnPath(const void* text, size_t byteLength, const SkPath& path, 9836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const SkMatrix* matrix, const SkPaint&) override; 99b7425173f96e93b090787e2386ba5f022b6c2869fmalita virtual void onDrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y, 10036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const SkPaint& paint) override; 101b3c9d1c33caf325aada244204215eb790c228c12dandov virtual void onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], 102b3c9d1c33caf325aada244204215eb790c228c12dandov const SkPoint texCoords[4], SkXfermode* xmode, 10336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const SkPaint& paint) override; 10436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein 10536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDrawPaint(const SkPaint&) override; 10636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDrawPoints(PointMode, size_t count, const SkPoint pts[], const SkPaint&) override; 10736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDrawRect(const SkRect&, const SkPaint&) override; 10836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDrawOval(const SkRect&, const SkPaint&) override; 10936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDrawRRect(const SkRRect&, const SkPaint&) override; 11036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDrawPath(const SkPath&, const SkPaint&) override; 11136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDrawBitmap(const SkBitmap&, SkScalar left, SkScalar top, const SkPaint*) override; 11241af966ab338e95eee81ab618ab28195075338f7reed void onDrawBitmapRect(const SkBitmap&, const SkRect* src, const SkRect& dst, const SkPaint*, 11336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein DrawBitmapRectFlags flags) override; 11436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDrawImage(const SkImage*, SkScalar left, SkScalar top, const SkPaint*) override; 11541af966ab338e95eee81ab618ab28195075338f7reed void onDrawImageRect(const SkImage*, const SkRect* src, const SkRect& dst, 11636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const SkPaint*) override; 11741af966ab338e95eee81ab618ab28195075338f7reed void onDrawBitmapNine(const SkBitmap&, const SkIRect& center, const SkRect& dst, 11836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const SkPaint*) override; 11936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDrawSprite(const SkBitmap&, int left, int top, const SkPaint*) override; 12041af966ab338e95eee81ab618ab28195075338f7reed void onDrawVertices(VertexMode vmode, int vertexCount, 12141af966ab338e95eee81ab618ab28195075338f7reed const SkPoint vertices[], const SkPoint texs[], 12241af966ab338e95eee81ab618ab28195075338f7reed const SkColor colors[], SkXfermode* xmode, 12341af966ab338e95eee81ab618ab28195075338f7reed const uint16_t indices[], int indexCount, 12436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const SkPaint&) override; 12541af966ab338e95eee81ab618ab28195075338f7reed 12636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) override; 12736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) override; 12836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) override; 12936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onClipRegion(const SkRegion&, SkRegion::Op) override; 1308f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com 13136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*) override; 1329b14f26d0f3a974f3dd626c8354e1db1cfcd322frobertphillips 1338f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com static const char* EdgeStyleToAAString(ClipEdgeStyle edgeStyle); 1348f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com 1358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 1368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com Dumper* fDumper; 1379b46e77ec2b387f4502926c2b9bf09450eec257creed@android.com int fNestLevel; // for nesting recursive elements like pictures 13874b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 1398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void dump(Verb, const SkPaint*, const char format[], ...); 1408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkCanvas INHERITED; 1428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/** Formats the draw commands, and send them to a function-pointer provided 1458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com by the caller. 1468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 1478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkFormatDumper : public SkDumpCanvas::Dumper { 1488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 1498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkFormatDumper(void (*)(const char text[], void* refcon), void* refcon); 15074b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 1518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // override from baseclass that does the formatting, and in turn calls 1528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // the function pointer that was passed to the constructor 1538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void dump(SkDumpCanvas*, SkDumpCanvas::Verb, const char str[], 15436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const SkPaint*) override; 15574b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 1568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 1578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void (*fProc)(const char*, void*); 1588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void* fRefcon; 15974b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org 1608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkDumpCanvas::Dumper INHERITED; 1618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/** Subclass of Dumper that dumps the drawing command to SkDebugf 1648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 1658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkDebugfDumper : public SkFormatDumper { 1668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 1678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDebugfDumper(); 1688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 1708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkFormatDumper INHERITED; 1718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 17476f9e938df0b5826fd4c80b854ceafaf385cfbe1robertphillips@google.com 17576f9e938df0b5826fd4c80b854ceafaf385cfbe1robertphillips@google.com#endif 176