1902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
2902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com/*
3902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com * Copyright 2012 Google Inc.
4902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com *
5902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com * Use of this source code is governed by a BSD-style license that can be
6902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com * found in the LICENSE file.
7902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com */
8902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
9902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#ifndef SKDRAWCOMMAND_H_
10902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#define SKDRAWCOMMAND_H_
11902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
12902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#include "SkCanvas.h"
130a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com#include "SkString.h"
14902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1586681b37bd20204e47a492119b345c01d00bc939fmalita@google.comclass SK_API SkDrawCommand {
16902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
179bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    enum OpType {
189bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kBeginCommentGroup_OpType,
19160ebb2bfa0794d72d31a786793b13413289863dfmalita        kBeginDrawPicture_OpType,
209bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kClipPath_OpType,
219bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kClipRegion_OpType,
229bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kClipRect_OpType,
239bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kClipRRect_OpType,
249bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kComment_OpType,
259bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kConcat_OpType,
269bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kDrawBitmap_OpType,
279bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kDrawBitmapNine_OpType,
289bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kDrawBitmapRect_OpType,
299bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kDrawClear_OpType,
309bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kDrawDRRect_OpType,
319bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kDrawOval_OpType,
329bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kDrawPaint_OpType,
339bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kDrawPatch_OpType,
349bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kDrawPath_OpType,
359bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kDrawPoints_OpType,
369bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kDrawPosText_OpType,
379bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kDrawPosTextH_OpType,
389bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kDrawRect_OpType,
399bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kDrawRRect_OpType,
409bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kDrawSprite_OpType,
419bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kDrawText_OpType,
429bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kDrawTextBlob_OpType,
439bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kDrawTextOnPath_OpType,
449bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kDrawVertices_OpType,
459bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kEndCommentGroup_OpType,
46160ebb2bfa0794d72d31a786793b13413289863dfmalita        kEndDrawPicture_OpType,
479bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kRestore_OpType,
489bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kSave_OpType,
499bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kSaveLayer_OpType,
509bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kSetMatrix_OpType,
519bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips
529bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        kLast_OpType = kSetMatrix_OpType
539bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    };
549bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips
559bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    static const int kOpTypeCount = kLast_OpType + 1;
5672942b8eb56f17e9303380d4e8492f66e9330578robertphillips
579bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    SkDrawCommand(OpType opType);
58902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
59902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    virtual ~SkDrawCommand();
60902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
618c89c528f31dff25bce74aabe28abe23a772cb1efmalita    virtual SkString toString() const;
62902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
638c89c528f31dff25bce74aabe28abe23a772cb1efmalita    virtual const char* toCString() const {
649bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        return GetCommandString(fOpType);
65902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
66902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
670b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com    bool isVisible() const {
680b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com        return fVisible;
690b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com    }
700b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com
710b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com    void setVisible(bool toggle) {
720b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com        fVisible = toggle;
730b5bbb0f82e022c8acfbcb6312f0ed18e1ab90cechudy@google.com    }
74902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
758c89c528f31dff25bce74aabe28abe23a772cb1efmalita    const SkTDArray<SkString*>* Info() const { return &fInfo; }
768c89c528f31dff25bce74aabe28abe23a772cb1efmalita    virtual void execute(SkCanvas*) const = 0;
778c89c528f31dff25bce74aabe28abe23a772cb1efmalita    virtual void vizExecute(SkCanvas*) const {}
7870171683e6977af7472f0f465bd81852d0644dddrobertphillips
798c89c528f31dff25bce74aabe28abe23a772cb1efmalita    virtual void setUserMatrix(const SkMatrix&) {}
8070171683e6977af7472f0f465bd81852d0644dddrobertphillips
81f0f14113431ace669f278fdd97b50950f2cf4c80mtklein    // The next "active" system is only used by save, saveLayer, and restore.
82f0f14113431ace669f278fdd97b50950f2cf4c80mtklein    // It is used to determine which saveLayers are currently active (at a
83768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org    // given point in the rendering).
8457f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    //      saves just return a kPushLayer action but don't track active state
8557f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    //      restores just return a kPopLayer action
861643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org    //      saveLayers return kPushLayer but also track the active state
87768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org    enum Action {
88768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org        kNone_Action,
891643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org        kPopLayer_Action,
901643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org        kPushLayer_Action,
91768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org    };
92768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org    virtual Action action() const { return kNone_Action; }
93768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org    virtual void setActive(bool active) {}
94768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org    virtual bool active() const { return false; }
95768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org
969bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    OpType getType() const { return fOpType; }
97902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
986ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    virtual bool render(SkCanvas* canvas) const { return false; }
996dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
1009bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    static const char* GetCommandString(OpType type);
1018a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com
102902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprotected:
10397cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com    SkTDArray<SkString*> fInfo;
104902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
105902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
1069bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    OpType fOpType;
10757f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    bool   fVisible;
108902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
109902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1107a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgclass SkRestoreCommand : public SkDrawCommand {
111902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
1127a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    SkRestoreCommand();
11336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override;
11436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    Action action() const override { return kPopLayer_Action; }
11524bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com
11624bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.comprivate:
11724bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    typedef SkDrawCommand INHERITED;
118902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
119902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1207a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgclass SkClearCommand : public SkDrawCommand {
121902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
1227a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    SkClearCommand(SkColor color);
12336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override;
124902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
125902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkColor fColor;
12624bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com
12724bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    typedef SkDrawCommand INHERITED;
128902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
129902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1307a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgclass SkClipPathCommand : public SkDrawCommand {
131902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
1327a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    SkClipPathCommand(const SkPath& path, SkRegion::Op op, bool doAA);
13336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override;
13436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool render(SkCanvas* canvas) const override;
135902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
13624bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    SkPath       fPath;
137902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkRegion::Op fOp;
13824bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    bool         fDoAA;
13991217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com
14091217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    typedef SkDrawCommand INHERITED;
141902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
142902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1437a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgclass SkClipRegionCommand : public SkDrawCommand {
144902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
1457a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    SkClipRegionCommand(const SkRegion& region, SkRegion::Op op);
14636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override;
147902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
14824bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    SkRegion     fRegion;
149902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkRegion::Op fOp;
15024bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com
15124bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    typedef SkDrawCommand INHERITED;
152902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
153902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1547a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgclass SkClipRectCommand : public SkDrawCommand {
155902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
1567a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    SkClipRectCommand(const SkRect& rect, SkRegion::Op op, bool doAA);
15736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override;
158febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com
159a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    const SkRect& rect() const { return fRect; }
160febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com    SkRegion::Op op() const { return fOp; }
161febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com    bool doAA() const { return fDoAA; }
162febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com
163902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
164a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    SkRect       fRect;
165902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkRegion::Op fOp;
166a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    bool         fDoAA;
167a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com
168a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    typedef SkDrawCommand INHERITED;
169902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
170902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1717a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgclass SkClipRRectCommand : public SkDrawCommand {
17267baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.compublic:
1737a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    SkClipRRectCommand(const SkRRect& rrect, SkRegion::Op op, bool doAA);
17436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override;
17536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool render(SkCanvas* canvas) const override;
176febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com
177febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com    const SkRRect& rrect() const { return fRRect; }
178febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com    SkRegion::Op op() const { return fOp; }
179febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com    bool doAA() const { return fDoAA; }
180febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com
18167baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.comprivate:
182a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    SkRRect      fRRect;
18367baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com    SkRegion::Op fOp;
184a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    bool         fDoAA;
185a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com
186a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    typedef SkDrawCommand INHERITED;
18767baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com};
18867baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
1897a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgclass SkConcatCommand : public SkDrawCommand {
190902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
1917a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    SkConcatCommand(const SkMatrix& matrix);
19236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override;
193902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
19424bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    SkMatrix fMatrix;
19524bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com
19624bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    typedef SkDrawCommand INHERITED;
197902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
198902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1997a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgclass SkDrawBitmapCommand : public SkDrawCommand {
200902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
2017a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    SkDrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top,
20257f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org                        const SkPaint* paint);
20336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override;
20436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool render(SkCanvas* canvas) const override;
205902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
20624bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    SkBitmap fBitmap;
207902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkScalar fLeft;
208902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkScalar fTop;
20924bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    SkPaint  fPaint;
21024bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    SkPaint* fPaintPtr;
21124bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com
21224bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    typedef SkDrawCommand INHERITED;
213902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
214902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
2157a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgclass SkDrawBitmapNineCommand : public SkDrawCommand {
216902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
2177a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,
21857f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org                            const SkRect& dst, const SkPaint* paint);
21936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override;
22036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool render(SkCanvas* canvas) const override;
221902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
22224bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    SkBitmap fBitmap;
22324bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    SkIRect  fCenter;
22424bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    SkRect   fDst;
22524bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    SkPaint  fPaint;
22624bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    SkPaint* fPaintPtr;
22724bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com
22824bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    typedef SkDrawCommand INHERITED;
229902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
230902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
2317a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgclass SkDrawBitmapRectCommand : public SkDrawCommand {
232902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
2337a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    SkDrawBitmapRectCommand(const SkBitmap& bitmap, const SkRect* src,
234eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org                            const SkRect& dst, const SkPaint* paint,
235eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org                            SkCanvas::DrawBitmapRectFlags flags);
23636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override;
23736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool render(SkCanvas* canvas) const override;
2383b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com
239c3410b8cbbf63ac7968262c25c996bdbaab20588robertphillips@google.com    const SkBitmap& bitmap() const { return fBitmap; }
240c3410b8cbbf63ac7968262c25c996bdbaab20588robertphillips@google.com
2413b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    // The non-const 'paint' method allows modification of this object's
2423b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    // SkPaint. For this reason the ctor and setPaint method make a local copy.
2433b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    // The 'fPaintPtr' member acts a signal that the local SkPaint is valid
2443b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    // (since only an SkPaint* is passed into the ctor).
2453b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    const SkPaint* paint() const { return fPaintPtr; }
2463b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    SkPaint* paint() { return fPaintPtr; }
2473b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com
2483b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    void setPaint(const SkPaint& paint) { fPaint = paint; fPaintPtr = &fPaint; }
2493b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com
25091217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    const SkRect* srcRect() const { return fSrc.isEmpty() ? NULL : &fSrc; }
251c3410b8cbbf63ac7968262c25c996bdbaab20588robertphillips@google.com    void setSrcRect(const SkRect& src) { fSrc = src; }
252eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org
253eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org    const SkRect& dstRect() const { return fDst; }
254c3410b8cbbf63ac7968262c25c996bdbaab20588robertphillips@google.com    void setDstRect(const SkRect& dst) { fDst = dst; }
255c3410b8cbbf63ac7968262c25c996bdbaab20588robertphillips@google.com
256eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org    SkCanvas::DrawBitmapRectFlags flags() const { return fFlags; }
257eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org    void setFlags(SkCanvas::DrawBitmapRectFlags flags) { fFlags = flags; }
258eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org
259902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
260eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org    SkBitmap                      fBitmap;
261eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org    SkRect                        fSrc;
262eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org    SkRect                        fDst;
263eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org    SkPaint                       fPaint;
264eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org    SkPaint*                      fPaintPtr;
265eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org    SkCanvas::DrawBitmapRectFlags fFlags;
26691217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com
26791217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    typedef SkDrawCommand INHERITED;
268902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
269902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
2707a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgclass SkBeginCommentGroupCommand : public SkDrawCommand {
2710a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.compublic:
2727a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    SkBeginCommentGroupCommand(const char* description);
27336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override {
2740a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com        canvas->beginCommentGroup(fDescription.c_str());
2750a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    };
2760a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.comprivate:
2770a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    SkString fDescription;
2780a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
2790a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    typedef SkDrawCommand INHERITED;
2800a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com};
2810a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
2827a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgclass SkCommentCommand : public SkDrawCommand {
2830a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.compublic:
2847a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    SkCommentCommand(const char* kywd, const char* value);
28536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override {
2860a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com        canvas->addComment(fKywd.c_str(), fValue.c_str());
2870a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    };
2880a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.comprivate:
2890a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    SkString fKywd;
2900a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    SkString fValue;
2910a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
2920a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    typedef SkDrawCommand INHERITED;
2930a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com};
2940a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
2957a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgclass SkEndCommentGroupCommand : public SkDrawCommand {
2960a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.compublic:
2977a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    SkEndCommentGroupCommand();
29836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override {
2990a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com        canvas->endCommentGroup();
3000a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    };
3010a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.comprivate:
3020a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    typedef SkDrawCommand INHERITED;
3030a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com};
3040a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
3057a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgclass SkDrawOvalCommand : public SkDrawCommand {
30667baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.compublic:
3077a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint);
30836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override;
30936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool render(SkCanvas* canvas) const override;
31067baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.comprivate:
311a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    SkRect  fOval;
312a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    SkPaint fPaint;
313a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com
314a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    typedef SkDrawCommand INHERITED;
31567baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com};
31667baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
3177a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgclass SkDrawPaintCommand : public SkDrawCommand {
318902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
3197a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    SkDrawPaintCommand(const SkPaint& paint);
32036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override;
32136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool render(SkCanvas* canvas) const override;
322902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
323a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    SkPaint fPaint;
324a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com
325a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    typedef SkDrawCommand INHERITED;
326902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
327902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
3287a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgclass SkDrawPathCommand : public SkDrawCommand {
329902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
3307a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    SkDrawPathCommand(const SkPath& path, const SkPaint& paint);
33136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override;
33236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool render(SkCanvas* canvas) const override;
3336dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
334902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
3350df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    SkPath   fPath;
3360df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    SkPaint  fPaint;
33791217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com
33891217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    typedef SkDrawCommand INHERITED;
339902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
340902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
341160ebb2bfa0794d72d31a786793b13413289863dfmalitaclass SkBeginDrawPictureCommand : public SkDrawCommand {
342902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
343160ebb2bfa0794d72d31a786793b13413289863dfmalita    SkBeginDrawPictureCommand(const SkPicture* picture,
344160ebb2bfa0794d72d31a786793b13413289863dfmalita                              const SkMatrix* matrix,
345160ebb2bfa0794d72d31a786793b13413289863dfmalita                              const SkPaint* paint);
346160ebb2bfa0794d72d31a786793b13413289863dfmalita
34736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override;
34836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool render(SkCanvas* canvas) const override;
349e898e9c65eb2f10e53c459349b174551b3957545commit-bot@chromium.org
350902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
3519b14f26d0f3a974f3dd626c8354e1db1cfcd322frobertphillips    SkAutoTUnref<const SkPicture> fPicture;
352160ebb2bfa0794d72d31a786793b13413289863dfmalita    SkTLazy<SkMatrix>             fMatrix;
353160ebb2bfa0794d72d31a786793b13413289863dfmalita    SkTLazy<SkPaint>              fPaint;
354160ebb2bfa0794d72d31a786793b13413289863dfmalita
355160ebb2bfa0794d72d31a786793b13413289863dfmalita    typedef SkDrawCommand INHERITED;
356160ebb2bfa0794d72d31a786793b13413289863dfmalita};
357160ebb2bfa0794d72d31a786793b13413289863dfmalita
358160ebb2bfa0794d72d31a786793b13413289863dfmalitaclass SkEndDrawPictureCommand : public SkDrawCommand {
359160ebb2bfa0794d72d31a786793b13413289863dfmalitapublic:
360160ebb2bfa0794d72d31a786793b13413289863dfmalita    SkEndDrawPictureCommand(bool restore);
361160ebb2bfa0794d72d31a786793b13413289863dfmalita
362160ebb2bfa0794d72d31a786793b13413289863dfmalita    void execute(SkCanvas* canvas) const override;
363160ebb2bfa0794d72d31a786793b13413289863dfmalita
364160ebb2bfa0794d72d31a786793b13413289863dfmalitaprivate:
365160ebb2bfa0794d72d31a786793b13413289863dfmalita    bool fRestore;
3660df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com
3670df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    typedef SkDrawCommand INHERITED;
368902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
369902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
3707a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgclass SkDrawPointsCommand : public SkDrawCommand {
371902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
3727a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count, const SkPoint pts[],
37357f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org                        const SkPaint& paint);
3747a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    virtual ~SkDrawPointsCommand() { delete [] fPts; }
37536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override;
37636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool render(SkCanvas* canvas) const override;
377902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
378902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkCanvas::PointMode fMode;
379a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    size_t              fCount;
380a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    SkPoint*            fPts;
381a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    SkPaint             fPaint;
382a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com
383a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    typedef SkDrawCommand INHERITED;
384902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
385902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
3867a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgclass SkDrawTextCommand : public SkDrawCommand {
387902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
3887a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y,
38957f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org                      const SkPaint& paint);
3907a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    virtual ~SkDrawTextCommand() { delete [] fText; }
39136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override;
392902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
39377279cbf9bfa1732b8b4b9437a4a857c6fc18b70robertphillips@google.com    char*    fText;
3940df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    size_t   fByteLength;
395902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkScalar fX;
396902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkScalar fY;
3970df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    SkPaint  fPaint;
3980df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com
3990df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    typedef SkDrawCommand INHERITED;
400902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
401902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
4027a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgclass SkDrawPosTextCommand : public SkDrawCommand {
403902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
4047a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[],
4057a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org                         const SkPaint& paint);
4067a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    virtual ~SkDrawPosTextCommand() { delete [] fPos; delete [] fText; }
40736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override;
408902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
4090df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    char*    fText;
4100df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    size_t   fByteLength;
411a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    SkPoint* fPos;
4120df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    SkPaint  fPaint;
4130df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com
4140df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    typedef SkDrawCommand INHERITED;
415902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
416902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
4177a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgclass SkDrawTextOnPathCommand : public SkDrawCommand {
418902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
4197a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    SkDrawTextOnPathCommand(const void* text, size_t byteLength, const SkPath& path,
4207a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org                            const SkMatrix* matrix, const SkPaint& paint);
4217a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    virtual ~SkDrawTextOnPathCommand() { delete [] fText; }
42236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override;
423902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
42477279cbf9bfa1732b8b4b9437a4a857c6fc18b70robertphillips@google.com    char*    fText;
4250df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    size_t   fByteLength;
4260df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    SkPath   fPath;
4270df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    SkMatrix fMatrix;
4280df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    SkPaint  fPaint;
4290df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com
4300df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    typedef SkDrawCommand INHERITED;
431902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
432902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
4337a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgclass SkDrawPosTextHCommand : public SkDrawCommand {
434902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
4357a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[],
4367a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org                          SkScalar constY, const SkPaint& paint);
4377a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    virtual ~SkDrawPosTextHCommand() { delete [] fXpos; delete [] fText; }
43836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override;
439902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
440a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    SkScalar* fXpos;
4410df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    char*     fText;
4420df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    size_t    fByteLength;
4430df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    SkScalar  fConstY;
4440df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    SkPaint   fPaint;
44591217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com
44691217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    typedef SkDrawCommand INHERITED;
447902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
448902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
449b7425173f96e93b090787e2386ba5f022b6c2869fmalitaclass SkDrawTextBlobCommand : public SkDrawCommand {
450b7425173f96e93b090787e2386ba5f022b6c2869fmalitapublic:
451b7425173f96e93b090787e2386ba5f022b6c2869fmalita    SkDrawTextBlobCommand(const SkTextBlob* blob, SkScalar x, SkScalar y, const SkPaint& paint);
452b7425173f96e93b090787e2386ba5f022b6c2869fmalita
45336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override;
45436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool render(SkCanvas* canvas) const override;
455b7425173f96e93b090787e2386ba5f022b6c2869fmalita
456b7425173f96e93b090787e2386ba5f022b6c2869fmalitaprivate:
457b7425173f96e93b090787e2386ba5f022b6c2869fmalita    SkAutoTUnref<const SkTextBlob> fBlob;
458b7425173f96e93b090787e2386ba5f022b6c2869fmalita    SkScalar                       fXPos;
459b7425173f96e93b090787e2386ba5f022b6c2869fmalita    SkScalar                       fYPos;
460b7425173f96e93b090787e2386ba5f022b6c2869fmalita    SkPaint                        fPaint;
461b7425173f96e93b090787e2386ba5f022b6c2869fmalita
462b7425173f96e93b090787e2386ba5f022b6c2869fmalita    typedef SkDrawCommand INHERITED;
463b7425173f96e93b090787e2386ba5f022b6c2869fmalita};
464b7425173f96e93b090787e2386ba5f022b6c2869fmalita
4659bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillipsclass SkDrawPatchCommand : public SkDrawCommand {
4669bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillipspublic:
4679bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    SkDrawPatchCommand(const SkPoint cubics[12], const SkColor colors[4],
4689bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips                       const SkPoint texCoords[4], SkXfermode* xmode,
4699bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips                       const SkPaint& paint);
47036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override;
4719bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips
4729bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillipsprivate:
4739bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    SkPoint fCubics[12];
4749bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    SkColor fColors[4];
4759bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    SkPoint fTexCoords[4];
4769bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    SkAutoTUnref<SkXfermode> fXfermode;
4779bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    SkPaint fPaint;
4789bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips
4799bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    typedef SkDrawCommand INHERITED;
4809bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips};
4819bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips
4829bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips
4837a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgclass SkDrawRectCommand : public SkDrawCommand {
484902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
4857a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    SkDrawRectCommand(const SkRect& rect, const SkPaint& paint);
48636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override;
487febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com
48891217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    const SkRect& rect() const   { return fRect; }
48991217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    const SkPaint& paint() const { return fPaint; }
490902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
49191217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    SkRect  fRect;
49291217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    SkPaint fPaint;
49391217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com
49491217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    typedef SkDrawCommand INHERITED;
495902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
496902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
4977a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgclass SkDrawRRectCommand : public SkDrawCommand {
49867baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.compublic:
4997a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint);
50036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override;
50136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool render(SkCanvas* canvas) const override;
50267baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.comprivate:
50367baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com    SkRRect fRRect;
504febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com    SkPaint fPaint;
5050df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com
5060df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    typedef SkDrawCommand INHERITED;
50767baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com};
50867baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
5093d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.orgclass SkDrawDRRectCommand : public SkDrawCommand {
5103d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.orgpublic:
5113d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    SkDrawDRRectCommand(const SkRRect& outer, const SkRRect& inner,
5123d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org                        const SkPaint& paint);
51336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override;
51436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool render(SkCanvas* canvas) const override;
5153d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.orgprivate:
5163d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    SkRRect fOuter;
5173d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    SkRRect fInner;
5183d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    SkPaint fPaint;
5193d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org
5203d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    typedef SkDrawCommand INHERITED;
5213d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org};
5223d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org
5237a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgclass SkDrawSpriteCommand : public SkDrawCommand {
524902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
5257a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    SkDrawSpriteCommand(const SkBitmap& bitmap, int left, int top, const SkPaint* paint);
52636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override;
52736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool render(SkCanvas* canvas) const override;
528902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
5290df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    SkBitmap fBitmap;
5300df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    int      fLeft;
5310df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    int      fTop;
5320df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    SkPaint  fPaint;
5330df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    SkPaint* fPaintPtr;
5340df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com
5350df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    typedef SkDrawCommand INHERITED;
536902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
537902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
5387a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgclass SkDrawVerticesCommand : public SkDrawCommand {
539902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
5407a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    SkDrawVerticesCommand(SkCanvas::VertexMode vmode, int vertexCount,
5417a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org                          const SkPoint vertices[], const SkPoint texs[],
5427a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org                          const SkColor colors[], SkXfermode* xfermode,
5437a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org                          const uint16_t indices[], int indexCount,
5447a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org                          const SkPaint& paint);
5457a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    virtual ~SkDrawVerticesCommand();
54636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override;
547902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
548902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkCanvas::VertexMode fVmode;
5490df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    int         fVertexCount;
5500df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    SkPoint*    fVertices;
5510df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    SkPoint*    fTexs;
5520df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    SkColor*    fColors;
553902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkXfermode* fXfermode;
5540df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    uint16_t*   fIndices;
5550df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    int         fIndexCount;
5560df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    SkPaint     fPaint;
5570df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com
5580df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    typedef SkDrawCommand INHERITED;
559902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
560902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
5617a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgclass SkSaveCommand : public SkDrawCommand {
562902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
5635f6102d07982043542343ff0a6c67b1319ac9fc7Florin Malita    SkSaveCommand();
56436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override;
56536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    Action action() const override { return kPushLayer_Action; }
566902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
56724bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    typedef SkDrawCommand INHERITED;
568902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
569902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
5707a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgclass SkSaveLayerCommand : public SkDrawCommand {
571902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
5727a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    SkSaveLayerCommand(const SkRect* bounds, const SkPaint* paint,
5737a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org                       SkCanvas::SaveFlags flags);
57436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override;
57536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void vizExecute(SkCanvas* canvas) const override;
57636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    Action action() const override{ return kPushLayer_Action; }
57736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void setActive(bool active) override { fActive = active; }
57836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool active() const override { return fActive; }
5793b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com
58024bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    const SkPaint* paint() const { return fPaintPtr; }
5813b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com
582902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
58324bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    SkRect              fBounds;
58424bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    SkPaint             fPaint;
58524bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    SkPaint*            fPaintPtr;
586902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkCanvas::SaveFlags fFlags;
58724bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com
588768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org    bool                fActive;
589768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org
59024bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    typedef SkDrawCommand INHERITED;
591902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
592902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
5937a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgclass SkSetMatrixCommand : public SkDrawCommand {
594902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.compublic:
5957a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org    SkSetMatrixCommand(const SkMatrix& matrix);
59636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void setUserMatrix(const SkMatrix&) override;
59736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void execute(SkCanvas* canvas) const override;
598902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comprivate:
59970171683e6977af7472f0f465bd81852d0644dddrobertphillips    SkMatrix fUserMatrix;
600b94b1e781cb51a616e98dafdfa9a6cb596c871e6robertphillips@google.com    SkMatrix fMatrix;
6010df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com
6020df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    typedef SkDrawCommand INHERITED;
603902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com};
604902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
605902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#endif
606