180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/*
380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2012 Google Inc.
480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru *
580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be
680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file.
780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */
880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifndef SKDRAWCOMMAND_H_
1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#define SKDRAWCOMMAND_H_
1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkPictureFlat.h"
1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkCanvas.h"
1458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#include "SkString.h"
1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SK_API SkDrawCommand {
1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    /* TODO(chudy): Remove subclasses. */
1958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkDrawCommand(DrawType drawType);
2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkDrawCommand();
2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual ~SkDrawCommand();
2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual SkString toString();
2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual const char* toCString() {
2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        return GetCommandString(fDrawType);
2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    }
2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    bool isVisible() const {
3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        return fVisible;
3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    }
3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    void setVisible(bool toggle) {
3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        fVisible = toggle;
3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    }
3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkTDArray<SkString*>* Info() {return &fInfo; };
3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas)=0;
40363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    /** Does nothing by default, but used by save() and restore()-type
41363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger        subclassse to track unresolved save() calls. */
42363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    virtual void trackSaveState(int* state) { };
4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    DrawType getType() { return fDrawType; };
4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
4558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    virtual bool render(SkCanvas* canvas) const { return false; }
46363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger
47363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    static const char* GetCommandString(DrawType type);
48363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger
4980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprotected:
5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    DrawType fDrawType;
5180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkTDArray<SkString*> fInfo;
5280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
5480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    bool fVisible;
5580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
5680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
5758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkRestoreCommand : public SkDrawCommand {
5880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
5958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkRestoreCommand();
6080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
61363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    virtual void trackSaveState(int* state) SK_OVERRIDE;
62e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger
63e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenbergerprivate:
64e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    typedef SkDrawCommand INHERITED;
6580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
6680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
6758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkClearCommand : public SkDrawCommand {
6880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
6958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkClearCommand(SkColor color);
7080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
7180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
7280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkColor fColor;
73e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger
74e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    typedef SkDrawCommand INHERITED;
7580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
7680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
7758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkClipPathCommand : public SkDrawCommand {
7880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
7958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkClipPathCommand(const SkPath& path, SkRegion::Op op, bool doAA);
8080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
8158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
8280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
83e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkPath       fPath;
8480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkRegion::Op fOp;
85e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    bool         fDoAA;
86096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
87096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    typedef SkDrawCommand INHERITED;
8880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
8980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
9058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkClipRegionCommand : public SkDrawCommand {
9180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
9258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkClipRegionCommand(const SkRegion& region, SkRegion::Op op);
9380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
9480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
95e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkRegion     fRegion;
9680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkRegion::Op fOp;
97e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger
98e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    typedef SkDrawCommand INHERITED;
9980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
10080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
10158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkClipRectCommand : public SkDrawCommand {
10280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
10358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkClipRectCommand(const SkRect& rect, SkRegion::Op op, bool doAA);
10480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
105096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
106e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    const SkRect& rect() const { return fRect; }
107096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkRegion::Op op() const { return fOp; }
108096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    bool doAA() const { return fDoAA; }
109096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
11080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
111e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkRect       fRect;
11280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkRegion::Op fOp;
113e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    bool         fDoAA;
114e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger
115e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    typedef SkDrawCommand INHERITED;
11680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
11780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
11858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkClipRRectCommand : public SkDrawCommand {
119d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenbergerpublic:
12058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkClipRRectCommand(const SkRRect& rrect, SkRegion::Op op, bool doAA);
121d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
12258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
123096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
124096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    const SkRRect& rrect() const { return fRRect; }
125096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkRegion::Op op() const { return fOp; }
126096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    bool doAA() const { return fDoAA; }
127096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
128d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenbergerprivate:
129e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkRRect      fRRect;
130d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger    SkRegion::Op fOp;
131e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    bool         fDoAA;
132e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger
133e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    typedef SkDrawCommand INHERITED;
134d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger};
135d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger
13658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkConcatCommand : public SkDrawCommand {
13780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
13858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkConcatCommand(const SkMatrix& matrix);
13980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
14080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
141e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkMatrix fMatrix;
142e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger
143e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    typedef SkDrawCommand INHERITED;
14480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
14580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
14658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkDrawBitmapCommand : public SkDrawCommand {
14780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
14858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkDrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top,
14958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger               const SkPaint* paint);
15080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
15158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
15280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
153e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkBitmap fBitmap;
15480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkScalar fLeft;
15580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkScalar fTop;
156e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkPaint  fPaint;
157e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkPaint* fPaintPtr;
158e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger
159e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    typedef SkDrawCommand INHERITED;
16080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
16180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
16258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkDrawBitmapMatrixCommand : public SkDrawCommand {
16380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
16458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkDrawBitmapMatrixCommand(const SkBitmap& bitmap, const SkMatrix& matrix,
16558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger                     const SkPaint* paint);
16680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
16758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
16880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
169e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkBitmap fBitmap;
170e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkMatrix fMatrix;
171e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkPaint  fPaint;
172e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkPaint* fPaintPtr;
173e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger
174e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    typedef SkDrawCommand INHERITED;
17580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
17680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
17758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkDrawBitmapNineCommand : public SkDrawCommand {
17880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
17958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,
18058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger                   const SkRect& dst, const SkPaint* paint);
18180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
18258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
18380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
184e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkBitmap fBitmap;
185e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkIRect  fCenter;
186e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkRect   fDst;
187e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkPaint  fPaint;
188e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkPaint* fPaintPtr;
189e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger
190e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    typedef SkDrawCommand INHERITED;
19180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
19280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
19358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkDrawBitmapRectCommand : public SkDrawCommand {
19480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
19558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkDrawBitmapRectCommand(const SkBitmap& bitmap, const SkRect* src,
19658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger                   const SkRect& dst, const SkPaint* paint);
19780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
19858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
199d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger
2007839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    const SkBitmap& bitmap() const { return fBitmap; }
2017839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger
202d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger    // The non-const 'paint' method allows modification of this object's
203d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger    // SkPaint. For this reason the ctor and setPaint method make a local copy.
204d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger    // The 'fPaintPtr' member acts a signal that the local SkPaint is valid
205d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger    // (since only an SkPaint* is passed into the ctor).
206d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger    const SkPaint* paint() const { return fPaintPtr; }
207d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger    SkPaint* paint() { return fPaintPtr; }
208d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger
209d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger    void setPaint(const SkPaint& paint) { fPaint = paint; fPaintPtr = &fPaint; }
210d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger
211096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    const SkRect* srcRect() const { return fSrc.isEmpty() ? NULL : &fSrc; }
212096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    const SkRect& dstRect() const { return fDst; }
213096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
2147839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    void setSrcRect(const SkRect& src) { fSrc = src; }
2157839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    void setDstRect(const SkRect& dst) { fDst = dst; }
2167839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger
21780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
218096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkBitmap fBitmap;
219e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkRect   fSrc;
220e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkRect   fDst;
221e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkPaint  fPaint;
222e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkPaint* fPaintPtr;
223096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
224096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    typedef SkDrawCommand INHERITED;
22580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
22680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
22758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkDrawDataCommand : public SkDrawCommand {
22880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
22958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkDrawDataCommand(const void* data, size_t length);
23058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    virtual ~SkDrawDataCommand() { delete [] fData; }
23180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
23280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
2337839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    char*  fData;
23480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    size_t fLength;
2357839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger
2367839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    typedef SkDrawCommand INHERITED;
23780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
23880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
23958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkBeginCommentGroupCommand : public SkDrawCommand {
240d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenbergerpublic:
24158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkBeginCommentGroupCommand(const char* description);
24258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    virtual void execute(SkCanvas* canvas) SK_OVERRIDE {
24358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        canvas->beginCommentGroup(fDescription.c_str());
24458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    };
24558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerprivate:
24658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkString fDescription;
24758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
24858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    typedef SkDrawCommand INHERITED;
24958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger};
25058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
25158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkCommentCommand : public SkDrawCommand {
25258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerpublic:
25358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkCommentCommand(const char* kywd, const char* value);
25458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    virtual void execute(SkCanvas* canvas) SK_OVERRIDE {
25558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        canvas->addComment(fKywd.c_str(), fValue.c_str());
25658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    };
25758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerprivate:
25858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkString fKywd;
25958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkString fValue;
26058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
26158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    typedef SkDrawCommand INHERITED;
26258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger};
26358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
26458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkEndCommentGroupCommand : public SkDrawCommand {
26558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerpublic:
26658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkEndCommentGroupCommand();
26758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    virtual void execute(SkCanvas* canvas) SK_OVERRIDE {
26858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        canvas->endCommentGroup();
26958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    };
27058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerprivate:
27158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    typedef SkDrawCommand INHERITED;
27258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger};
27358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
27458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkDrawOvalCommand : public SkDrawCommand {
27558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerpublic:
27658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint);
277d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
27858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
279d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenbergerprivate:
280e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkRect  fOval;
281e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkPaint fPaint;
282e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger
283e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    typedef SkDrawCommand INHERITED;
284d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger};
285d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger
28658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkDrawPaintCommand : public SkDrawCommand {
28780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
28858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkDrawPaintCommand(const SkPaint& paint);
28980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
29058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
29180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
292e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkPaint fPaint;
293e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger
294e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    typedef SkDrawCommand INHERITED;
29580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
29680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
29758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkDrawPathCommand : public SkDrawCommand {
29880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
29958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkDrawPathCommand(const SkPath& path, const SkPaint& paint);
30080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
30158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
302363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger
30380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
3047839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    SkPath   fPath;
3057839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    SkPaint  fPaint;
306096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
307096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    typedef SkDrawCommand INHERITED;
30880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
30980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
31058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkDrawPictureCommand : public SkDrawCommand {
31180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
31258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkDrawPictureCommand(SkPicture& picture);
31380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
31480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
3157839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    SkPicture fPicture;
3167839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger
3177839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    typedef SkDrawCommand INHERITED;
31880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
31980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
32058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkDrawPointsCommand : public SkDrawCommand {
32180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
32258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
323e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger               const SkPaint& paint);
32458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    virtual ~SkDrawPointsCommand() { delete [] fPts; }
32580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
32658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
32780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
32880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkCanvas::PointMode fMode;
329e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    size_t              fCount;
330e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkPoint*            fPts;
331e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkPaint             fPaint;
332e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger
333e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    typedef SkDrawCommand INHERITED;
33480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
33580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
33658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkDrawTextCommand : public SkDrawCommand {
33780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
33858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y,
3397839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger              const SkPaint& paint);
34058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    virtual ~SkDrawTextCommand() { delete [] fText; }
34180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
34280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
3437839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    char*    fText;
3447839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    size_t   fByteLength;
34580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkScalar fX;
34680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkScalar fY;
3477839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    SkPaint  fPaint;
3487839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger
3497839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    typedef SkDrawCommand INHERITED;
35080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
35180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
35258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkDrawPosTextCommand : public SkDrawCommand {
35380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
35458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[],
35558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger                         const SkPaint& paint);
35658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    virtual ~SkDrawPosTextCommand() { delete [] fPos; delete [] fText; }
35780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
35880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
3597839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    char*    fText;
3607839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    size_t   fByteLength;
361e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkPoint* fPos;
3627839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    SkPaint  fPaint;
3637839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger
3647839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    typedef SkDrawCommand INHERITED;
36580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
36680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
36758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkDrawTextOnPathCommand : public SkDrawCommand {
36880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
36958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkDrawTextOnPathCommand(const void* text, size_t byteLength, const SkPath& path,
37058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger                            const SkMatrix* matrix, const SkPaint& paint);
37158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    virtual ~SkDrawTextOnPathCommand() { delete [] fText; }
37280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
37380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
3747839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    char*    fText;
3757839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    size_t   fByteLength;
3767839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    SkPath   fPath;
3777839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    SkMatrix fMatrix;
3787839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    SkPaint  fPaint;
3797839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger
3807839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    typedef SkDrawCommand INHERITED;
38180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
38280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
38358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkDrawPosTextHCommand : public SkDrawCommand {
38480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
38558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[],
38658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger                          SkScalar constY, const SkPaint& paint);
38758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    virtual ~SkDrawPosTextHCommand() { delete [] fXpos; delete [] fText; }
38880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
38980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
390e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkScalar* fXpos;
3917839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    char*     fText;
3927839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    size_t    fByteLength;
3937839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    SkScalar  fConstY;
3947839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    SkPaint   fPaint;
395096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
396096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    typedef SkDrawCommand INHERITED;
39780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
39880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
39958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkDrawRectCommand : public SkDrawCommand {
40080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
40158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkDrawRectCommand(const SkRect& rect, const SkPaint& paint);
40280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
403096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
404096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    const SkRect& rect() const   { return fRect; }
405096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    const SkPaint& paint() const { return fPaint; }
40680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
407096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkRect  fRect;
408096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkPaint fPaint;
409096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
410096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    typedef SkDrawCommand INHERITED;
41180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
41280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
41358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkDrawRRectCommand : public SkDrawCommand {
414d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenbergerpublic:
41558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
416d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
41758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
418d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenbergerprivate:
419d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger    SkRRect fRRect;
420096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkPaint fPaint;
4217839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger
4227839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    typedef SkDrawCommand INHERITED;
423d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger};
424d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger
42558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkDrawSpriteCommand : public SkDrawCommand {
42680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
42758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkDrawSpriteCommand(const SkBitmap& bitmap, int left, int top, const SkPaint* paint);
42880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
42958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    virtual bool render(SkCanvas* canvas) const SK_OVERRIDE;
43080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
4317839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    SkBitmap fBitmap;
4327839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    int      fLeft;
4337839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    int      fTop;
4347839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    SkPaint  fPaint;
4357839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    SkPaint* fPaintPtr;
4367839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger
4377839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    typedef SkDrawCommand INHERITED;
43880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
43980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
44058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkDrawVerticesCommand : public SkDrawCommand {
44180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
44258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkDrawVerticesCommand(SkCanvas::VertexMode vmode, int vertexCount,
44358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger                          const SkPoint vertices[], const SkPoint texs[],
44458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger                          const SkColor colors[], SkXfermode* xfermode,
44558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger                          const uint16_t indices[], int indexCount,
44658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger                          const SkPaint& paint);
44758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    virtual ~SkDrawVerticesCommand();
44880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
44980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
45080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkCanvas::VertexMode fVmode;
4517839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    int         fVertexCount;
4527839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    SkPoint*    fVertices;
4537839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    SkPoint*    fTexs;
4547839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    SkColor*    fColors;
45580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkXfermode* fXfermode;
4567839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    uint16_t*   fIndices;
4577839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    int         fIndexCount;
4587839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    SkPaint     fPaint;
4597839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger
4607839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    typedef SkDrawCommand INHERITED;
46180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
46280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
46358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkRotateCommand : public SkDrawCommand {
46480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
46558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkRotateCommand(SkScalar degrees);
46680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
46780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
46880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkScalar fDegrees;
4697839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger
4707839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    typedef SkDrawCommand INHERITED;
47180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
47280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
47358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkSaveCommand : public SkDrawCommand {
47480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
47558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkSaveCommand(SkCanvas::SaveFlags flags);
47680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
477363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    virtual void trackSaveState(int* state) SK_OVERRIDE;
47880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
47980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkCanvas::SaveFlags fFlags;
480e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger
481e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    typedef SkDrawCommand INHERITED;
48280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
48380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
48458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkSaveLayerCommand : public SkDrawCommand {
48580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
48658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkSaveLayerCommand(const SkRect* bounds, const SkPaint* paint,
48758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger                       SkCanvas::SaveFlags flags);
48880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
489363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    virtual void trackSaveState(int* state) SK_OVERRIDE;
490d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger
491e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    const SkPaint* paint() const { return fPaintPtr; }
492d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger
49380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
494e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkRect              fBounds;
495e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkPaint             fPaint;
496e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    SkPaint*            fPaintPtr;
49780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkCanvas::SaveFlags fFlags;
498e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger
499e2022cc36e47b9f0d219eb5cd24be61772c28d3bDerek Sollenberger    typedef SkDrawCommand INHERITED;
50080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
50180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
50258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkScaleCommand : public SkDrawCommand {
50380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
50458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkScaleCommand(SkScalar sx, SkScalar sy);
50580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
506096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
507096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkScalar x() const { return fSx; }
508096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkScalar y() const { return fSy; }
509096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
51080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
51180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkScalar fSx;
51280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkScalar fSy;
5137839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger
5147839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    typedef SkDrawCommand INHERITED;
51580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
51680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
51758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkSetMatrixCommand : public SkDrawCommand {
51880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
51958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkSetMatrixCommand(const SkMatrix& matrix);
52080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
52180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
522096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkMatrix fMatrix;
5237839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger
5247839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    typedef SkDrawCommand INHERITED;
52580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
52680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
52758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkSkewCommand : public SkDrawCommand {
52880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
52958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkSkewCommand(SkScalar sx, SkScalar sy);
53080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
53180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
53280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkScalar fSx;
53380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkScalar fSy;
5347839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger
5357839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    typedef SkDrawCommand INHERITED;
53680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
53780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
53858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkTranslateCommand : public SkDrawCommand {
53980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
54058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkTranslateCommand(SkScalar dx, SkScalar dy);
54180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
542096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
543096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkScalar x() const { return fDx; }
544096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkScalar y() const { return fDy; }
545096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
54680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
54780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkScalar fDx;
54880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkScalar fDy;
5497839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger
5507839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    typedef SkDrawCommand INHERITED;
55180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
55280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
55380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif
554