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"
129bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips#include "SkPicture.h"
13b7425173f96e93b090787e2386ba5f022b6c2869fmalita#include "SkTextBlob.h"
14b7425173f96e93b090787e2386ba5f022b6c2869fmalita
15902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com// TODO(chudy): Refactor into non subclass model.
16902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
179bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillipsSkDrawCommand::SkDrawCommand(OpType type)
189bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : fOpType(type)
190a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    , fVisible(true) {
200a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com}
210a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
22902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comSkDrawCommand::~SkDrawCommand() {
2397cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com    fInfo.deleteAll();
24902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
25902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
269bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillipsconst char* SkDrawCommand::GetCommandString(OpType type) {
27902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    switch (type) {
289bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kBeginCommentGroup_OpType: return "BeginCommentGroup";
29160ebb2bfa0794d72d31a786793b13413289863dfmalita        case kBeginDrawPicture_OpType: return "BeginDrawPicture";
309bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kClipPath_OpType: return "ClipPath";
319bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kClipRegion_OpType: return "ClipRegion";
329bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kClipRect_OpType: return "ClipRect";
339bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kClipRRect_OpType: return "ClipRRect";
349bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kComment_OpType: return "Comment";
359bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kConcat_OpType: return "Concat";
369bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kDrawBitmap_OpType: return "DrawBitmap";
379bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kDrawBitmapNine_OpType: return "DrawBitmapNine";
389bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kDrawBitmapRect_OpType: return "DrawBitmapRect";
399bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kDrawClear_OpType: return "DrawClear";
409bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kDrawDRRect_OpType: return "DrawDRRect";
419bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kDrawOval_OpType: return "DrawOval";
429bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kDrawPaint_OpType: return "DrawPaint";
439bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kDrawPatch_OpType: return "DrawPatch";
449bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kDrawPath_OpType: return "DrawPath";
459bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kDrawPoints_OpType: return "DrawPoints";
469bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kDrawPosText_OpType: return "DrawPosText";
479bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kDrawPosTextH_OpType: return "DrawPosTextH";
489bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kDrawRect_OpType: return "DrawRect";
499bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kDrawRRect_OpType: return "DrawRRect";
509bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kDrawSprite_OpType: return "DrawSprite";
519bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kDrawText_OpType: return "DrawText";
529bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kDrawTextBlob_OpType: return "DrawTextBlob";
539bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kDrawTextOnPath_OpType: return "DrawTextOnPath";
549bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kDrawVertices_OpType: return "DrawVertices";
559bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kEndCommentGroup_OpType: return "EndCommentGroup";
56160ebb2bfa0794d72d31a786793b13413289863dfmalita        case kEndDrawPicture_OpType: return "EndDrawPicture";
579bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kRestore_OpType: return "Restore";
589bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kSave_OpType: return "Save";
599bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kSaveLayer_OpType: return "SaveLayer";
609bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips        case kSetMatrix_OpType: return "SetMatrix";
61902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        default:
629bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips            SkDebugf("OpType error 0x%08x\n", type);
63902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com            SkASSERT(0);
64902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com            break;
65902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
66902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkDEBUGFAIL("DrawType UNUSED\n");
67902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    return NULL;
68902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
69902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
708c89c528f31dff25bce74aabe28abe23a772cb1efmalitaSkString SkDrawCommand::toString() const {
719bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    return SkString(GetCommandString(fOpType));
72902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
73902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
749bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillipsSkClearCommand::SkClearCommand(SkColor color) : INHERITED(kDrawClear_OpType) {
7524bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fColor = color;
7624bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fInfo.push(SkObjectParser::CustomTextToString("No Parameters"));
77902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
78902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
798c89c528f31dff25bce74aabe28abe23a772cb1efmalitavoid SkClearCommand::execute(SkCanvas* canvas) const {
8024bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    canvas->clear(fColor);
81902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
82902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
836ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.comnamespace {
846ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
856ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.comvoid xlate_and_scale_to_bounds(SkCanvas* canvas, const SkRect& bounds) {
866ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    const SkISize& size = canvas->getDeviceSize();
876ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
886ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    static const SkScalar kInsetFrac = 0.9f; // Leave a border around object
896ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
906ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->translate(size.fWidth/2.0f, size.fHeight/2.0f);
916ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    if (bounds.width() > bounds.height()) {
926ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com        canvas->scale(SkDoubleToScalar((kInsetFrac*size.fWidth)/bounds.width()),
936ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com                      SkDoubleToScalar((kInsetFrac*size.fHeight)/bounds.width()));
946ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    } else {
956ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com        canvas->scale(SkDoubleToScalar((kInsetFrac*size.fWidth)/bounds.height()),
966ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com                      SkDoubleToScalar((kInsetFrac*size.fHeight)/bounds.height()));
976ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    }
986ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->translate(-bounds.centerX(), -bounds.centerY());
996ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com}
100a009083bd10353b91903cab84362b0e744d3b3b7skia.committer@gmail.com
1016ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1026ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.comvoid render_path(SkCanvas* canvas, const SkPath& path) {
1036ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->clear(0xFFFFFFFF);
1046ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->save();
1056ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1066ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    const SkRect& bounds = path.getBounds();
1076ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1086ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    xlate_and_scale_to_bounds(canvas, bounds);
1096ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1106ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    SkPaint p;
1116ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    p.setColor(SK_ColorBLACK);
1126ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    p.setStyle(SkPaint::kStroke_Style);
1136ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1146ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->drawPath(path, p);
1156ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->restore();
1166ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com}
1176ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1186ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.comvoid render_bitmap(SkCanvas* canvas, const SkBitmap& input, const SkRect* srcRect = NULL) {
1196ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    const SkISize& size = canvas->getDeviceSize();
1206ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1216ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    SkScalar xScale = SkIntToScalar(size.fWidth-2) / input.width();
1226ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    SkScalar yScale = SkIntToScalar(size.fHeight-2) / input.height();
1236ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1246ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    if (input.width() > input.height()) {
1256ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com        yScale *= input.height() / (float) input.width();
1266ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    } else {
1276ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com        xScale *= input.width() / (float) input.height();
1286ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    }
1296ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1306ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    SkRect dst = SkRect::MakeXYWH(SK_Scalar1, SK_Scalar1,
1316ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com                                  xScale * input.width(),
1326ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com                                  yScale * input.height());
133a009083bd10353b91903cab84362b0e744d3b3b7skia.committer@gmail.com
1346ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->clear(0xFFFFFFFF);
1356ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->drawBitmapRect(input, NULL, dst);
1366ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
13749f085dddff10473b6ebf832a974288300224e60bsalomon    if (srcRect) {
1386ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com        SkRect r = SkRect::MakeLTRB(srcRect->fLeft * xScale + SK_Scalar1,
1396ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com                                    srcRect->fTop * yScale + SK_Scalar1,
1406ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com                                    srcRect->fRight * xScale + SK_Scalar1,
1416ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com                                    srcRect->fBottom * yScale + SK_Scalar1);
1426ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com        SkPaint p;
1436ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com        p.setColor(SK_ColorRED);
1446ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com        p.setStyle(SkPaint::kStroke_Style);
1456ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1466ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com        canvas->drawRect(r, p);
1476ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    }
1486ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com}
1496ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1506ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.comvoid render_rrect(SkCanvas* canvas, const SkRRect& rrect) {
1516ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->clear(0xFFFFFFFF);
1526ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->save();
1536ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1546ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    const SkRect& bounds = rrect.getBounds();
1556ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1566ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    xlate_and_scale_to_bounds(canvas, bounds);
1576ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1586ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    SkPaint p;
1596ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    p.setColor(SK_ColorBLACK);
1606ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    p.setStyle(SkPaint::kStroke_Style);
1616ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1626ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->drawRRect(rrect, p);
1636ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->restore();
1646ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com}
165a009083bd10353b91903cab84362b0e744d3b3b7skia.committer@gmail.com
1663d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.orgvoid render_drrect(SkCanvas* canvas, const SkRRect& outer, const SkRRect& inner) {
1673d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    canvas->clear(0xFFFFFFFF);
1683d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    canvas->save();
1693d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org
1703d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    const SkRect& bounds = outer.getBounds();
1713d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org
1723d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    xlate_and_scale_to_bounds(canvas, bounds);
1733d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org
1743d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    SkPaint p;
1753d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    p.setColor(SK_ColorBLACK);
1763d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    p.setStyle(SkPaint::kStroke_Style);
1773d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org
1783d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    canvas->drawDRRect(outer, inner, p);
1793d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    canvas->restore();
1803d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org}
1813d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org
1826ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com};
1836ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
1846ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
18557f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgSkClipPathCommand::SkClipPathCommand(const SkPath& path, SkRegion::Op op, bool doAA)
1869bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kClipPath_OpType) {
18791217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fPath = path;
18891217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fOp = op;
18991217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fDoAA = doAA;
190902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
19191217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fInfo.push(SkObjectParser::PathToString(path));
19291217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fInfo.push(SkObjectParser::RegionOpToString(op));
19391217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fInfo.push(SkObjectParser::BoolToString(doAA));
194902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
195902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1968c89c528f31dff25bce74aabe28abe23a772cb1efmalitavoid SkClipPathCommand::execute(SkCanvas* canvas) const {
19791217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    canvas->clipPath(fPath, fOp, fDoAA);
198902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
199902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
2007a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgbool SkClipPathCommand::render(SkCanvas* canvas) const {
2016ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    render_path(canvas, fPath);
2026ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    return true;
2036dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com}
2046dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
205db35dab49e0e6bf16ccad5052bf6e6826daad27dskia.committer@gmail.comSkClipRegionCommand::SkClipRegionCommand(const SkRegion& region, SkRegion::Op op)
2069bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kClipRegion_OpType) {
20724bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fRegion = region;
20824bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fOp = op;
209902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
21024bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fInfo.push(SkObjectParser::RegionToString(region));
21124bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fInfo.push(SkObjectParser::RegionOpToString(op));
212902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
213902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
2148c89c528f31dff25bce74aabe28abe23a772cb1efmalitavoid SkClipRegionCommand::execute(SkCanvas* canvas) const {
21524bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    canvas->clipRegion(fRegion, fOp);
216902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
217902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
21857f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgSkClipRectCommand::SkClipRectCommand(const SkRect& rect, SkRegion::Op op, bool doAA)
2199bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kClipRect_OpType) {
220a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fRect = rect;
221a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fOp = op;
222a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fDoAA = doAA;
223902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
224a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::RectToString(rect));
225a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::RegionOpToString(op));
226a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::BoolToString(doAA));
227902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
228902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
2298c89c528f31dff25bce74aabe28abe23a772cb1efmalitavoid SkClipRectCommand::execute(SkCanvas* canvas) const {
230a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    canvas->clipRect(fRect, fOp, fDoAA);
231902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
232902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
233db35dab49e0e6bf16ccad5052bf6e6826daad27dskia.committer@gmail.comSkClipRRectCommand::SkClipRRectCommand(const SkRRect& rrect, SkRegion::Op op, bool doAA)
2349bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kClipRRect_OpType) {
235a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fRRect = rrect;
236a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fOp = op;
237a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fDoAA = doAA;
23867baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
239a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::RRectToString(rrect));
240a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::RegionOpToString(op));
241a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::BoolToString(doAA));
24267baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com}
24367baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
2448c89c528f31dff25bce74aabe28abe23a772cb1efmalitavoid SkClipRRectCommand::execute(SkCanvas* canvas) const {
245a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    canvas->clipRRect(fRRect, fOp, fDoAA);
24667baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com}
24767baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
2487a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgbool SkClipRRectCommand::render(SkCanvas* canvas) const {
2496ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    render_rrect(canvas, fRRect);
2506ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    return true;
2516ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com}
2526ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
25357f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgSkConcatCommand::SkConcatCommand(const SkMatrix& matrix)
2549bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kConcat_OpType) {
25524bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fMatrix = matrix;
256902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
25724bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fInfo.push(SkObjectParser::MatrixToString(matrix));
258902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
259902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
2608c89c528f31dff25bce74aabe28abe23a772cb1efmalitavoid SkConcatCommand::execute(SkCanvas* canvas) const {
26124bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    canvas->concat(fMatrix);
262902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
263902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
2647a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgSkDrawBitmapCommand::SkDrawBitmapCommand(const SkBitmap& bitmap, SkScalar left, SkScalar top,
265b3f319fbb01c74e757846d9fcfbf1da174c0cb17robertphillips                                         const SkPaint* paint)
2669bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kDrawBitmap_OpType) {
26724bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fBitmap = bitmap;
26824bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fLeft = left;
26924bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fTop = top;
27049f085dddff10473b6ebf832a974288300224e60bsalomon    if (paint) {
27124bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fPaint = *paint;
27224bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fPaintPtr = &fPaint;
27324bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    } else {
27424bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fPaintPtr = NULL;
27524bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    }
276902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
27724bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fInfo.push(SkObjectParser::BitmapToString(bitmap));
27824bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fInfo.push(SkObjectParser::ScalarToString(left, "SkScalar left: "));
27924bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fInfo.push(SkObjectParser::ScalarToString(top, "SkScalar top: "));
28049f085dddff10473b6ebf832a974288300224e60bsalomon    if (paint) {
28124bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fInfo.push(SkObjectParser::PaintToString(*paint));
282b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com    }
283902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
284902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
2858c89c528f31dff25bce74aabe28abe23a772cb1efmalitavoid SkDrawBitmapCommand::execute(SkCanvas* canvas) const {
28624bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    canvas->drawBitmap(fBitmap, fLeft, fTop, fPaintPtr);
287902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
288902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
2897a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgbool SkDrawBitmapCommand::render(SkCanvas* canvas) const {
2906ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    render_bitmap(canvas, fBitmap);
2916ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    return true;
29253ec73d1e663c781cf44def060b5e8f669709fdcrobertphillips@google.com}
29353ec73d1e663c781cf44def060b5e8f669709fdcrobertphillips@google.com
2947a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgSkDrawBitmapNineCommand::SkDrawBitmapNineCommand(const SkBitmap& bitmap, const SkIRect& center,
295db35dab49e0e6bf16ccad5052bf6e6826daad27dskia.committer@gmail.com                                                 const SkRect& dst, const SkPaint* paint)
2969bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kDrawBitmapNine_OpType) {
29724bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fBitmap = bitmap;
29824bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fCenter = center;
29924bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fDst = dst;
30049f085dddff10473b6ebf832a974288300224e60bsalomon    if (paint) {
30124bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fPaint = *paint;
30224bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fPaintPtr = &fPaint;
30324bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    } else {
30424bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fPaintPtr = NULL;
30524bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    }
306902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
30724bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fInfo.push(SkObjectParser::BitmapToString(bitmap));
30824bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fInfo.push(SkObjectParser::IRectToString(center));
30924bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fInfo.push(SkObjectParser::RectToString(dst, "Dst: "));
31049f085dddff10473b6ebf832a974288300224e60bsalomon    if (paint) {
31124bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fInfo.push(SkObjectParser::PaintToString(*paint));
312b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com    }
313902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
314902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
3158c89c528f31dff25bce74aabe28abe23a772cb1efmalitavoid SkDrawBitmapNineCommand::execute(SkCanvas* canvas) const {
31624bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    canvas->drawBitmapNine(fBitmap, fCenter, fDst, fPaintPtr);
317902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
318902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
3197a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgbool SkDrawBitmapNineCommand::render(SkCanvas* canvas) const {
3206ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    render_bitmap(canvas, fBitmap);
3216ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    return true;
32253ec73d1e663c781cf44def060b5e8f669709fdcrobertphillips@google.com}
32353ec73d1e663c781cf44def060b5e8f669709fdcrobertphillips@google.com
3247a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgSkDrawBitmapRectCommand::SkDrawBitmapRectCommand(const SkBitmap& bitmap, const SkRect* src,
325eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org                                                 const SkRect& dst, const SkPaint* paint,
326db35dab49e0e6bf16ccad5052bf6e6826daad27dskia.committer@gmail.com                                                 SkCanvas::DrawBitmapRectFlags flags)
3279bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kDrawBitmapRect_OpType) {
32891217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fBitmap = bitmap;
32949f085dddff10473b6ebf832a974288300224e60bsalomon    if (src) {
33091217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com        fSrc = *src;
33191217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    } else {
33291217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com        fSrc.setEmpty();
33391217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    }
33491217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fDst = dst;
33591217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com
33649f085dddff10473b6ebf832a974288300224e60bsalomon    if (paint) {
33791217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com        fPaint = *paint;
33891217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com        fPaintPtr = &fPaint;
3393b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    } else {
34091217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com        fPaintPtr = NULL;
3413b0a9fe5672e7339ec3e5e6d3986b15f57ae24e7robertphillips@google.com    }
342eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org    fFlags = flags;
343eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org
34491217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fInfo.push(SkObjectParser::BitmapToString(bitmap));
34549f085dddff10473b6ebf832a974288300224e60bsalomon    if (src) {
34691217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com        fInfo.push(SkObjectParser::RectToString(*src, "Src: "));
347b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com    }
34891217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fInfo.push(SkObjectParser::RectToString(dst, "Dst: "));
34949f085dddff10473b6ebf832a974288300224e60bsalomon    if (paint) {
35091217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com        fInfo.push(SkObjectParser::PaintToString(*paint));
351b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com    }
352eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org    fInfo.push(SkObjectParser::IntToString(fFlags, "Flags: "));
353902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
354902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
3558c89c528f31dff25bce74aabe28abe23a772cb1efmalitavoid SkDrawBitmapRectCommand::execute(SkCanvas* canvas) const {
356eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org    canvas->drawBitmapRectToRect(fBitmap, this->srcRect(), fDst, fPaintPtr, fFlags);
357902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
358902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
3597a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgbool SkDrawBitmapRectCommand::render(SkCanvas* canvas) const {
3606ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    render_bitmap(canvas, fBitmap, this->srcRect());
3616ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    return true;
36253ec73d1e663c781cf44def060b5e8f669709fdcrobertphillips@google.com}
36353ec73d1e663c781cf44def060b5e8f669709fdcrobertphillips@google.com
3647a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgSkBeginCommentGroupCommand::SkBeginCommentGroupCommand(const char* description)
3659bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kBeginCommentGroup_OpType)
3660a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    , fDescription(description) {
3670a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    SkString* temp = new SkString;
3680a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    temp->appendf("Description: %s", description);
3690a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    fInfo.push(temp);
3700a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com}
3710a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
3727a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgSkCommentCommand::SkCommentCommand(const char* kywd, const char* value)
3739bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kComment_OpType)
3740a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    , fKywd(kywd)
3750a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    , fValue(value) {
3760a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    SkString* temp = new SkString;
3770a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    temp->appendf("%s: %s", kywd, value);
3780a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com    fInfo.push(temp);
3790a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com}
3800a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
381db35dab49e0e6bf16ccad5052bf6e6826daad27dskia.committer@gmail.comSkEndCommentGroupCommand::SkEndCommentGroupCommand()
3829bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kEndCommentGroup_OpType) {
3830a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com}
3840a4805e33f8ddb445a2fd061462e715e1707f049robertphillips@google.com
38557f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgSkDrawOvalCommand::SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint)
3869bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kDrawOval_OpType) {
387a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fOval = oval;
388a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fPaint = paint;
38967baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
390a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::RectToString(oval));
391a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::PaintToString(paint));
39267baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com}
39367baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
3948c89c528f31dff25bce74aabe28abe23a772cb1efmalitavoid SkDrawOvalCommand::execute(SkCanvas* canvas) const {
395a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    canvas->drawOval(fOval, fPaint);
39667baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com}
39767baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
3987a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgbool SkDrawOvalCommand::render(SkCanvas* canvas) const {
3996ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->clear(0xFFFFFFFF);
4006ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->save();
4016ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
4026ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    xlate_and_scale_to_bounds(canvas, fOval);
4036ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
4046ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    SkPaint p;
4056ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    p.setColor(SK_ColorBLACK);
4066ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    p.setStyle(SkPaint::kStroke_Style);
4076ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
4086ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->drawOval(fOval, p);
4096ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->restore();
4106ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
4116ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    return true;
4126ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com}
4136ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
41457f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgSkDrawPaintCommand::SkDrawPaintCommand(const SkPaint& paint)
4159bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kDrawPaint_OpType) {
416a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fPaint = paint;
417902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
418a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::PaintToString(paint));
419902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
420902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
4218c89c528f31dff25bce74aabe28abe23a772cb1efmalitavoid SkDrawPaintCommand::execute(SkCanvas* canvas) const {
422a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    canvas->drawPaint(fPaint);
423902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
424902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
4257a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgbool SkDrawPaintCommand::render(SkCanvas* canvas) const {
4266ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->clear(0xFFFFFFFF);
4276ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->drawPaint(fPaint);
4286ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    return true;
4296ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com}
4306ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
43157f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgSkDrawPathCommand::SkDrawPathCommand(const SkPath& path, const SkPaint& paint)
4329bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kDrawPath_OpType) {
43391217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fPath = path;
43491217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fPaint = paint;
435902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
43691217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fInfo.push(SkObjectParser::PathToString(path));
43791217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fInfo.push(SkObjectParser::PaintToString(paint));
438902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
439902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
4408c89c528f31dff25bce74aabe28abe23a772cb1efmalitavoid SkDrawPathCommand::execute(SkCanvas* canvas) const {
44191217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    canvas->drawPath(fPath, fPaint);
442902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
443902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
4447a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgbool SkDrawPathCommand::render(SkCanvas* canvas) const {
4456ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    render_path(canvas, fPath);
4466ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    return true;
4476dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com}
4486dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
449160ebb2bfa0794d72d31a786793b13413289863dfmalitaSkBeginDrawPictureCommand::SkBeginDrawPictureCommand(const SkPicture* picture,
450160ebb2bfa0794d72d31a786793b13413289863dfmalita                                                     const SkMatrix* matrix,
451160ebb2bfa0794d72d31a786793b13413289863dfmalita                                                     const SkPaint* paint)
452160ebb2bfa0794d72d31a786793b13413289863dfmalita    : INHERITED(kBeginDrawPicture_OpType)
453160ebb2bfa0794d72d31a786793b13413289863dfmalita    , fPicture(SkRef(picture)) {
454b3f319fbb01c74e757846d9fcfbf1da174c0cb17robertphillips
455160ebb2bfa0794d72d31a786793b13413289863dfmalita    SkString* str = new SkString;
456160ebb2bfa0794d72d31a786793b13413289863dfmalita    str->appendf("SkPicture: L: %f T: %f R: %f B: %f",
457160ebb2bfa0794d72d31a786793b13413289863dfmalita                 picture->cullRect().fLeft, picture->cullRect().fTop,
458160ebb2bfa0794d72d31a786793b13413289863dfmalita                 picture->cullRect().fRight, picture->cullRect().fBottom);
459160ebb2bfa0794d72d31a786793b13413289863dfmalita    fInfo.push(str);
460b3f319fbb01c74e757846d9fcfbf1da174c0cb17robertphillips
46149f085dddff10473b6ebf832a974288300224e60bsalomon    if (matrix) {
462160ebb2bfa0794d72d31a786793b13413289863dfmalita        fMatrix.set(*matrix);
463b3f319fbb01c74e757846d9fcfbf1da174c0cb17robertphillips        fInfo.push(SkObjectParser::MatrixToString(*matrix));
464b3f319fbb01c74e757846d9fcfbf1da174c0cb17robertphillips    }
465160ebb2bfa0794d72d31a786793b13413289863dfmalita
46649f085dddff10473b6ebf832a974288300224e60bsalomon    if (paint) {
467160ebb2bfa0794d72d31a786793b13413289863dfmalita        fPaint.set(*paint);
468b3f319fbb01c74e757846d9fcfbf1da174c0cb17robertphillips        fInfo.push(SkObjectParser::PaintToString(*paint));
469b3f319fbb01c74e757846d9fcfbf1da174c0cb17robertphillips    }
470160ebb2bfa0794d72d31a786793b13413289863dfmalita
471902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
472902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
473160ebb2bfa0794d72d31a786793b13413289863dfmalitavoid SkBeginDrawPictureCommand::execute(SkCanvas* canvas) const {
474160ebb2bfa0794d72d31a786793b13413289863dfmalita    if (fPaint.isValid()) {
475160ebb2bfa0794d72d31a786793b13413289863dfmalita        SkRect bounds = fPicture->cullRect();
476160ebb2bfa0794d72d31a786793b13413289863dfmalita        if (fMatrix.isValid()) {
477160ebb2bfa0794d72d31a786793b13413289863dfmalita            fMatrix.get()->mapRect(&bounds);
478160ebb2bfa0794d72d31a786793b13413289863dfmalita        }
479160ebb2bfa0794d72d31a786793b13413289863dfmalita        canvas->saveLayer(&bounds, fPaint.get());
480160ebb2bfa0794d72d31a786793b13413289863dfmalita    }
481160ebb2bfa0794d72d31a786793b13413289863dfmalita
482160ebb2bfa0794d72d31a786793b13413289863dfmalita    if (fMatrix.isValid()) {
483160ebb2bfa0794d72d31a786793b13413289863dfmalita        if (!fPaint.isValid()) {
484160ebb2bfa0794d72d31a786793b13413289863dfmalita            canvas->save();
485160ebb2bfa0794d72d31a786793b13413289863dfmalita        }
486160ebb2bfa0794d72d31a786793b13413289863dfmalita        canvas->concat(*fMatrix.get());
487160ebb2bfa0794d72d31a786793b13413289863dfmalita    }
488902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
489902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
490160ebb2bfa0794d72d31a786793b13413289863dfmalitabool SkBeginDrawPictureCommand::render(SkCanvas* canvas) const {
491e898e9c65eb2f10e53c459349b174551b3957545commit-bot@chromium.org    canvas->clear(0xFFFFFFFF);
492e898e9c65eb2f10e53c459349b174551b3957545commit-bot@chromium.org    canvas->save();
493e898e9c65eb2f10e53c459349b174551b3957545commit-bot@chromium.org
494a8d7f0b13cd4c6d773fcf055fe17db75d260fa05robertphillips    xlate_and_scale_to_bounds(canvas, fPicture->cullRect());
495e898e9c65eb2f10e53c459349b174551b3957545commit-bot@chromium.org
4969b14f26d0f3a974f3dd626c8354e1db1cfcd322frobertphillips    canvas->drawPicture(fPicture.get());
497e898e9c65eb2f10e53c459349b174551b3957545commit-bot@chromium.org
498e898e9c65eb2f10e53c459349b174551b3957545commit-bot@chromium.org    canvas->restore();
499e898e9c65eb2f10e53c459349b174551b3957545commit-bot@chromium.org
500e898e9c65eb2f10e53c459349b174551b3957545commit-bot@chromium.org    return true;
501e898e9c65eb2f10e53c459349b174551b3957545commit-bot@chromium.org}
502e898e9c65eb2f10e53c459349b174551b3957545commit-bot@chromium.org
503160ebb2bfa0794d72d31a786793b13413289863dfmalitaSkEndDrawPictureCommand::SkEndDrawPictureCommand(bool restore)
504160ebb2bfa0794d72d31a786793b13413289863dfmalita    : INHERITED(kEndDrawPicture_OpType) , fRestore(restore) { }
505160ebb2bfa0794d72d31a786793b13413289863dfmalita
506160ebb2bfa0794d72d31a786793b13413289863dfmalitavoid SkEndDrawPictureCommand::execute(SkCanvas* canvas) const {
507160ebb2bfa0794d72d31a786793b13413289863dfmalita    if (fRestore) {
508160ebb2bfa0794d72d31a786793b13413289863dfmalita        canvas->restore();
509160ebb2bfa0794d72d31a786793b13413289863dfmalita    }
510160ebb2bfa0794d72d31a786793b13413289863dfmalita}
511160ebb2bfa0794d72d31a786793b13413289863dfmalita
5127a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgSkDrawPointsCommand::SkDrawPointsCommand(SkCanvas::PointMode mode, size_t count,
51357f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org                                         const SkPoint pts[], const SkPaint& paint)
5149bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kDrawPoints_OpType) {
515a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fMode = mode;
516a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fCount = count;
517a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fPts = new SkPoint[count];
518a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    memcpy(fPts, pts, count * sizeof(SkPoint));
519a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fPaint = paint;
520902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
521a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::PointsToString(pts, count));
522a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::ScalarToString(SkIntToScalar((unsigned int)count),
523a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com                                              "Points: "));
524a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::PointModeToString(mode));
525a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::PaintToString(paint));
526902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
527902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
5288c89c528f31dff25bce74aabe28abe23a772cb1efmalitavoid SkDrawPointsCommand::execute(SkCanvas* canvas) const {
529a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    canvas->drawPoints(fMode, fCount, fPts, fPaint);
530902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
531902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
5327a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgbool SkDrawPointsCommand::render(SkCanvas* canvas) const {
5336ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->clear(0xFFFFFFFF);
5346ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->save();
5356ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
5366ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    SkRect bounds;
5376ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
5386ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    bounds.setEmpty();
5396ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    for (unsigned int i = 0; i < fCount; ++i) {
5406ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com        bounds.growToInclude(fPts[i].fX, fPts[i].fY);
5416ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    }
542a009083bd10353b91903cab84362b0e744d3b3b7skia.committer@gmail.com
5436ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    xlate_and_scale_to_bounds(canvas, bounds);
5446ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
5456ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    SkPaint p;
5466ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    p.setColor(SK_ColorBLACK);
5476ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    p.setStyle(SkPaint::kStroke_Style);
5486ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
5496ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->drawPoints(fMode, fCount, fPts, p);
5506ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    canvas->restore();
5516ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
5526ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    return true;
5536ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com}
5546ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
5557a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgSkDrawPosTextCommand::SkDrawPosTextCommand(const void* text, size_t byteLength,
55657f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org                                           const SkPoint pos[], const SkPaint& paint)
5579bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kDrawPosText_OpType) {
558a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    size_t numPts = paint.countText(text, byteLength);
559a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com
560a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fText = new char[byteLength];
561a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    memcpy(fText, text, byteLength);
562a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fByteLength = byteLength;
563a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com
564a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fPos = new SkPoint[numPts];
565a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    memcpy(fPos, pos, numPts * sizeof(SkPoint));
566a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com
567a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fPaint = paint;
568a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com
569a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::TextToString(text, byteLength, paint.getTextEncoding()));
570902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    // TODO(chudy): Test that this works.
571a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::PointsToString(pos, 1));
572a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fInfo.push(SkObjectParser::PaintToString(paint));
573902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
574902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
5758c89c528f31dff25bce74aabe28abe23a772cb1efmalitavoid SkDrawPosTextCommand::execute(SkCanvas* canvas) const {
576a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    canvas->drawPosText(fText, fByteLength, fPos, fPaint);
577902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
578902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
579902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
5807a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgSkDrawPosTextHCommand::SkDrawPosTextHCommand(const void* text, size_t byteLength,
5817a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org                                             const SkScalar xpos[], SkScalar constY,
58257f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org                                             const SkPaint& paint)
5839bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kDrawPosTextH_OpType) {
584a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    size_t numPts = paint.countText(text, byteLength);
585a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com
586a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fText = new char[byteLength];
587a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    memcpy(fText, text, byteLength);
58891217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fByteLength = byteLength;
589a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com
590a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    fXpos = new SkScalar[numPts];
591a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com    memcpy(fXpos, xpos, numPts * sizeof(SkScalar));
592a3a09ab1d5e8ecc6f16b14610f9dd74be569cc29robertphillips@google.com
59391217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fConstY = constY;
59491217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fPaint = paint;
595902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
59691217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fInfo.push(SkObjectParser::TextToString(text, byteLength, paint.getTextEncoding()));
59791217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fInfo.push(SkObjectParser::ScalarToString(xpos[0], "XPOS: "));
59891217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fInfo.push(SkObjectParser::ScalarToString(constY, "SkScalar constY: "));
59991217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fInfo.push(SkObjectParser::PaintToString(paint));
600902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
601902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
6028c89c528f31dff25bce74aabe28abe23a772cb1efmalitavoid SkDrawPosTextHCommand::execute(SkCanvas* canvas) const {
60391217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    canvas->drawPosTextH(fText, fByteLength, fXpos, fConstY, fPaint);
604902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
605902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
606b7425173f96e93b090787e2386ba5f022b6c2869fmalitaSkDrawTextBlobCommand::SkDrawTextBlobCommand(const SkTextBlob* blob, SkScalar x, SkScalar y,
607b7425173f96e93b090787e2386ba5f022b6c2869fmalita                                             const SkPaint& paint)
6089bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kDrawTextBlob_OpType)
609b7425173f96e93b090787e2386ba5f022b6c2869fmalita    , fBlob(blob)
610b7425173f96e93b090787e2386ba5f022b6c2869fmalita    , fXPos(x)
611b7425173f96e93b090787e2386ba5f022b6c2869fmalita    , fYPos(y)
612b7425173f96e93b090787e2386ba5f022b6c2869fmalita    , fPaint(paint) {
613b7425173f96e93b090787e2386ba5f022b6c2869fmalita
614b7425173f96e93b090787e2386ba5f022b6c2869fmalita    blob->ref();
615b7425173f96e93b090787e2386ba5f022b6c2869fmalita
616b7425173f96e93b090787e2386ba5f022b6c2869fmalita    // FIXME: push blob info
617b7425173f96e93b090787e2386ba5f022b6c2869fmalita    fInfo.push(SkObjectParser::ScalarToString(x, "XPOS: "));
618ff3106c214a302ed11471521d86ca004b1d1297dfmalita    fInfo.push(SkObjectParser::ScalarToString(y, "YPOS: "));
619ff3106c214a302ed11471521d86ca004b1d1297dfmalita    fInfo.push(SkObjectParser::RectToString(fBlob->bounds(), "Bounds: "));
620b7425173f96e93b090787e2386ba5f022b6c2869fmalita    fInfo.push(SkObjectParser::PaintToString(paint));
621b7425173f96e93b090787e2386ba5f022b6c2869fmalita}
622b7425173f96e93b090787e2386ba5f022b6c2869fmalita
6238c89c528f31dff25bce74aabe28abe23a772cb1efmalitavoid SkDrawTextBlobCommand::execute(SkCanvas* canvas) const {
624b7425173f96e93b090787e2386ba5f022b6c2869fmalita    canvas->drawTextBlob(fBlob, fXPos, fYPos, fPaint);
625b7425173f96e93b090787e2386ba5f022b6c2869fmalita}
626b7425173f96e93b090787e2386ba5f022b6c2869fmalita
6275577387f25e8321799de71e163f05bd8ef53a40ffmalitabool SkDrawTextBlobCommand::render(SkCanvas* canvas) const {
6285577387f25e8321799de71e163f05bd8ef53a40ffmalita    canvas->clear(SK_ColorWHITE);
6295577387f25e8321799de71e163f05bd8ef53a40ffmalita    canvas->save();
6305577387f25e8321799de71e163f05bd8ef53a40ffmalita
6315577387f25e8321799de71e163f05bd8ef53a40ffmalita    SkRect bounds = fBlob->bounds().makeOffset(fXPos, fYPos);
6325577387f25e8321799de71e163f05bd8ef53a40ffmalita    xlate_and_scale_to_bounds(canvas, bounds);
6335577387f25e8321799de71e163f05bd8ef53a40ffmalita
6345577387f25e8321799de71e163f05bd8ef53a40ffmalita    canvas->drawTextBlob(fBlob.get(), fXPos, fYPos, fPaint);
6355577387f25e8321799de71e163f05bd8ef53a40ffmalita
6365577387f25e8321799de71e163f05bd8ef53a40ffmalita    canvas->restore();
6375577387f25e8321799de71e163f05bd8ef53a40ffmalita
6385577387f25e8321799de71e163f05bd8ef53a40ffmalita    return true;
6395577387f25e8321799de71e163f05bd8ef53a40ffmalita}
6405577387f25e8321799de71e163f05bd8ef53a40ffmalita
6419bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillipsSkDrawPatchCommand::SkDrawPatchCommand(const SkPoint cubics[12], const SkColor colors[4],
6429bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips                                       const SkPoint texCoords[4], SkXfermode* xfermode,
6439bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips                                       const SkPaint& paint)
6449bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kDrawPatch_OpType) {
6459bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    memcpy(fCubics, cubics, sizeof(fCubics));
6469bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    memcpy(fColors, colors, sizeof(fColors));
6479bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    memcpy(fTexCoords, texCoords, sizeof(fTexCoords));
6489bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    fXfermode.reset(xfermode);
6499bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    fPaint = paint;
6509bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips
6519bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    fInfo.push(SkObjectParser::PaintToString(paint));
6529bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips}
6539bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips
6549bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillipsvoid SkDrawPatchCommand::execute(SkCanvas* canvas) const {
6559bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    canvas->drawPatch(fCubics, fColors, fTexCoords, fXfermode, fPaint);
6569bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips}
6579bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips
65857f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgSkDrawRectCommand::SkDrawRectCommand(const SkRect& rect, const SkPaint& paint)
6599bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kDrawRect_OpType) {
66091217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fRect = rect;
66191217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fPaint = paint;
662902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
66391217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fInfo.push(SkObjectParser::RectToString(rect));
66491217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    fInfo.push(SkObjectParser::PaintToString(paint));
665902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
666902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
6678c89c528f31dff25bce74aabe28abe23a772cb1efmalitavoid SkDrawRectCommand::execute(SkCanvas* canvas) const {
66891217d0b0cdf80a1f18ca24d49e4a925d4629f1frobertphillips@google.com    canvas->drawRect(fRect, fPaint);
669902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
670902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
67157f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgSkDrawRRectCommand::SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint)
6729bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kDrawRRect_OpType) {
6730df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fRRect = rrect;
6740df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fPaint = paint;
67567baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
6760df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::RRectToString(rrect));
6770df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::PaintToString(paint));
67867baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com}
67967baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
6808c89c528f31dff25bce74aabe28abe23a772cb1efmalitavoid SkDrawRRectCommand::execute(SkCanvas* canvas) const {
681febc0ec41b4cff6ea69f2b89d72c0d330d198283robertphillips@google.com    canvas->drawRRect(fRRect, fPaint);
68267baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com}
68367baba4892649fdb6fb0827c7d54e5adb7538443robertphillips@google.com
6847a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgbool SkDrawRRectCommand::render(SkCanvas* canvas) const {
6856ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    render_rrect(canvas, fRRect);
6866ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    return true;
6876ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com}
6886ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com
68990667ba5eb88f5cb715f71add583a1c87efbe6a7skia.committer@gmail.comSkDrawDRRectCommand::SkDrawDRRectCommand(const SkRRect& outer,
6903d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org                                         const SkRRect& inner,
69157f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org                                         const SkPaint& paint)
6929bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kDrawDRRect_OpType) {
6933d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    fOuter = outer;
6943d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    fInner = inner;
6953d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    fPaint = paint;
6963d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org
6973d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    fInfo.push(SkObjectParser::RRectToString(outer));
6983d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    fInfo.push(SkObjectParser::RRectToString(inner));
6993d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    fInfo.push(SkObjectParser::PaintToString(paint));
7003d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org}
7013d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org
7028c89c528f31dff25bce74aabe28abe23a772cb1efmalitavoid SkDrawDRRectCommand::execute(SkCanvas* canvas) const {
7033d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    canvas->drawDRRect(fOuter, fInner, fPaint);
7043d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org}
7053d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org
7063d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.orgbool SkDrawDRRectCommand::render(SkCanvas* canvas) const {
7073d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    render_drrect(canvas, fOuter, fInner);
7083d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org    return true;
7093d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org}
7103d305207bd40f4e5ae10010492420a2fdfa1153ccommit-bot@chromium.org
7117a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgSkDrawSpriteCommand::SkDrawSpriteCommand(const SkBitmap& bitmap, int left, int top,
71257f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org                                         const SkPaint* paint)
7139bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kDrawSprite_OpType) {
7140df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fBitmap = bitmap;
7150df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fLeft = left;
7160df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fTop = top;
71749f085dddff10473b6ebf832a974288300224e60bsalomon    if (paint) {
7180df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        fPaint = *paint;
7190df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        fPaintPtr = &fPaint;
7200df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    } else {
7210df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        fPaintPtr = NULL;
7220df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    }
723902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
7240df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::BitmapToString(bitmap));
7250df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::IntToString(left, "Left: "));
7260df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::IntToString(top, "Top: "));
72749f085dddff10473b6ebf832a974288300224e60bsalomon    if (paint) {
7280df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        fInfo.push(SkObjectParser::PaintToString(*paint));
7290df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    }
730902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
731902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
7328c89c528f31dff25bce74aabe28abe23a772cb1efmalitavoid SkDrawSpriteCommand::execute(SkCanvas* canvas) const {
7330df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    canvas->drawSprite(fBitmap, fLeft, fTop, fPaintPtr);
734902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
735902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
7367a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgbool SkDrawSpriteCommand::render(SkCanvas* canvas) const {
7376ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    render_bitmap(canvas, fBitmap);
7386ede1fe62bbb4e98f4eff4e4afb1d20e1e070423robertphillips@google.com    return true;
73953ec73d1e663c781cf44def060b5e8f669709fdcrobertphillips@google.com}
74053ec73d1e663c781cf44def060b5e8f669709fdcrobertphillips@google.com
7417a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgSkDrawTextCommand::SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y,
74257f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org                                     const SkPaint& paint)
7439bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kDrawText_OpType) {
7440df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fText = new char[byteLength];
7450df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    memcpy(fText, text, byteLength);
7460df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fByteLength = byteLength;
7470df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fX = x;
7480df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fY = y;
7490df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fPaint = paint;
750902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
7510df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::TextToString(text, byteLength, paint.getTextEncoding()));
7520df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::ScalarToString(x, "SkScalar x: "));
7530df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::ScalarToString(y, "SkScalar y: "));
7540df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::PaintToString(paint));
755902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
756902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
7578c89c528f31dff25bce74aabe28abe23a772cb1efmalitavoid SkDrawTextCommand::execute(SkCanvas* canvas) const {
7580df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    canvas->drawText(fText, fByteLength, fX, fY, fPaint);
759902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
760902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
7617a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgSkDrawTextOnPathCommand::SkDrawTextOnPathCommand(const void* text, size_t byteLength,
7627a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org                                                 const SkPath& path, const SkMatrix* matrix,
76357f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org                                                 const SkPaint& paint)
7649bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kDrawTextOnPath_OpType) {
7650df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fText = new char[byteLength];
7660df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    memcpy(fText, text, byteLength);
7670df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fByteLength = byteLength;
7680df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fPath = path;
76949f085dddff10473b6ebf832a974288300224e60bsalomon    if (matrix) {
7700df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        fMatrix = *matrix;
7710df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    } else {
7720df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        fMatrix.setIdentity();
7730df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    }
7740df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fPaint = paint;
775902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
7760df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::TextToString(text, byteLength, paint.getTextEncoding()));
7770df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::PathToString(path));
77849f085dddff10473b6ebf832a974288300224e60bsalomon    if (matrix) {
7790df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        fInfo.push(SkObjectParser::MatrixToString(*matrix));
7800df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    }
7810df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::PaintToString(paint));
782902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
783902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
7848c89c528f31dff25bce74aabe28abe23a772cb1efmalitavoid SkDrawTextOnPathCommand::execute(SkCanvas* canvas) const {
7850df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    canvas->drawTextOnPath(fText, fByteLength, fPath,
7860df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com                           fMatrix.isIdentity() ? NULL : &fMatrix,
7870df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com                           fPaint);
788902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
789902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
7907a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgSkDrawVerticesCommand::SkDrawVerticesCommand(SkCanvas::VertexMode vmode, int vertexCount,
7917a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org                                             const SkPoint vertices[], const SkPoint texs[],
7927a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org                                             const SkColor colors[], SkXfermode* xfermode,
7937a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.org                                             const uint16_t indices[], int indexCount,
79457f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org                                             const SkPaint& paint)
7959bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kDrawVertices_OpType) {
7960df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fVmode = vmode;
7970df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com
7980df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fVertexCount = vertexCount;
7990df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com
8000df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fVertices = new SkPoint[vertexCount];
8010df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    memcpy(fVertices, vertices, vertexCount * sizeof(SkPoint));
8020df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com
80349f085dddff10473b6ebf832a974288300224e60bsalomon    if (texs) {
8040df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        fTexs = new SkPoint[vertexCount];
8050df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        memcpy(fTexs, texs, vertexCount * sizeof(SkPoint));
8060df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    } else {
8070df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        fTexs = NULL;
8080df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    }
8090df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com
81049f085dddff10473b6ebf832a974288300224e60bsalomon    if (colors) {
8110df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        fColors = new SkColor[vertexCount];
8120df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        memcpy(fColors, colors, vertexCount * sizeof(SkColor));
8130df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    } else {
8140df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        fColors = NULL;
8150df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    }
8160df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com
8170df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fXfermode = xfermode;
81849f085dddff10473b6ebf832a974288300224e60bsalomon    if (fXfermode) {
8190df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        fXfermode->ref();
8200df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    }
8210df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com
8220df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    if (indexCount > 0) {
8230df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        fIndices = new uint16_t[indexCount];
8240df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        memcpy(fIndices, indices, indexCount * sizeof(uint16_t));
8250df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    } else {
8260df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com        fIndices = NULL;
8270df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    }
8280df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com
8290df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fIndexCount = indexCount;
8300df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fPaint = paint;
8310df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com
832902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    // TODO(chudy)
8330df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::CustomTextToString("To be implemented."));
8340df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::PaintToString(paint));
8350df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com}
8360df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com
8377a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgSkDrawVerticesCommand::~SkDrawVerticesCommand() {
8380df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    delete [] fVertices;
8390df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    delete [] fTexs;
8400df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    delete [] fColors;
8410df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    SkSafeUnref(fXfermode);
8420df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    delete [] fIndices;
843902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
844902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
8458c89c528f31dff25bce74aabe28abe23a772cb1efmalitavoid SkDrawVerticesCommand::execute(SkCanvas* canvas) const {
8460df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    canvas->drawVertices(fVmode, fVertexCount, fVertices,
8470df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com                         fTexs, fColors, fXfermode, fIndices,
8480df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com                         fIndexCount, fPaint);
849902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
850902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
85157f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgSkRestoreCommand::SkRestoreCommand()
8529bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kRestore_OpType) {
85324bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fInfo.push(SkObjectParser::CustomTextToString("No Parameters"));
854902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
855902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
8568c89c528f31dff25bce74aabe28abe23a772cb1efmalitavoid SkRestoreCommand::execute(SkCanvas* canvas) const {
857902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    canvas->restore();
858902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
859902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
8605f6102d07982043542343ff0a6c67b1319ac9fc7Florin MalitaSkSaveCommand::SkSaveCommand()
8619bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kSave_OpType) {
862902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
863902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
8648c89c528f31dff25bce74aabe28abe23a772cb1efmalitavoid SkSaveCommand::execute(SkCanvas* canvas) const {
8655f6102d07982043542343ff0a6c67b1319ac9fc7Florin Malita    canvas->save();
866902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
867902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
8687a11591e5e09493f1589c93d53fd1fe10086920acommit-bot@chromium.orgSkSaveLayerCommand::SkSaveLayerCommand(const SkRect* bounds, const SkPaint* paint,
86957f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org                                       SkCanvas::SaveFlags flags)
8709bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kSaveLayer_OpType) {
87149f085dddff10473b6ebf832a974288300224e60bsalomon    if (bounds) {
87224bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fBounds = *bounds;
87324bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    } else {
87424bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fBounds.setEmpty();
87524bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    }
87624bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com
87749f085dddff10473b6ebf832a974288300224e60bsalomon    if (paint) {
87824bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fPaint = *paint;
87924bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fPaintPtr = &fPaint;
88024bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    } else {
88124bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fPaintPtr = NULL;
88224bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    }
88324bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fFlags = flags;
884902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
88549f085dddff10473b6ebf832a974288300224e60bsalomon    if (bounds) {
88624bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fInfo.push(SkObjectParser::RectToString(*bounds, "Bounds: "));
88724bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    }
88849f085dddff10473b6ebf832a974288300224e60bsalomon    if (paint) {
88924bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com        fInfo.push(SkObjectParser::PaintToString(*paint));
89024bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    }
89124bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com    fInfo.push(SkObjectParser::SaveFlagsToString(flags));
892902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
893902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
8948c89c528f31dff25bce74aabe28abe23a772cb1efmalitavoid SkSaveLayerCommand::execute(SkCanvas* canvas) const {
8957e32851d5473d14db5c396f5877e3dfcb7b19f6dskia.committer@gmail.com    canvas->saveLayer(fBounds.isEmpty() ? NULL : &fBounds,
89624bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com                      fPaintPtr,
89724bfdac3f3a95ad21fbe3c889f218560118f3b9frobertphillips@google.com                      fFlags);
898902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
899902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
9008c89c528f31dff25bce74aabe28abe23a772cb1efmalitavoid SkSaveLayerCommand::vizExecute(SkCanvas* canvas) const {
9011643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org    canvas->save();
9021643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org}
9031643b2c9bc5adb4324bb459bb7811f58bc7c2d62commit-bot@chromium.org
90457f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.orgSkSetMatrixCommand::SkSetMatrixCommand(const SkMatrix& matrix)
9059bafc30c7900375d316d47e24412ddfd8bd0b1f2robertphillips    : INHERITED(kSetMatrix_OpType) {
90670171683e6977af7472f0f465bd81852d0644dddrobertphillips    fUserMatrix.reset();
9070df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fMatrix = matrix;
908902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
9090df2a9a8296173241671d47bd66f8474b4f46358robertphillips@google.com    fInfo.push(SkObjectParser::MatrixToString(matrix));
910902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
911902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
91270171683e6977af7472f0f465bd81852d0644dddrobertphillipsvoid SkSetMatrixCommand::setUserMatrix(const SkMatrix& userMatrix) {
91370171683e6977af7472f0f465bd81852d0644dddrobertphillips    fUserMatrix = userMatrix;
91470171683e6977af7472f0f465bd81852d0644dddrobertphillips}
91570171683e6977af7472f0f465bd81852d0644dddrobertphillips
9168c89c528f31dff25bce74aabe28abe23a772cb1efmalitavoid SkSetMatrixCommand::execute(SkCanvas* canvas) const {
91770171683e6977af7472f0f465bd81852d0644dddrobertphillips    SkMatrix temp = SkMatrix::Concat(fUserMatrix, fMatrix);
91870171683e6977af7472f0f465bd81852d0644dddrobertphillips    canvas->setMatrix(temp);
919902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
920902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
921