Making SkDrawCommand more robust

https://codereview.appspot.com/7486052/



git-svn-id: http://skia.googlecode.com/svn/trunk@8181 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/debugger/SkDrawCommand.h b/debugger/SkDrawCommand.h
index d06e7fe..3ede8ff 100644
--- a/debugger/SkDrawCommand.h
+++ b/debugger/SkDrawCommand.h
@@ -73,10 +73,12 @@
     virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
     virtual const SkBitmap* getBitmap() const SK_OVERRIDE;
 private:
-    const SkPath* fPath;
+    SkPath fPath;
     SkRegion::Op fOp;
     bool fDoAA;
     SkBitmap fBitmap;
+
+    typedef SkDrawCommand INHERITED;
 };
 
 class ClipRegion : public SkDrawCommand {
@@ -170,7 +172,8 @@
 class DrawBitmapRect : public SkDrawCommand {
 public:
     DrawBitmapRect(const SkBitmap& bitmap, const SkRect* src,
-            const SkRect& dst, const SkPaint* paint, SkBitmap& resizedBitmap);
+                   const SkRect& dst, const SkPaint* paint, 
+                   SkBitmap& resizedBitmap);
     virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
     virtual const SkBitmap* getBitmap() const SK_OVERRIDE;
 
@@ -183,15 +186,18 @@
 
     void setPaint(const SkPaint& paint) { fPaint = paint; fPaintPtr = &fPaint; }
 
-    const SkRect& dstRect() { return *fDst; }
+    const SkRect* srcRect() const { return fSrc.isEmpty() ? NULL : &fSrc; }
+    const SkRect& dstRect() const { return fDst; }
 
 private:
-    const SkRect* fSrc;
+    SkRect  fSrc;
     SkPaint fPaint;
     SkPaint* fPaintPtr;
-    const SkBitmap* fBitmap;
-    const SkRect* fDst;
+    SkBitmap fBitmap;
+    SkRect  fDst;
     SkBitmap fResizedBitmap;
+
+    typedef SkDrawCommand INHERITED;
 };
 
 class DrawData : public SkDrawCommand {
@@ -227,9 +233,11 @@
     virtual const SkBitmap* getBitmap() const SK_OVERRIDE;
 
 private:
-    const SkPath* fPath;
-    const SkPaint* fPaint;
+    SkPath  fPath;
+    SkPaint fPaint;
     SkBitmap fBitmap;
+
+    typedef SkDrawCommand INHERITED;
 };
 
 class DrawPicture : public SkDrawCommand {
@@ -296,14 +304,16 @@
 class DrawPosTextH : public SkDrawCommand {
 public:
     DrawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[],
-            SkScalar constY, const SkPaint& paint);
+                 SkScalar constY, const SkPaint& paint);
     virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
 private:
     const SkScalar* fXpos;
     const void* fText;
     size_t fByteLength;
     SkScalar fConstY;
-    const SkPaint* fPaint;
+    SkPaint fPaint;
+
+    typedef SkDrawCommand INHERITED;
 };
 
 class DrawRectC : public SkDrawCommand {
@@ -311,11 +321,13 @@
     DrawRectC(const SkRect& rect, const SkPaint& paint);
     virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
 
-    const SkRect& rect() const { return *fRect; }
-    const SkPaint* paint() const { return fPaint; }
+    const SkRect& rect() const   { return fRect; }
+    const SkPaint& paint() const { return fPaint; }
 private:
-    const SkRect* fRect;
-    const SkPaint* fPaint;
+    SkRect  fRect;
+    SkPaint fPaint;
+
+    typedef SkDrawCommand INHERITED;
 };
 
 class DrawRRect : public SkDrawCommand {