SkDrawCommand.h revision 363e546ed626b6dbbc42f5db87b3594bc0b5944b
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"
1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkDrawCommand {
1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    /* TODO(chudy): Remove subclasses. */
1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkDrawCommand();
1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual ~SkDrawCommand();
2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual SkString toString();
2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual const char* toCString() {
2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        return GetCommandString(fDrawType);
2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    }
2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    bool isVisible() const {
2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        return fVisible;
3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    }
3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    void setVisible(bool toggle) {
3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        fVisible = toggle;
3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    }
3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkTDArray<SkString*>* Info() {return &fInfo; };
3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas)=0;
38363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    /** Does nothing by default, but used by save() and restore()-type
39363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger        subclassse to track unresolved save() calls. */
40363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    virtual void trackSaveState(int* state) { };
4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    DrawType getType() { return fDrawType; };
4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
43363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    virtual const SkBitmap* getBitmap() const { return NULL; }
44363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger
45363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    static const char* GetCommandString(DrawType type);
46363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger
4780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprotected:
4880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    DrawType fDrawType;
4980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkTDArray<SkString*> fInfo;
5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
5180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
5280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    bool fVisible;
5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
5480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
5580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass Restore : public SkDrawCommand {
5680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
5780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    Restore();
5880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
59363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    virtual void trackSaveState(int* state) SK_OVERRIDE;
6080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
6180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
6280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass Clear : public SkDrawCommand {
6380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
6480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    Clear(SkColor color);
6580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
6680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
6780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkColor fColor;
6880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
6980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
7080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass ClipPath : public SkDrawCommand {
7180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
72363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    ClipPath(const SkPath& path, SkRegion::Op op, bool doAA, SkBitmap& bitmap);
7380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
74363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    virtual const SkBitmap* getBitmap() const SK_OVERRIDE;
7580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
7680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkPath* fPath;
7780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkRegion::Op fOp;
7880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    bool fDoAA;
79363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    SkBitmap fBitmap;
8080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
8180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
8280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass ClipRegion : public SkDrawCommand {
8380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
8480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    ClipRegion(const SkRegion& region, SkRegion::Op op);
8580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
8680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
8780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkRegion* fRegion;
8880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkRegion::Op fOp;
8980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
9080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
9180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass ClipRect : public SkDrawCommand {
9280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
9380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    ClipRect(const SkRect& rect, SkRegion::Op op, bool doAA);
9480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
9580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
9680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkRect* fRect;
9780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkRegion::Op fOp;
9880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    bool fDoAA;
9980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
10080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
10180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass Concat : public SkDrawCommand {
10280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
10380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    Concat(const SkMatrix& matrix);
10480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
10580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
10680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkMatrix* fMatrix;
10780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
10880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
10980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass DrawBitmap : public SkDrawCommand {
11080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
11180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    DrawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top,
112363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger            const SkPaint* paint, SkBitmap& resizedBitmap);
11380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
114363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    virtual const SkBitmap* getBitmap() const SK_OVERRIDE;
11580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
11680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkPaint* fPaint;
11780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkBitmap* fBitmap;
11880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkScalar fLeft;
11980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkScalar fTop;
120363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    SkBitmap fResizedBitmap;
12180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
12280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
12380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass DrawBitmapMatrix : public SkDrawCommand {
12480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
12580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    DrawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& matrix,
126363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger            const SkPaint* paint, SkBitmap& resizedBitmap);
12780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
128363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    virtual const SkBitmap* getBitmap() const SK_OVERRIDE;
12980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
13080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkPaint* fPaint;
13180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkBitmap* fBitmap;
13280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkMatrix* fMatrix;
133363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    SkBitmap fResizedBitmap;
13480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
13580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
13680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass DrawBitmapNine : public SkDrawCommand {
13780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
13880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    DrawBitmapNine(const SkBitmap& bitmap, const SkIRect& center,
139363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger            const SkRect& dst, const SkPaint* paint, SkBitmap& resizedBitmap);
14080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
141363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    virtual const SkBitmap* getBitmap() const SK_OVERRIDE;
14280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
14380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkBitmap* fBitmap;
14480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkIRect* fCenter;
14580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkRect* fDst;
14680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkPaint* fPaint;
147363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    SkBitmap fResizedBitmap;
14880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
14980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
15080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass DrawBitmapRect : public SkDrawCommand {
15180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
15280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    DrawBitmapRect(const SkBitmap& bitmap, const SkRect* src,
153363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger            const SkRect& dst, const SkPaint* paint, SkBitmap& resizedBitmap);
15480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
155363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    virtual const SkBitmap* getBitmap() const SK_OVERRIDE;
15680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
15780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkRect* fSrc;
15880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkPaint* fPaint;
15980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkBitmap* fBitmap;
16080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkRect* fDst;
161363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    SkBitmap fResizedBitmap;
16280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
16380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
16480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass DrawData : public SkDrawCommand {
16580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
16680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    DrawData(const void* data, size_t length);
16780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
16880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
16980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const void* fData;
17080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    size_t fLength;
17180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
17280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
17380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass DrawPaint : public SkDrawCommand {
17480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
17580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    DrawPaint(const SkPaint& paint);
17680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
17780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
17880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkPaint* fPaint;
17980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
18080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
18180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass DrawPath : public SkDrawCommand {
18280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
183363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    DrawPath(const SkPath& path, const SkPaint& paint, SkBitmap& bitmap);
18480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
185363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    virtual const SkBitmap* getBitmap() const SK_OVERRIDE;
186363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger
18780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
18880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkPath* fPath;
18980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkPaint* fPaint;
190363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    SkBitmap fBitmap;
19180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
19280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
19380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass DrawPicture : public SkDrawCommand {
19480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
19580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    DrawPicture(SkPicture& picture);
19680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
19780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
19880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkPicture* fPicture;
19980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
20080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
20180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass DrawPoints : public SkDrawCommand {
20280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
20380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    DrawPoints(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
20480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru            const SkPaint& paint);
20580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
20680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
20780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkPoint* fPts;
20880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkCanvas::PointMode fMode;
20980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    size_t fCount;
21080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkPaint* fPaint;
21180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
21280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
21380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* TODO(chudy): DrawText is a predefined macro and was breaking something
21480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * in the windows build of the debugger.
21580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */
21680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass DrawTextC : public SkDrawCommand {
21780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
21880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    DrawTextC(const void* text, size_t byteLength, SkScalar x, SkScalar y,
21980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru            const SkPaint& paint);
22080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
22180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
22280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const void* fText;
22380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    size_t fByteLength;
22480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkScalar fX;
22580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkScalar fY;
22680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkPaint* fPaint;
22780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
22880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
22980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass DrawPosText : public SkDrawCommand {
23080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
23180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    DrawPosText(const void* text, size_t byteLength, const SkPoint pos[],
23280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru            const SkPaint& paint);
23380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
23480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
23580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkPoint* fPos;
23680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const void* fText;
23780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    size_t fByteLength;
23880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkPaint* fPaint;
23980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
24080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
24180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass DrawTextOnPath : public SkDrawCommand {
24280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
24380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    DrawTextOnPath(const void* text, size_t byteLength, const SkPath& path,
24480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru            const SkMatrix* matrix, const SkPaint& paint);
24580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
24680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
24780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkMatrix* fMatrix;
24880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const void* fText;
24980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    size_t fByteLength;
25080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkPath* fPath;
25180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkPaint* fPaint;
25280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
25380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
25480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass DrawPosTextH : public SkDrawCommand {
25580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
25680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    DrawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[],
25780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru            SkScalar constY, const SkPaint& paint);
25880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
25980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
26080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkScalar* fXpos;
26180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const void* fText;
26280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    size_t fByteLength;
26380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkScalar fConstY;
26480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkPaint* fPaint;
26580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
26680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
26780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass DrawRectC : public SkDrawCommand {
26880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
26980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    DrawRectC(const SkRect& rect, const SkPaint& paint);
27080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
27180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
27280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkRect* fRect;
27380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkPaint* fPaint;
27480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
27580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
27680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass DrawSprite : public SkDrawCommand {
27780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
278363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    DrawSprite(const SkBitmap& bitmap, int left, int top, const SkPaint* paint,
279363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger               SkBitmap& resizedBitmap);
28080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
281363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    virtual const SkBitmap* getBitmap() const SK_OVERRIDE;
28280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
28380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkPaint* fPaint;
28480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    int fLeft;
28580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    int fTop;
28680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkBitmap* fBitmap;
287363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    SkBitmap fResizedBitmap;
28880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
28980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
29080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass DrawVertices : public SkDrawCommand {
29180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
29280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    DrawVertices(SkCanvas::VertexMode vmode, int vertexCount,
29380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru            const SkPoint vertices[], const SkPoint texs[], const SkColor colors[],
29480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru            SkXfermode* xfermode, const uint16_t indices[], int indexCount,
29580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru            const SkPaint& paint);
29680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
29780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
29880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkCanvas::VertexMode fVmode;
29980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    int fVertexCount;
30080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    int fIndexCount;
30180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkPoint* fVertices;
30280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkPoint* fTexs;
30380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkColor* fColors;
30480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const uint16_t* fIndices;
30580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkXfermode* fXfermode;
30680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkPaint* fPaint;
30780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
30880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
30980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass Rotate : public SkDrawCommand {
31080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
31180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    Rotate(SkScalar degrees);
31280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
31380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
31480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkScalar fDegrees;
31580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
31680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
31780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass Save : public SkDrawCommand {
31880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
31980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    Save(SkCanvas::SaveFlags flags);
32080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
321363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    virtual void trackSaveState(int* state) SK_OVERRIDE;
32280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
32380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkCanvas::SaveFlags fFlags;
32480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
32580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
32680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SaveLayer : public SkDrawCommand {
32780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
32880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SaveLayer(const SkRect* bounds, const SkPaint* paint,
32980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru            SkCanvas::SaveFlags flags);
33080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
331363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenberger    virtual void trackSaveState(int* state) SK_OVERRIDE;
33280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
33380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkRect* fBounds;
33480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkPaint* fPaint;
33580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkCanvas::SaveFlags fFlags;
33680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
33780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
33880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass Scale : public SkDrawCommand {
33980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
34080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    Scale(SkScalar sx, SkScalar sy);
34180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
34280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
34380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkScalar fSx;
34480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkScalar fSy;
34580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
34680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
34780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SetMatrix : public SkDrawCommand {
34880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
34980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SetMatrix(const SkMatrix& matrix);
35080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
35180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
35280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkMatrix* fMatrix;
35380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
35480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
35580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass Skew : public SkDrawCommand {
35680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
35780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    Skew(SkScalar sx, SkScalar sy);
35880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
35980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
36080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkScalar fSx;
36180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkScalar fSy;
36280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
36380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
36480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass Translate : public SkDrawCommand {
36580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
36680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    Translate(SkScalar dx, SkScalar dy);
36780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
36880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
36980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkScalar fDx;
37080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkScalar fDy;
37180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
37280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
37380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif
374