00001 #ifndef SkDumpCanvas_DEFINED
00002 #define SkDumpCanvas_DEFINED
00003
00004 #include "SkCanvas.h"
00005
00012 class SkDumpCanvas : public SkCanvas {
00013 public:
00014 class Dumper;
00015
00016 explicit SkDumpCanvas(Dumper* = 0);
00017 virtual ~SkDumpCanvas();
00018
00019 enum Verb {
00020 kNULL_Verb,
00021
00022 kSave_Verb,
00023 kRestore_Verb,
00024
00025 kMatrix_Verb,
00026
00027 kClip_Verb,
00028
00029 kDrawPaint_Verb,
00030 kDrawPoints_Verb,
00031 kDrawRect_Verb,
00032 kDrawPath_Verb,
00033 kDrawBitmap_Verb,
00034 kDrawText_Verb,
00035 kDrawPicture_Verb,
00036 kDrawShape_Verb,
00037 kDrawVertices_Verb
00038 };
00039
00043 class Dumper : public SkRefCnt {
00044 public:
00045 virtual void dump(SkDumpCanvas*, SkDumpCanvas::Verb, const char str[],
00046 const SkPaint*) = 0;
00047 };
00048
00049 Dumper* getDumper() const { return fDumper; }
00050 void setDumper(Dumper*);
00051
00052 int getNestLevel() const { return fNestLevel; }
00053
00054
00055
00056 virtual int save(SaveFlags flags = kMatrixClip_SaveFlag);
00057 virtual int saveLayer(const SkRect* bounds, const SkPaint* paint,
00058 SaveFlags flags = kARGB_ClipLayer_SaveFlag);
00059 virtual void restore();
00060
00061 virtual bool translate(SkScalar dx, SkScalar dy);
00062 virtual bool scale(SkScalar sx, SkScalar sy);
00063 virtual bool rotate(SkScalar degrees);
00064 virtual bool skew(SkScalar sx, SkScalar sy);
00065 virtual bool concat(const SkMatrix& matrix);
00066 virtual void setMatrix(const SkMatrix& matrix);
00067
00068 virtual bool clipRect(const SkRect& rect,
00069 SkRegion::Op op = SkRegion::kIntersect_Op);
00070 virtual bool clipPath(const SkPath& path,
00071 SkRegion::Op op = SkRegion::kIntersect_Op);
00072 virtual bool clipRegion(const SkRegion& deviceRgn,
00073 SkRegion::Op op = SkRegion::kIntersect_Op);
00074
00075 virtual void drawPaint(const SkPaint& paint);
00076 virtual void drawPoints(PointMode mode, size_t count, const SkPoint pts[],
00077 const SkPaint& paint);
00078 virtual void drawRect(const SkRect& rect, const SkPaint& paint);
00079 virtual void drawPath(const SkPath& path, const SkPaint& paint);
00080 virtual void drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top,
00081 const SkPaint* paint = NULL);
00082 virtual void drawBitmapRect(const SkBitmap& bitmap, const SkIRect* src,
00083 const SkRect& dst, const SkPaint* paint = NULL);
00084 virtual void drawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& m,
00085 const SkPaint* paint = NULL);
00086 virtual void drawSprite(const SkBitmap& bitmap, int left, int top,
00087 const SkPaint* paint = NULL);
00088 virtual void drawText(const void* text, size_t byteLength, SkScalar x,
00089 SkScalar y, const SkPaint& paint);
00090 virtual void drawPosText(const void* text, size_t byteLength,
00091 const SkPoint pos[], const SkPaint& paint);
00092 virtual void drawPosTextH(const void* text, size_t byteLength,
00093 const SkScalar xpos[], SkScalar constY,
00094 const SkPaint& paint);
00095 virtual void drawTextOnPath(const void* text, size_t byteLength,
00096 const SkPath& path, const SkMatrix* matrix,
00097 const SkPaint& paint);
00098 virtual void drawPicture(SkPicture&);
00099 virtual void drawShape(SkShape*);
00100 virtual void drawVertices(VertexMode vmode, int vertexCount,
00101 const SkPoint vertices[], const SkPoint texs[],
00102 const SkColor colors[], SkXfermode* xmode,
00103 const uint16_t indices[], int indexCount,
00104 const SkPaint& paint);
00105
00106 private:
00107 Dumper* fDumper;
00108 int fNestLevel;
00109
00110 void dump(Verb, const SkPaint*, const char format[], ...);
00111
00112 typedef SkCanvas INHERITED;
00113 };
00114
00118 class SkFormatDumper : public SkDumpCanvas::Dumper {
00119 public:
00120 SkFormatDumper(void (*)(const char text[], void* refcon), void* refcon);
00121
00122
00123
00124 virtual void dump(SkDumpCanvas*, SkDumpCanvas::Verb, const char str[],
00125 const SkPaint*);
00126
00127 private:
00128 void (*fProc)(const char*, void*);
00129 void* fRefcon;
00130
00131 typedef SkDumpCanvas::Dumper INHERITED;
00132 };
00133
00136 class SkDebugfDumper : public SkFormatDumper {
00137 public:
00138 SkDebugfDumper();
00139
00140 private:
00141 typedef SkFormatDumper INHERITED;
00142 };
00143
00144 #endif