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
10902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#include "SkDrawCommand.h"
11902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#include "SkObjectParser.h"
12902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
13902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com// TODO(chudy): Refactor into non subclass model.
14902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
15a5d3e77420621c912383c3b22e542d9413d68278skia.committer@gmail.comSkDrawCommand::SkDrawCommand(DrawType type)
160a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    : fDrawType(type)
1757f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    , fOffset(0)
180a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    , fVisible(true) {
190a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com}
200a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
21902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comSkDrawCommand::SkDrawCommand() {
2257f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    fOffset = 0;
23902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    fVisible = true;
24902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
25902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
26902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comSkDrawCommand::~SkDrawCommand() {
2797cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com    fInfo.deleteAll();
28902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
29902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
30902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comconst char* SkDrawCommand::GetCommandString(DrawType type) {
31902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    switch (type) {
32902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        case UNUSED: SkDEBUGFAIL("DrawType UNUSED\n"); break;
33902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        case DRAW_CLEAR: return "Clear";
34902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        case CLIP_PATH: return "Clip Path";
35902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        case CLIP_REGION: return "Clip Region";
36902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        case CLIP_RECT: return "Clip Rect";
3767baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com        case CLIP_RRECT: return "Clip RRect";
38902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        case CONCAT: return "Concat";
39902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        case DRAW_BITMAP: return "Draw Bitmap";
40902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        case DRAW_BITMAP_MATRIX: return "Draw Bitmap Matrix";
41902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        case DRAW_BITMAP_NINE: return "Draw Bitmap Nine";
4284d320e258bb99ab7b5435f9954d3fbdd45e90f9robertphillips@google.com        case DRAW_BITMAP_RECT_TO_RECT: return "Draw Bitmap Rect";
43902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        case DRAW_DATA: return "Draw Data";
4467baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com        case DRAW_OVAL: return "Draw Oval";
45902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        case DRAW_PAINT: return "Draw Paint";
46902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        case DRAW_PATH: return "Draw Path";
47902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        case DRAW_PICTURE: return "Draw Picture";
48902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        case DRAW_POINTS: return "Draw Points";
49902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        case DRAW_POS_TEXT: return "Draw Pos Text";
50902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        case DRAW_POS_TEXT_H: return "Draw Pos Text H";
51902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        case DRAW_RECT: return "Draw Rect";
5267baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com        case DRAW_RRECT: return "Draw RRect";
53902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        case DRAW_SPRITE: return "Draw Sprite";
54902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        case DRAW_TEXT: return "Draw Text";
55902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        case DRAW_TEXT_ON_PATH: return "Draw Text On Path";
56902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        case DRAW_VERTICES: return "Draw Vertices";
57902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        case RESTORE: return "Restore";
58902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        case ROTATE: return "Rotate";
59902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        case SAVE: return "Save";
60902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        case SAVE_LAYER: return "Save Layer";
61902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        case SCALE: return "Scale";
62902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        case SET_MATRIX: return "Set Matrix";
63902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        case SKEW: return "Skew";
64902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        case TRANSLATE: return "Translate";
65e4ce5b82627d7ef7cab34b808ff88dc208aef7bcrobertphillips@google.com        case NOOP: return "NoOp";
660a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com        case BEGIN_COMMENT_GROUP: return "BeginCommentGroup";
670a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com        case COMMENT: return "Comment";
680a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com        case END_COMMENT_GROUP: return "EndCommentGroup";
693d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org        case DRAW_DRRECT: return "Draw DRRect";
70210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.org        case PUSH_CULL: return "PushCull";
71210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.org        case POP_CULL: return "PopCull";
72902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        default:
73902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com            SkDebugf("DrawType error 0x%08x\n", type);
74902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com            SkASSERT(0);
75902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com            break;
76902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
77902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkDEBUGFAIL("DrawType UNUSED\n");
78902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    return NULL;
79902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
80902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
8197cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.comSkString SkDrawCommand::toString() {
8297cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com    return SkString(GetCommandString(fDrawType));
83902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
84902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
8557f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgSkClearCommand::SkClearCommand(SkColor color) : INHERITED(DRAW_CLEAR) {
8624bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fColor = color;
8724bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fInfo.push(SkObjectParser::CustomTextToString("No Parameters"));
88902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
89902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
907a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkClearCommand::execute(SkCanvas* canvas) {
9124bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    canvas->clear(fColor);
92902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
93902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
946ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.comnamespace {
956ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
966ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.comvoid xlate_and_scale_to_bounds(SkCanvas* canvas, const SkRect& bounds) {
976ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    const SkISize& size = canvas->getDeviceSize();
986ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
996ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    static const SkScalar kInsetFrac = 0.9f; // Leave a border around object
1006ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1016ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->translate(size.fWidth/2.0f, size.fHeight/2.0f);
1026ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    if (bounds.width() > bounds.height()) {
1036ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com        canvas->scale(SkDoubleToScalar((kInsetFrac*size.fWidth)/bounds.width()),
1046ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com                      SkDoubleToScalar((kInsetFrac*size.fHeight)/bounds.width()));
1056ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    } else {
1066ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com        canvas->scale(SkDoubleToScalar((kInsetFrac*size.fWidth)/bounds.height()),
1076ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com                      SkDoubleToScalar((kInsetFrac*size.fHeight)/bounds.height()));
1086ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    }
1096ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->translate(-bounds.centerX(), -bounds.centerY());
1106ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com}
111a009083bd10353b91903cab84362b0e744d3b3b7skia.committer@gmail.com
1126ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1136ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.comvoid render_path(SkCanvas* canvas, const SkPath& path) {
1146ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->clear(0xFFFFFFFF);
1156ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->save();
1166ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1176ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    const SkRect& bounds = path.getBounds();
1186ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1196ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    xlate_and_scale_to_bounds(canvas, bounds);
1206ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1216ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    SkPaint p;
1226ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    p.setColor(SK_ColorBLACK);
1236ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    p.setStyle(SkPaint::kStroke_Style);
1246ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1256ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->drawPath(path, p);
1266ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->restore();
1276ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com}
1286ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1296ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.comvoid render_bitmap(SkCanvas* canvas, const SkBitmap& input, const SkRect* srcRect = NULL) {
1306ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    const SkISize& size = canvas->getDeviceSize();
1316ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1326ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    SkScalar xScale = SkIntToScalar(size.fWidth-2) / input.width();
1336ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    SkScalar yScale = SkIntToScalar(size.fHeight-2) / input.height();
1346ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1356ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    if (input.width() > input.height()) {
1366ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com        yScale *= input.height() / (float) input.width();
1376ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    } else {
1386ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com        xScale *= input.width() / (float) input.height();
1396ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    }
1406ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1416ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    SkRect dst = SkRect::MakeXYWH(SK_Scalar1, SK_Scalar1,
1426ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com                                  xScale * input.width(),
1436ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com                                  yScale * input.height());
144a009083bd10353b91903cab84362b0e744d3b3b7skia.committer@gmail.com
1456ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->clear(0xFFFFFFFF);
1466ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->drawBitmapRect(input, NULL, dst);
1476ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1486ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    if (NULL != srcRect) {
1496ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com        SkRect r = SkRect::MakeLTRB(srcRect->fLeft * xScale + SK_Scalar1,
1506ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com                                    srcRect->fTop * yScale + SK_Scalar1,
1516ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com                                    srcRect->fRight * xScale + SK_Scalar1,
1526ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com                                    srcRect->fBottom * yScale + SK_Scalar1);
1536ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com        SkPaint p;
1546ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com        p.setColor(SK_ColorRED);
1556ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com        p.setStyle(SkPaint::kStroke_Style);
1566ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1576ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com        canvas->drawRect(r, p);
1586ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    }
1596ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com}
1606ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1616ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.comvoid render_rrect(SkCanvas* canvas, const SkRRect& rrect) {
1626ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->clear(0xFFFFFFFF);
1636ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->save();
1646ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1656ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    const SkRect& bounds = rrect.getBounds();
1666ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1676ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    xlate_and_scale_to_bounds(canvas, bounds);
1686ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1696ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    SkPaint p;
1706ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    p.setColor(SK_ColorBLACK);
1716ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    p.setStyle(SkPaint::kStroke_Style);
1726ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1736ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->drawRRect(rrect, p);
1746ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->restore();
1756ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com}
176a009083bd10353b91903cab84362b0e744d3b3b7skia.committer@gmail.com
1773d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.orgvoid render_drrect(SkCanvas* canvas, const SkRRect& outer, const SkRRect& inner) {
1783d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    canvas->clear(0xFFFFFFFF);
1793d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    canvas->save();
1803d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org
1813d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    const SkRect& bounds = outer.getBounds();
1823d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org
1833d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    xlate_and_scale_to_bounds(canvas, bounds);
1843d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org
1853d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    SkPaint p;
1863d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    p.setColor(SK_ColorBLACK);
1873d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    p.setStyle(SkPaint::kStroke_Style);
1883d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org
1893d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    canvas->drawDRRect(outer, inner, p);
1903d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    canvas->restore();
1913d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org}
1923d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org
1936ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com};
1946ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1956ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
19657f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgSkClipPathCommand::SkClipPathCommand(const SkPath& path, SkRegion::Op op, bool doAA)
19757f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(CLIP_PATH) {
19891217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fPath = path;
19991217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fOp = op;
20091217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fDoAA = doAA;
201902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
20291217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fInfo.push(SkObjectParser::PathToString(path));
20391217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fInfo.push(SkObjectParser::RegionOpToString(op));
20491217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fInfo.push(SkObjectParser::BoolToString(doAA));
205902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
206902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
2077a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkClipPathCommand::execute(SkCanvas* canvas) {
20891217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    canvas->clipPath(fPath, fOp, fDoAA);
209902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
210902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
2117a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgbool SkClipPathCommand::render(SkCanvas* canvas) const {
2126ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    render_path(canvas, fPath);
2136ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    return true;
2146dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com}
2156dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
216db35dab49e0e6bf16ccad5052bf6e6826daad27dskia.committer@gmail.comSkClipRegionCommand::SkClipRegionCommand(const SkRegion& region, SkRegion::Op op)
21757f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(CLIP_REGION) {
21824bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fRegion = region;
21924bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fOp = op;
220902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
22124bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fInfo.push(SkObjectParser::RegionToString(region));
22224bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fInfo.push(SkObjectParser::RegionOpToString(op));
223902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
224902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
2257a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkClipRegionCommand::execute(SkCanvas* canvas) {
22624bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    canvas->clipRegion(fRegion, fOp);
227902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
228902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
22957f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgSkClipRectCommand::SkClipRectCommand(const SkRect& rect, SkRegion::Op op, bool doAA)
23057f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(CLIP_RECT) {
231a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fRect = rect;
232a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fOp = op;
233a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fDoAA = doAA;
234902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
235a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::RectToString(rect));
236a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::RegionOpToString(op));
237a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::BoolToString(doAA));
238902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
239902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
2407a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkClipRectCommand::execute(SkCanvas* canvas) {
241a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    canvas->clipRect(fRect, fOp, fDoAA);
242902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
243902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
244db35dab49e0e6bf16ccad5052bf6e6826daad27dskia.committer@gmail.comSkClipRRectCommand::SkClipRRectCommand(const SkRRect& rrect, SkRegion::Op op, bool doAA)
24557f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(CLIP_RRECT) {
246a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fRRect = rrect;
247a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fOp = op;
248a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fDoAA = doAA;
24967baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
250a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::RRectToString(rrect));
251a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::RegionOpToString(op));
252a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::BoolToString(doAA));
25367baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com}
25467baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
2557a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkClipRRectCommand::execute(SkCanvas* canvas) {
256a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    canvas->clipRRect(fRRect, fOp, fDoAA);
25767baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com}
25867baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
2597a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgbool SkClipRRectCommand::render(SkCanvas* canvas) const {
2606ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    render_rrect(canvas, fRRect);
2616ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    return true;
2626ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com}
2636ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
26457f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgSkConcatCommand::SkConcatCommand(const SkMatrix& matrix)
26557f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(CONCAT) {
26624bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fMatrix = matrix;
267902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
26824bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fInfo.push(SkObjectParser::MatrixToString(matrix));
269902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
270902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
2717a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkConcatCommand::execute(SkCanvas* canvas) {
27224bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    canvas->concat(fMatrix);
273902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
274902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
2757a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgSkDrawBitmapCommand::SkDrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top,
276db35dab49e0e6bf16ccad5052bf6e6826daad27dskia.committer@gmail.com                       const SkPaint* paint)
27757f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(DRAW_BITMAP) {
27824bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fBitmap = bitmap;
27924bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fLeft = left;
28024bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fTop = top;
28124bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    if (NULL != paint) {
28224bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fPaint = *paint;
28324bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fPaintPtr = &fPaint;
28424bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    } else {
28524bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fPaintPtr = NULL;
28624bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    }
287902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
28824bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fInfo.push(SkObjectParser::BitmapToString(bitmap));
28924bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fInfo.push(SkObjectParser::ScalarToString(left, "SkScalar left: "));
29024bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fInfo.push(SkObjectParser::ScalarToString(top, "SkScalar top: "));
291b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com    if (NULL != paint) {
29224bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fInfo.push(SkObjectParser::PaintToString(*paint));
293b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com    }
294902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
295902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
2967a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkDrawBitmapCommand::execute(SkCanvas* canvas) {
29724bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    canvas->drawBitmap(fBitmap, fLeft, fTop, fPaintPtr);
298902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
299902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
3007a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgbool SkDrawBitmapCommand::render(SkCanvas* canvas) const {
3016ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    render_bitmap(canvas, fBitmap);
3026ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    return true;
30353ec73d1e663c781cf44def060b5e8f669709fdcrobertphillips@google.com}
30453ec73d1e663c781cf44def060b5e8f669709fdcrobertphillips@google.com
3057a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgSkDrawBitmapMatrixCommand::SkDrawBitmapMatrixCommand(const SkBitmap& bitmap,
3067a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org                                                     const SkMatrix& matrix,
307db35dab49e0e6bf16ccad5052bf6e6826daad27dskia.committer@gmail.com                                                     const SkPaint* paint)
30857f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(DRAW_BITMAP_MATRIX) {
30924bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fBitmap = bitmap;
31024bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fMatrix = matrix;
31124bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    if (NULL != paint) {
31224bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fPaint = *paint;
31324bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fPaintPtr = &fPaint;
31424bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    } else {
31524bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fPaintPtr = NULL;
31624bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    }
317902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
31824bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fInfo.push(SkObjectParser::BitmapToString(bitmap));
31924bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fInfo.push(SkObjectParser::MatrixToString(matrix));
320b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com    if (NULL != paint) {
32124bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fInfo.push(SkObjectParser::PaintToString(*paint));
322b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com    }
323902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
324902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
3257a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkDrawBitmapMatrixCommand::execute(SkCanvas* canvas) {
32624bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    canvas->drawBitmapMatrix(fBitmap, fMatrix, fPaintPtr);
327902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
328902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
3297a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgbool SkDrawBitmapMatrixCommand::render(SkCanvas* canvas) const {
3306ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    render_bitmap(canvas, fBitmap);
3316ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    return true;
33253ec73d1e663c781cf44def060b5e8f669709fdcrobertphillips@google.com}
33353ec73d1e663c781cf44def060b5e8f669709fdcrobertphillips@google.com
3347a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgSkDrawBitmapNineCommand::SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,
335db35dab49e0e6bf16ccad5052bf6e6826daad27dskia.committer@gmail.com                                                 const SkRect& dst, const SkPaint* paint)
33657f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(DRAW_BITMAP_NINE) {
33724bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fBitmap = bitmap;
33824bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fCenter = center;
33924bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fDst = dst;
34024bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    if (NULL != paint) {
34124bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fPaint = *paint;
34224bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fPaintPtr = &fPaint;
34324bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    } else {
34424bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fPaintPtr = NULL;
34524bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    }
346902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
34724bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fInfo.push(SkObjectParser::BitmapToString(bitmap));
34824bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fInfo.push(SkObjectParser::IRectToString(center));
34924bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fInfo.push(SkObjectParser::RectToString(dst, "Dst: "));
350b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com    if (NULL != paint) {
35124bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fInfo.push(SkObjectParser::PaintToString(*paint));
352b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com    }
353902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
354902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
3557a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkDrawBitmapNineCommand::execute(SkCanvas* canvas) {
35624bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    canvas->drawBitmapNine(fBitmap, fCenter, fDst, fPaintPtr);
357902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
358902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
3597a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgbool SkDrawBitmapNineCommand::render(SkCanvas* canvas) const {
3606ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    render_bitmap(canvas, fBitmap);
3616ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    return true;
36253ec73d1e663c781cf44def060b5e8f669709fdcrobertphillips@google.com}
36353ec73d1e663c781cf44def060b5e8f669709fdcrobertphillips@google.com
3647a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgSkDrawBitmapRectCommand::SkDrawBitmapRectCommand(const SkBitmap& bitmap, const SkRect* src,
365eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org                                                 const SkRect& dst, const SkPaint* paint,
366db35dab49e0e6bf16ccad5052bf6e6826daad27dskia.committer@gmail.com                                                 SkCanvas::DrawBitmapRectFlags flags)
36757f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(DRAW_BITMAP_RECT_TO_RECT) {
36891217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fBitmap = bitmap;
36991217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    if (NULL != src) {
37091217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com        fSrc = *src;
37191217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    } else {
37291217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com        fSrc.setEmpty();
37391217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    }
37491217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fDst = dst;
37591217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com
3763b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    if (NULL != paint) {
37791217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com        fPaint = *paint;
37891217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com        fPaintPtr = &fPaint;
3793b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    } else {
38091217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com        fPaintPtr = NULL;
3813b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    }
382eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org    fFlags = flags;
383eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org
38491217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fInfo.push(SkObjectParser::BitmapToString(bitmap));
385b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com    if (NULL != src) {
38691217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com        fInfo.push(SkObjectParser::RectToString(*src, "Src: "));
387b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com    }
38891217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fInfo.push(SkObjectParser::RectToString(dst, "Dst: "));
389b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com    if (NULL != paint) {
39091217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com        fInfo.push(SkObjectParser::PaintToString(*paint));
391b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com    }
392eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org    fInfo.push(SkObjectParser::IntToString(fFlags, "Flags: "));
393902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
394902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
3957a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkDrawBitmapRectCommand::execute(SkCanvas* canvas) {
396eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org    canvas->drawBitmapRectToRect(fBitmap, this->srcRect(), fDst, fPaintPtr, fFlags);
397902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
398902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
3997a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgbool SkDrawBitmapRectCommand::render(SkCanvas* canvas) const {
4006ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    render_bitmap(canvas, fBitmap, this->srcRect());
4016ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    return true;
40253ec73d1e663c781cf44def060b5e8f669709fdcrobertphillips@google.com}
40353ec73d1e663c781cf44def060b5e8f669709fdcrobertphillips@google.com
404db35dab49e0e6bf16ccad5052bf6e6826daad27dskia.committer@gmail.comSkDrawDataCommand::SkDrawDataCommand(const void* data, size_t length)
40557f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(DRAW_DATA) {
4060df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fData = new char[length];
4070df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    memcpy(fData, data, length);
4080df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fLength = length;
4090df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com
4100df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    // TODO: add display of actual data?
4110df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    SkString* str = new SkString;
41277279cbf9bfa1732b8b4b9437a4a857c6fc18b70robertphillips@google.com    str->appendf("length: %d", (int) length);
4130df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(str);
414902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
415902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
4167a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkDrawDataCommand::execute(SkCanvas* canvas) {
4170df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    canvas->drawData(fData, fLength);
418902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
419902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
4207a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgSkBeginCommentGroupCommand::SkBeginCommentGroupCommand(const char* description)
4210a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    : INHERITED(BEGIN_COMMENT_GROUP)
4220a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    , fDescription(description) {
4230a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    SkString* temp = new SkString;
4240a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    temp->appendf("Description: %s", description);
4250a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    fInfo.push(temp);
4260a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com}
4270a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
4287a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgSkCommentCommand::SkCommentCommand(const char* kywd, const char* value)
4290a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    : INHERITED(COMMENT)
4300a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    , fKywd(kywd)
4310a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    , fValue(value) {
4320a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    SkString* temp = new SkString;
4330a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    temp->appendf("%s: %s", kywd, value);
4340a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    fInfo.push(temp);
4350a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com}
4360a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
437db35dab49e0e6bf16ccad5052bf6e6826daad27dskia.committer@gmail.comSkEndCommentGroupCommand::SkEndCommentGroupCommand()
43857f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(END_COMMENT_GROUP) {
4390a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com}
4400a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
44157f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgSkDrawOvalCommand::SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint)
44257f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(DRAW_OVAL) {
443a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fOval = oval;
444a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fPaint = paint;
44567baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
446a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::RectToString(oval));
447a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::PaintToString(paint));
44867baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com}
44967baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
4507a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkDrawOvalCommand::execute(SkCanvas* canvas) {
451a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    canvas->drawOval(fOval, fPaint);
45267baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com}
45367baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
4547a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgbool SkDrawOvalCommand::render(SkCanvas* canvas) const {
4556ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->clear(0xFFFFFFFF);
4566ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->save();
4576ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
4586ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    xlate_and_scale_to_bounds(canvas, fOval);
4596ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
4606ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    SkPaint p;
4616ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    p.setColor(SK_ColorBLACK);
4626ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    p.setStyle(SkPaint::kStroke_Style);
4636ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
4646ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->drawOval(fOval, p);
4656ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->restore();
4666ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
4676ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    return true;
4686ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com}
4696ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
47057f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgSkDrawPaintCommand::SkDrawPaintCommand(const SkPaint& paint)
47157f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(DRAW_PAINT) {
472a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fPaint = paint;
473902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
474a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::PaintToString(paint));
475902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
476902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
4777a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkDrawPaintCommand::execute(SkCanvas* canvas) {
478a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    canvas->drawPaint(fPaint);
479902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
480902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
4817a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgbool SkDrawPaintCommand::render(SkCanvas* canvas) const {
4826ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->clear(0xFFFFFFFF);
4836ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->drawPaint(fPaint);
4846ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    return true;
4856ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com}
4866ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
48757f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgSkDrawPathCommand::SkDrawPathCommand(const SkPath& path, const SkPaint& paint)
48857f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(DRAW_PATH) {
48991217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fPath = path;
49091217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fPaint = paint;
491902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
49291217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fInfo.push(SkObjectParser::PathToString(path));
49391217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fInfo.push(SkObjectParser::PaintToString(paint));
494902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
495902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
4967a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkDrawPathCommand::execute(SkCanvas* canvas) {
49791217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    canvas->drawPath(fPath, fPaint);
498902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
499902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
5007a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgbool SkDrawPathCommand::render(SkCanvas* canvas) const {
5016ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    render_path(canvas, fPath);
5026ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    return true;
5036dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com}
5046dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
5059b14f26d0f3a974f3dd626c8354e1db1cfcd322frobertphillipsSkDrawPictureCommand::SkDrawPictureCommand(const SkPicture* picture)
50657f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(DRAW_PICTURE)
5079b14f26d0f3a974f3dd626c8354e1db1cfcd322frobertphillips    , fPicture(SkRef(picture)) {
508e898e9c65eb2f10e53c459349b174551b3957545commit-bot@chromium.org    SkString* temp = new SkString;
5099b14f26d0f3a974f3dd626c8354e1db1cfcd322frobertphillips    temp->appendf("SkPicture: W: %d H: %d", picture->width(), picture->height());
510e898e9c65eb2f10e53c459349b174551b3957545commit-bot@chromium.org    fInfo.push(temp);
511902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
512902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
5137a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkDrawPictureCommand::execute(SkCanvas* canvas) {
5140df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    canvas->drawPicture(fPicture);
515902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
516902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
517e898e9c65eb2f10e53c459349b174551b3957545commit-bot@chromium.orgbool SkDrawPictureCommand::render(SkCanvas* canvas) const {
518e898e9c65eb2f10e53c459349b174551b3957545commit-bot@chromium.org    canvas->clear(0xFFFFFFFF);
519e898e9c65eb2f10e53c459349b174551b3957545commit-bot@chromium.org    canvas->save();
520e898e9c65eb2f10e53c459349b174551b3957545commit-bot@chromium.org
5219b14f26d0f3a974f3dd626c8354e1db1cfcd322frobertphillips    SkRect bounds = SkRect::MakeWH(SkIntToScalar(fPicture->width()),
5229b14f26d0f3a974f3dd626c8354e1db1cfcd322frobertphillips                                   SkIntToScalar(fPicture->height()));
523e898e9c65eb2f10e53c459349b174551b3957545commit-bot@chromium.org    xlate_and_scale_to_bounds(canvas, bounds);
524e898e9c65eb2f10e53c459349b174551b3957545commit-bot@chromium.org
5259b14f26d0f3a974f3dd626c8354e1db1cfcd322frobertphillips    canvas->drawPicture(fPicture.get());
526e898e9c65eb2f10e53c459349b174551b3957545commit-bot@chromium.org
527e898e9c65eb2f10e53c459349b174551b3957545commit-bot@chromium.org    canvas->restore();
528e898e9c65eb2f10e53c459349b174551b3957545commit-bot@chromium.org
529e898e9c65eb2f10e53c459349b174551b3957545commit-bot@chromium.org    return true;
530e898e9c65eb2f10e53c459349b174551b3957545commit-bot@chromium.org}
531e898e9c65eb2f10e53c459349b174551b3957545commit-bot@chromium.org
5327a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgSkDrawPointsCommand::SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count,
53357f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org                                         const SkPoint pts[], const SkPaint& paint)
53457f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(DRAW_POINTS) {
535a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fMode = mode;
536a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fCount = count;
537a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fPts = new SkPoint[count];
538a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    memcpy(fPts, pts, count * sizeof(SkPoint));
539a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fPaint = paint;
540902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
541a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::PointsToString(pts, count));
542a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::ScalarToString(SkIntToScalar((unsigned int)count),
543a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com                                              "Points: "));
544a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::PointModeToString(mode));
545a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::PaintToString(paint));
546902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
547902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
5487a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkDrawPointsCommand::execute(SkCanvas* canvas) {
549a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    canvas->drawPoints(fMode, fCount, fPts, fPaint);
550902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
551902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
5527a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgbool SkDrawPointsCommand::render(SkCanvas* canvas) const {
5536ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->clear(0xFFFFFFFF);
5546ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->save();
5556ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
5566ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    SkRect bounds;
5576ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
5586ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    bounds.setEmpty();
5596ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    for (unsigned int i = 0; i < fCount; ++i) {
5606ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com        bounds.growToInclude(fPts[i].fX, fPts[i].fY);
5616ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    }
562a009083bd10353b91903cab84362b0e744d3b3b7skia.committer@gmail.com
5636ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    xlate_and_scale_to_bounds(canvas, bounds);
5646ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
5656ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    SkPaint p;
5666ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    p.setColor(SK_ColorBLACK);
5676ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    p.setStyle(SkPaint::kStroke_Style);
5686ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
5696ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->drawPoints(fMode, fCount, fPts, p);
5706ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->restore();
5716ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
5726ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    return true;
5736ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com}
5746ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
5757a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgSkDrawPosTextCommand::SkDrawPosTextCommand(const void* text, size_t byteLength,
57657f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org                                           const SkPoint pos[], const SkPaint& paint)
57757f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(DRAW_POS_TEXT) {
578a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    size_t numPts = paint.countText(text, byteLength);
579a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com
580a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fText = new char[byteLength];
581a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    memcpy(fText, text, byteLength);
582a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fByteLength = byteLength;
583a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com
584a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fPos = new SkPoint[numPts];
585a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    memcpy(fPos, pos, numPts * sizeof(SkPoint));
586a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com
587a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fPaint = paint;
588a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com
589a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::TextToString(text, byteLength, paint.getTextEncoding()));
590902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    // TODO(chudy): Test that this works.
591a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::PointsToString(pos, 1));
592a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::PaintToString(paint));
593902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
594902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
5957a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkDrawPosTextCommand::execute(SkCanvas* canvas) {
596a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    canvas->drawPosText(fText, fByteLength, fPos, fPaint);
597902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
598902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
599902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
6007a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgSkDrawPosTextHCommand::SkDrawPosTextHCommand(const void* text, size_t byteLength,
6017a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org                                             const SkScalar xpos[], SkScalar constY,
60257f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org                                             const SkPaint& paint)
60357f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(DRAW_POS_TEXT_H) {
604a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    size_t numPts = paint.countText(text, byteLength);
605a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com
606a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fText = new char[byteLength];
607a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    memcpy(fText, text, byteLength);
60891217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fByteLength = byteLength;
609a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com
610a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fXpos = new SkScalar[numPts];
611a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    memcpy(fXpos, xpos, numPts * sizeof(SkScalar));
612a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com
61391217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fConstY = constY;
61491217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fPaint = paint;
615902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
61691217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fInfo.push(SkObjectParser::TextToString(text, byteLength, paint.getTextEncoding()));
61791217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fInfo.push(SkObjectParser::ScalarToString(xpos[0], "XPOS: "));
61891217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fInfo.push(SkObjectParser::ScalarToString(constY, "SkScalar constY: "));
61991217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fInfo.push(SkObjectParser::PaintToString(paint));
620902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
621902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
6227a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkDrawPosTextHCommand::execute(SkCanvas* canvas) {
62391217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    canvas->drawPosTextH(fText, fByteLength, fXpos, fConstY, fPaint);
624902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
625902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
62657f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgSkDrawRectCommand::SkDrawRectCommand(const SkRect& rect, const SkPaint& paint)
62757f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(DRAW_RECT) {
62891217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fRect = rect;
62991217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fPaint = paint;
630902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
63191217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fInfo.push(SkObjectParser::RectToString(rect));
63291217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fInfo.push(SkObjectParser::PaintToString(paint));
633902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
634902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
6357a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkDrawRectCommand::execute(SkCanvas* canvas) {
63691217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    canvas->drawRect(fRect, fPaint);
637902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
638902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
63957f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgSkDrawRRectCommand::SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint)
64057f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(DRAW_RRECT) {
6410df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fRRect = rrect;
6420df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fPaint = paint;
64367baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
6440df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::RRectToString(rrect));
6450df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::PaintToString(paint));
64667baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com}
64767baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
6487a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkDrawRRectCommand::execute(SkCanvas* canvas) {
649febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com    canvas->drawRRect(fRRect, fPaint);
65067baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com}
65167baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
6527a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgbool SkDrawRRectCommand::render(SkCanvas* canvas) const {
6536ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    render_rrect(canvas, fRRect);
6546ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    return true;
6556ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com}
6566ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
65790667ba5eb88f5cb715f71add583a1c87efbe6a7skia.committer@gmail.comSkDrawDRRectCommand::SkDrawDRRectCommand(const SkRRect& outer,
6583d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org                                         const SkRRect& inner,
65957f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org                                         const SkPaint& paint)
66057f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(DRAW_DRRECT) {
6613d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    fOuter = outer;
6623d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    fInner = inner;
6633d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    fPaint = paint;
6643d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org
6653d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    fInfo.push(SkObjectParser::RRectToString(outer));
6663d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    fInfo.push(SkObjectParser::RRectToString(inner));
6673d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    fInfo.push(SkObjectParser::PaintToString(paint));
6683d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org}
6693d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org
6703d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.orgvoid SkDrawDRRectCommand::execute(SkCanvas* canvas) {
6713d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    canvas->drawDRRect(fOuter, fInner, fPaint);
6723d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org}
6733d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org
6743d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.orgbool SkDrawDRRectCommand::render(SkCanvas* canvas) const {
6753d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    render_drrect(canvas, fOuter, fInner);
6763d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    return true;
6773d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org}
6783d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org
6797a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgSkDrawSpriteCommand::SkDrawSpriteCommand(const SkBitmap& bitmap, int left, int top,
68057f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org                                         const SkPaint* paint)
68157f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(DRAW_SPRITE) {
6820df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fBitmap = bitmap;
6830df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fLeft = left;
6840df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fTop = top;
6850df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    if (NULL != paint) {
6860df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        fPaint = *paint;
6870df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        fPaintPtr = &fPaint;
6880df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    } else {
6890df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        fPaintPtr = NULL;
6900df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    }
691902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
6920df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::BitmapToString(bitmap));
6930df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::IntToString(left, "Left: "));
6940df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::IntToString(top, "Top: "));
6950df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    if (NULL != paint) {
6960df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        fInfo.push(SkObjectParser::PaintToString(*paint));
6970df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    }
698902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
699902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
7007a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkDrawSpriteCommand::execute(SkCanvas* canvas) {
7010df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    canvas->drawSprite(fBitmap, fLeft, fTop, fPaintPtr);
702902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
703902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
7047a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgbool SkDrawSpriteCommand::render(SkCanvas* canvas) const {
7056ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    render_bitmap(canvas, fBitmap);
7066ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    return true;
70753ec73d1e663c781cf44def060b5e8f669709fdcrobertphillips@google.com}
70853ec73d1e663c781cf44def060b5e8f669709fdcrobertphillips@google.com
7097a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgSkDrawTextCommand::SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y,
71057f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org                                     const SkPaint& paint)
71157f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(DRAW_TEXT) {
7120df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fText = new char[byteLength];
7130df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    memcpy(fText, text, byteLength);
7140df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fByteLength = byteLength;
7150df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fX = x;
7160df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fY = y;
7170df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fPaint = paint;
718902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
7190df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::TextToString(text, byteLength, paint.getTextEncoding()));
7200df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::ScalarToString(x, "SkScalar x: "));
7210df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::ScalarToString(y, "SkScalar y: "));
7220df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::PaintToString(paint));
723902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
724902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
7257a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkDrawTextCommand::execute(SkCanvas* canvas) {
7260df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    canvas->drawText(fText, fByteLength, fX, fY, fPaint);
727902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
728902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
7297a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgSkDrawTextOnPathCommand::SkDrawTextOnPathCommand(const void* text, size_t byteLength,
7307a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org                                                 const SkPath& path, const SkMatrix* matrix,
73157f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org                                                 const SkPaint& paint)
73257f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(DRAW_TEXT_ON_PATH) {
7330df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fText = new char[byteLength];
7340df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    memcpy(fText, text, byteLength);
7350df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fByteLength = byteLength;
7360df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fPath = path;
7370df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    if (NULL != matrix) {
7380df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        fMatrix = *matrix;
7390df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    } else {
7400df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        fMatrix.setIdentity();
7410df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    }
7420df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fPaint = paint;
743902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
7440df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::TextToString(text, byteLength, paint.getTextEncoding()));
7450df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::PathToString(path));
7460df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    if (NULL != matrix) {
7470df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        fInfo.push(SkObjectParser::MatrixToString(*matrix));
7480df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    }
7490df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::PaintToString(paint));
750902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
751902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
7527a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkDrawTextOnPathCommand::execute(SkCanvas* canvas) {
7530df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    canvas->drawTextOnPath(fText, fByteLength, fPath,
7540df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com                           fMatrix.isIdentity() ? NULL : &fMatrix,
7550df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com                           fPaint);
756902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
757902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
7587a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgSkDrawVerticesCommand::SkDrawVerticesCommand(SkCanvas::VertexMode vmode, int vertexCount,
7597a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org                                             const SkPoint vertices[], const SkPoint texs[],
7607a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org                                             const SkColor colors[], SkXfermode* xfermode,
7617a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org                                             const uint16_t indices[], int indexCount,
76257f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org                                             const SkPaint& paint)
76357f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(DRAW_VERTICES) {
7640df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fVmode = vmode;
7650df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com
7660df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fVertexCount = vertexCount;
7670df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com
7680df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fVertices = new SkPoint[vertexCount];
7690df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    memcpy(fVertices, vertices, vertexCount * sizeof(SkPoint));
7700df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com
7710df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    if (NULL != texs) {
7720df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        fTexs = new SkPoint[vertexCount];
7730df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        memcpy(fTexs, texs, vertexCount * sizeof(SkPoint));
7740df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    } else {
7750df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        fTexs = NULL;
7760df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    }
7770df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com
7780df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    if (NULL != colors) {
7790df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        fColors = new SkColor[vertexCount];
7800df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        memcpy(fColors, colors, vertexCount * sizeof(SkColor));
7810df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    } else {
7820df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        fColors = NULL;
7830df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    }
7840df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com
7850df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fXfermode = xfermode;
7860df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    if (NULL != fXfermode) {
7870df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        fXfermode->ref();
7880df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    }
7890df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com
7900df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    if (indexCount > 0) {
7910df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        fIndices = new uint16_t[indexCount];
7920df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        memcpy(fIndices, indices, indexCount * sizeof(uint16_t));
7930df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    } else {
7940df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        fIndices = NULL;
7950df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    }
7960df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com
7970df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fIndexCount = indexCount;
7980df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fPaint = paint;
7990df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com
800902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    // TODO(chudy)
8010df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::CustomTextToString("To be implemented."));
8020df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::PaintToString(paint));
8030df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com}
8040df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com
8057a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgSkDrawVerticesCommand::~SkDrawVerticesCommand() {
8060df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    delete [] fVertices;
8070df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    delete [] fTexs;
8080df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    delete [] fColors;
8090df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    SkSafeUnref(fXfermode);
8100df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    delete [] fIndices;
811902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
812902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
8137a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkDrawVerticesCommand::execute(SkCanvas* canvas) {
8140df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    canvas->drawVertices(fVmode, fVertexCount, fVertices,
8150df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com                         fTexs, fColors, fXfermode, fIndices,
8160df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com                         fIndexCount, fPaint);
817902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
818902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
81957f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgSkRestoreCommand::SkRestoreCommand()
82057f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(RESTORE) {
82124bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fInfo.push(SkObjectParser::CustomTextToString("No Parameters"));
822902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
823902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
8247a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkRestoreCommand::execute(SkCanvas* canvas) {
825902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    canvas->restore();
826902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
827902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
8287a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkRestoreCommand::trackSaveState(int* state) {
8290699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com    (*state)--;
8300699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com}
8310699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com
83257f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgSkRotateCommand::SkRotateCommand(SkScalar degrees)
83357f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(ROTATE) {
8340df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fDegrees = degrees;
835902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
8360df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::ScalarToString(degrees, "SkScalar degrees: "));
837902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
838902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
8397a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkRotateCommand::execute(SkCanvas* canvas) {
8400df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    canvas->rotate(fDegrees);
841902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
842902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
84357f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgSkSaveCommand::SkSaveCommand(SkCanvas::SaveFlags flags)
84457f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(SAVE) {
84524bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fFlags = flags;
84624bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fInfo.push(SkObjectParser::SaveFlagsToString(flags));
847902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
848902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
8497a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkSaveCommand::execute(SkCanvas* canvas) {
85024bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    canvas->save(fFlags);
851902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
852902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
8537a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkSaveCommand::trackSaveState(int* state) {
8540699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com    (*state)++;
8550699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com}
8560699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com
8577a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgSkSaveLayerCommand::SkSaveLayerCommand(const SkRect* bounds, const SkPaint* paint,
85857f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org                                       SkCanvas::SaveFlags flags)
85957f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(SAVE_LAYER) {
86024bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    if (NULL != bounds) {
86124bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fBounds = *bounds;
86224bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    } else {
86324bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fBounds.setEmpty();
86424bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    }
86524bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com
86624bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    if (NULL != paint) {
86724bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fPaint = *paint;
86824bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fPaintPtr = &fPaint;
86924bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    } else {
87024bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fPaintPtr = NULL;
87124bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    }
87224bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fFlags = flags;
873902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
87424bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    if (NULL != bounds) {
87524bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fInfo.push(SkObjectParser::RectToString(*bounds, "Bounds: "));
87624bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    }
87724bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    if (NULL != paint) {
87824bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fInfo.push(SkObjectParser::PaintToString(*paint));
87924bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    }
88024bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fInfo.push(SkObjectParser::SaveFlagsToString(flags));
881902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
882902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
8837a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkSaveLayerCommand::execute(SkCanvas* canvas) {
8847e32851d5473d14db5c396f5877e3dfcb7b19f6dskia.committer@gmail.com    canvas->saveLayer(fBounds.isEmpty() ? NULL : &fBounds,
88524bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com                      fPaintPtr,
88624bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com                      fFlags);
887902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
888902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
8891643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.orgvoid SkSaveLayerCommand::vizExecute(SkCanvas* canvas) {
8901643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org    canvas->save();
8911643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org}
8921643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org
8937a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkSaveLayerCommand::trackSaveState(int* state) {
8940699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com    (*state)++;
8950699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com}
8960699e02101405623ad47f225729ed2521b2a0501tomhudson@google.com
89757f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgSkScaleCommand::SkScaleCommand(SkScalar sx, SkScalar sy)
89857f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(SCALE) {
8990df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fSx = sx;
9000df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fSy = sy;
901902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
9020df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::ScalarToString(sx, "SkScalar sx: "));
9030df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::ScalarToString(sy, "SkScalar sy: "));
904902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
905902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
9067a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkScaleCommand::execute(SkCanvas* canvas) {
9070df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    canvas->scale(fSx, fSy);
908902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
909902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
91057f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgSkSetMatrixCommand::SkSetMatrixCommand(const SkMatrix& matrix)
91157f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(SET_MATRIX) {
9120df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fMatrix = matrix;
913902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
9140df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::MatrixToString(matrix));
915902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
916902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
9177a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkSetMatrixCommand::execute(SkCanvas* canvas) {
9180df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    canvas->setMatrix(fMatrix);
919902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
920902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
92157f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgSkSkewCommand::SkSkewCommand(SkScalar sx, SkScalar sy)
92257f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(SKEW) {
9230df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fSx = sx;
9240df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fSy = sy;
925902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
9260df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::ScalarToString(sx, "SkScalar sx: "));
9270df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::ScalarToString(sy, "SkScalar sy: "));
928902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
929902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
9307a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkSkewCommand::execute(SkCanvas* canvas) {
9310df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    canvas->skew(fSx, fSy);
932902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
933902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
93457f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgSkTranslateCommand::SkTranslateCommand(SkScalar dx, SkScalar dy)
93557f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(TRANSLATE) {
9360df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fDx = dx;
9370df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fDy = dy;
938902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
9390df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::ScalarToString(dx, "SkScalar dx: "));
9400df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::ScalarToString(dy, "SkScalar dy: "));
941902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
942902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
9437a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgvoid SkTranslateCommand::execute(SkCanvas* canvas) {
9440df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    canvas->translate(fDx, fDy);
945902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
946210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.org
947210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.orgSkPushCullCommand::SkPushCullCommand(const SkRect& cullRect)
94857f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    : INHERITED(PUSH_CULL)
94957f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org    , fCullRect(cullRect) {
950210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.org    fInfo.push(SkObjectParser::RectToString(cullRect));
951210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.org}
952210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.org
953210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.orgvoid SkPushCullCommand::execute(SkCanvas* canvas) {
954210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.org    canvas->pushCull(fCullRect);
955210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.org}
956210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.org
9571643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.orgvoid SkPushCullCommand::vizExecute(SkCanvas* canvas) {
9581643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org    canvas->pushCull(fCullRect);
9591643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org
9601643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org    SkPaint p;
9611643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org    p.setColor(SK_ColorCYAN);
9621643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org    p.setStyle(SkPaint::kStroke_Style);
9631643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org    canvas->drawRect(fCullRect, p);
9641643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org}
9651643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org
96657f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgSkPopCullCommand::SkPopCullCommand() : INHERITED(POP_CULL) { }
967210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.org
968210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.orgvoid SkPopCullCommand::execute(SkCanvas* canvas) {
969210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.org    canvas->popCull();
970210ae2a42613b9048e8e8c4096c5bf4fe2ddf838commit-bot@chromium.org}
971