1dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com/*
2dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com * Copyright 2013 Google Inc.
3dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com *
4dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com * Use of this source code is governed by a BSD-style license that can be
5dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com * found in the LICENSE file.
6dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com */
7dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
8dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com#include "SkLuaCanvas.h"
974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com#include "SkLua.h"
10dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
11dff7e11c2000d6745261de046d76b1500a05ece9reed@google.comextern "C" {
12dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com    #include "lua.h"
13f02fe3d4fec9120da009c941d14af66980911a4emike@reedtribe.org    #include "lauxlib.h"
14dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
15dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
1674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.comclass AutoCallLua : public SkLua {
171c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.orgpublic:
1874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    AutoCallLua(lua_State* L, const char func[], const char verb[]) : INHERITED(L) {
191c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org        lua_getglobal(L, func);
201c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org        if (!lua_isfunction(L, -1)) {
211c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org            int t = lua_type(L, -1);
221c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org            SkDebugf("--- expected function %d\n", t);
231c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org        }
24539f364e80a1e8ee35845b93fd6547e855380cadskia.committer@gmail.com
251c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org        lua_newtable(L);
2674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com        this->pushString(verb, "verb");
27dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com    }
28dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
291c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    ~AutoCallLua() {
303597b73bc6e3e169f1d360de80d77e6e0ab65e96reed@google.com        lua_State* L = this->get();
3174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com        if (lua_pcall(L, 1, 0, 0) != LUA_OK) {
3274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com            SkDebugf("lua err: %s\n", lua_tostring(L, -1));
331c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org        }
3474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com        lua_settop(L, -1);
35dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com    }
361c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org
37e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com    void pushEncodedText(SkPaint::TextEncoding, const void*, size_t);
38e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com
391c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.orgprivate:
4074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    typedef SkLua INHERITED;
419a73104c1b2238aa816de4d1beea3b4f570cfea0reed@google.com};
429a73104c1b2238aa816de4d1beea3b4f570cfea0reed@google.com
4374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com#define AUTO_LUA(verb)  AutoCallLua lua(fL, fFunc.c_str(), verb)
449a73104c1b2238aa816de4d1beea3b4f570cfea0reed@google.com
45e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com
46e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com///////////////////////////////////////////////////////////////////////////////
47e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com
48e3823fd901674e22269637a669ac2b3e2667dc9creed@google.comvoid AutoCallLua::pushEncodedText(SkPaint::TextEncoding enc, const void* text,
49e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com                                  size_t length) {
50e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com    switch (enc) {
51e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com        case SkPaint::kUTF8_TextEncoding:
52e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com            this->pushString((const char*)text, length, "text");
53e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com            break;
54e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com        case SkPaint::kUTF16_TextEncoding: {
55e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com            SkString str;
56e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com            str.setUTF16((const uint16_t*)text, length);
57e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com            this->pushString(str, "text");
58e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com        } break;
59e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com        case SkPaint::kGlyphID_TextEncoding:
607fa2a65c0cfc714364490cb715171461143024e0reed@google.com            this->pushArrayU16((const uint16_t*)text, SkToInt(length >> 1),
617fa2a65c0cfc714364490cb715171461143024e0reed@google.com                               "glyphs");
62e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com            break;
63e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com        case SkPaint::kUTF32_TextEncoding:
64e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com            break;
65e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com    }
66e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com}
67e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com
689a73104c1b2238aa816de4d1beea3b4f570cfea0reed@google.com///////////////////////////////////////////////////////////////////////////////
699a73104c1b2238aa816de4d1beea3b4f570cfea0reed@google.com
70f02fe3d4fec9120da009c941d14af66980911a4emike@reedtribe.orgvoid SkLuaCanvas::pushThis() {
7174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    SkLua(fL).pushCanvas(this);
72f02fe3d4fec9120da009c941d14af66980911a4emike@reedtribe.org}
73f02fe3d4fec9120da009c941d14af66980911a4emike@reedtribe.org
74f02fe3d4fec9120da009c941d14af66980911a4emike@reedtribe.org///////////////////////////////////////////////////////////////////////////////
75f02fe3d4fec9120da009c941d14af66980911a4emike@reedtribe.org
76dff7e11c2000d6745261de046d76b1500a05ece9reed@google.comSkLuaCanvas::SkLuaCanvas(int width, int height, lua_State* L, const char func[])
77e254310a55d55a710309714c48f7fbbe7a6126f7commit-bot@chromium.org    : INHERITED(width, height)
78dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com    , fL(L)
79dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com    , fFunc(func) {
80dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
81dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
82dff7e11c2000d6745261de046d76b1500a05ece9reed@google.comSkLuaCanvas::~SkLuaCanvas() {}
83dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
845f6102d07982043542343ff0a6c67b1319ac9fc7Florin Malitavoid SkLuaCanvas::willSave() {
851c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("save");
865f6102d07982043542343ff0a6c67b1319ac9fc7Florin Malita    this->INHERITED::willSave();
87dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
88dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
894960eeec4a1f2a772654883d7f3615d47bcd5dc3reedSkCanvas::SaveLayerStrategy SkLuaCanvas::getSaveLayerStrategy(const SaveLayerRec& rec) {
901c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("saveLayer");
914960eeec4a1f2a772654883d7f3615d47bcd5dc3reed    if (rec.fBounds) {
924960eeec4a1f2a772654883d7f3615d47bcd5dc3reed        lua.pushRect(*rec.fBounds, "bounds");
931c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    }
944960eeec4a1f2a772654883d7f3615d47bcd5dc3reed    if (rec.fPaint) {
954960eeec4a1f2a772654883d7f3615d47bcd5dc3reed        lua.pushPaint(*rec.fPaint, "paint");
961c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    }
97e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org
984960eeec4a1f2a772654883d7f3615d47bcd5dc3reed    (void)this->INHERITED::getSaveLayerStrategy(rec);
99e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org    // No need for a layer.
100e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org    return kNoLayer_SaveLayerStrategy;
101dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
102dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
103e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.orgvoid SkLuaCanvas::willRestore() {
1041c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("restore");
105e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org    this->INHERITED::willRestore();
106dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
107dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
10844c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.orgvoid SkLuaCanvas::didConcat(const SkMatrix& matrix) {
109d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org    switch (matrix.getType()) {
110d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org        case SkMatrix::kTranslate_Mask: {
111d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org            AUTO_LUA("translate");
112d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org            lua.pushScalar(matrix.getTranslateX(), "dx");
113d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org            lua.pushScalar(matrix.getTranslateY(), "dy");
114d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org            break;
115d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org        }
116d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org        case SkMatrix::kScale_Mask: {
117d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org            AUTO_LUA("scale");
118d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org            lua.pushScalar(matrix.getScaleX(), "sx");
119d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org            lua.pushScalar(matrix.getScaleY(), "sy");
120d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org            break;
121d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org        }
122d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org        default: {
123d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org            AUTO_LUA("concat");
124ab885be21bfc389450e6194d0562493c658b3c36commit-bot@chromium.org            // pushMatrix added in https://codereview.chromium.org/203203004/
125ab885be21bfc389450e6194d0562493c658b3c36commit-bot@chromium.org            // Doesn't seem to have ever been working correctly since added
126ab885be21bfc389450e6194d0562493c658b3c36commit-bot@chromium.org            // lua.pushMatrix(matrix);
127d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org            break;
128d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org        }
129d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org    }
130d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org
13144c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.org    this->INHERITED::didConcat(matrix);
132dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
133dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
13444c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.orgvoid SkLuaCanvas::didSetMatrix(const SkMatrix& matrix) {
13544c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.org    this->INHERITED::didSetMatrix(matrix);
136dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
137dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
1388f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.comvoid SkLuaCanvas::onClipRect(const SkRect& r, SkRegion::Op op, ClipEdgeStyle edgeStyle) {
1391c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("clipRect");
14074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushRect(r, "rect");
1418f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    lua.pushBool(kSoft_ClipEdgeStyle == edgeStyle, "aa");
1428f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    this->INHERITED::onClipRect(r, op, edgeStyle);
143dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
144dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
1458f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.comvoid SkLuaCanvas::onClipRRect(const SkRRect& rrect, SkRegion::Op op, ClipEdgeStyle edgeStyle) {
1461c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("clipRRect");
14774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushRRect(rrect, "rrect");
1488f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    lua.pushBool(kSoft_ClipEdgeStyle == edgeStyle, "aa");
1498f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    this->INHERITED::onClipRRect(rrect, op, edgeStyle);
150dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
151dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
1528f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.comvoid SkLuaCanvas::onClipPath(const SkPath& path, SkRegion::Op op, ClipEdgeStyle edgeStyle) {
1531c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("clipPath");
15474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPath(path, "path");
1558f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    lua.pushBool(kSoft_ClipEdgeStyle == edgeStyle, "aa");
1568f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    this->INHERITED::onClipPath(path, op, edgeStyle);
157dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
158dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
1598f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.comvoid SkLuaCanvas::onClipRegion(const SkRegion& deviceRgn, SkRegion::Op op) {
1601c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("clipRegion");
1618f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    this->INHERITED::onClipRegion(deviceRgn, op);
162dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
163dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
16441af966ab338e95eee81ab618ab28195075338f7reedvoid SkLuaCanvas::onDrawPaint(const SkPaint& paint) {
1651c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawPaint");
16674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPaint(paint, "paint");
167dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
168dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
16941af966ab338e95eee81ab618ab28195075338f7reedvoid SkLuaCanvas::onDrawPoints(PointMode mode, size_t count,
170dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com                               const SkPoint pts[], const SkPaint& paint) {
1711c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawPoints");
1722cfa3200fda29279eba1240170c7e873d12f9d48commit-bot@chromium.org    lua.pushArrayPoint(pts, SkToInt(count), "points");
17374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPaint(paint, "paint");
174dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
175dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
17641af966ab338e95eee81ab618ab28195075338f7reedvoid SkLuaCanvas::onDrawOval(const SkRect& rect, const SkPaint& paint) {
1771c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawOval");
17874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushRect(rect, "rect");
17974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPaint(paint, "paint");
180dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
181dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
18241af966ab338e95eee81ab618ab28195075338f7reedvoid SkLuaCanvas::onDrawRect(const SkRect& rect, const SkPaint& paint) {
1831c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawRect");
18474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushRect(rect, "rect");
18574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPaint(paint, "paint");
186dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
187dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
18841af966ab338e95eee81ab618ab28195075338f7reedvoid SkLuaCanvas::onDrawRRect(const SkRRect& rrect, const SkPaint& paint) {
1891c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawRRect");
19074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushRRect(rrect, "rrect");
19174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPaint(paint, "paint");
192dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
193dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
194ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.orgvoid SkLuaCanvas::onDrawDRRect(const SkRRect& outer, const SkRRect& inner,
195ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org                               const SkPaint& paint) {
196ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org    AUTO_LUA("drawDRRect");
197ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org    lua.pushRRect(outer, "outer");
198ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org    lua.pushRRect(inner, "inner");
199ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org    lua.pushPaint(paint, "paint");
200ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org}
201ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org
20241af966ab338e95eee81ab618ab28195075338f7reedvoid SkLuaCanvas::onDrawPath(const SkPath& path, const SkPaint& paint) {
2031c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawPath");
20474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPath(path, "path");
20574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPaint(paint, "paint");
206dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
207dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
20841af966ab338e95eee81ab618ab28195075338f7reedvoid SkLuaCanvas::onDrawBitmap(const SkBitmap& bitmap, SkScalar x, SkScalar y,
20941af966ab338e95eee81ab618ab28195075338f7reed                               const SkPaint* paint) {
2101c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawBitmap");
2111c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    if (paint) {
21274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com        lua.pushPaint(*paint, "paint");
2131c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    }
214dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
215dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
21641af966ab338e95eee81ab618ab28195075338f7reedvoid SkLuaCanvas::onDrawBitmapRect(const SkBitmap& bitmap, const SkRect* src, const SkRect& dst,
217562fe4767cc73e08a4e039362bc0336aea66ecfbreed                                   const SkPaint* paint, SrcRectConstraint) {
21841af966ab338e95eee81ab618ab28195075338f7reed    AUTO_LUA("drawBitmapRect");
2191c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    if (paint) {
22074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com        lua.pushPaint(*paint, "paint");
2211c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    }
222dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
223dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
22441af966ab338e95eee81ab618ab28195075338f7reedvoid SkLuaCanvas::onDrawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, const SkRect& dst,
22541af966ab338e95eee81ab618ab28195075338f7reed                                   const SkPaint* paint) {
22641af966ab338e95eee81ab618ab28195075338f7reed    AUTO_LUA("drawBitmapNine");
22741af966ab338e95eee81ab618ab28195075338f7reed    if (paint) {
22841af966ab338e95eee81ab618ab28195075338f7reed        lua.pushPaint(*paint, "paint");
22941af966ab338e95eee81ab618ab28195075338f7reed    }
23041af966ab338e95eee81ab618ab28195075338f7reed}
23141af966ab338e95eee81ab618ab28195075338f7reed
23241af966ab338e95eee81ab618ab28195075338f7reedvoid SkLuaCanvas::onDrawImage(const SkImage* image, SkScalar x, SkScalar y, const SkPaint* paint) {
23341af966ab338e95eee81ab618ab28195075338f7reed    AUTO_LUA("drawImage");
23441af966ab338e95eee81ab618ab28195075338f7reed    if (paint) {
23541af966ab338e95eee81ab618ab28195075338f7reed        lua.pushPaint(*paint, "paint");
23641af966ab338e95eee81ab618ab28195075338f7reed    }
23741af966ab338e95eee81ab618ab28195075338f7reed}
23841af966ab338e95eee81ab618ab28195075338f7reed
23941af966ab338e95eee81ab618ab28195075338f7reedvoid SkLuaCanvas::onDrawImageRect(const SkImage* image, const SkRect* src, const SkRect& dst,
240562fe4767cc73e08a4e039362bc0336aea66ecfbreed                                  const SkPaint* paint, SrcRectConstraint) {
24141af966ab338e95eee81ab618ab28195075338f7reed    AUTO_LUA("drawImageRect");
24241af966ab338e95eee81ab618ab28195075338f7reed    if (paint) {
24341af966ab338e95eee81ab618ab28195075338f7reed        lua.pushPaint(*paint, "paint");
24441af966ab338e95eee81ab618ab28195075338f7reed    }
24541af966ab338e95eee81ab618ab28195075338f7reed}
24641af966ab338e95eee81ab618ab28195075338f7reed
247e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.comvoid SkLuaCanvas::onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y,
248e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com                             const SkPaint& paint) {
2491c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawText");
250e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com    lua.pushEncodedText(paint.getTextEncoding(), text, byteLength);
25174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPaint(paint, "paint");
252dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
253dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
254e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.comvoid SkLuaCanvas::onDrawPosText(const void* text, size_t byteLength, const SkPoint pos[],
255e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com                                const SkPaint& paint) {
2561c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawPosText");
257e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com    lua.pushEncodedText(paint.getTextEncoding(), text, byteLength);
25874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPaint(paint, "paint");
259dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
260dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
261e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.comvoid SkLuaCanvas::onDrawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[],
262e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com                                 SkScalar constY, const SkPaint& paint) {
2631c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawPosTextH");
264e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com    lua.pushEncodedText(paint.getTextEncoding(), text, byteLength);
26574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPaint(paint, "paint");
266dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
267dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
268e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.comvoid SkLuaCanvas::onDrawTextOnPath(const void* text, size_t byteLength, const SkPath& path,
269e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com                                   const SkMatrix* matrix, const SkPaint& paint) {
2701c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawTextOnPath");
27174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPath(path, "path");
272e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com    lua.pushEncodedText(paint.getTextEncoding(), text, byteLength);
27374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPaint(paint, "paint");
274dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
275dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
276b7425173f96e93b090787e2386ba5f022b6c2869fmalitavoid SkLuaCanvas::onDrawTextBlob(const SkTextBlob *blob, SkScalar x, SkScalar y,
277b7425173f96e93b090787e2386ba5f022b6c2869fmalita                                 const SkPaint &paint) {
278b7425173f96e93b090787e2386ba5f022b6c2869fmalita    AUTO_LUA("drawTextBlob");
279b7425173f96e93b090787e2386ba5f022b6c2869fmalita    lua.pushTextBlob(blob, "blob");
280b7425173f96e93b090787e2386ba5f022b6c2869fmalita    lua.pushScalar(x, "x");
281b7425173f96e93b090787e2386ba5f022b6c2869fmalita    lua.pushScalar(y, "y");
282b7425173f96e93b090787e2386ba5f022b6c2869fmalita    lua.pushPaint(paint, "paint");
283b7425173f96e93b090787e2386ba5f022b6c2869fmalita}
284b7425173f96e93b090787e2386ba5f022b6c2869fmalita
285d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reedvoid SkLuaCanvas::onDrawPicture(const SkPicture* picture, const SkMatrix* matrix,
286d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed                                const SkPaint* paint) {
2871c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawPicture");
288dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com    // call through so we can see the nested picture ops
289d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    this->INHERITED::onDrawPicture(picture, matrix, paint);
290dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
291dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
29241af966ab338e95eee81ab618ab28195075338f7reedvoid SkLuaCanvas::onDrawVertices(VertexMode vmode, int vertexCount,
293dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com                                 const SkPoint vertices[], const SkPoint texs[],
294dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com                                 const SkColor colors[], SkXfermode* xmode,
295dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com                                 const uint16_t indices[], int indexCount,
296dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com                                 const SkPaint& paint) {
2971c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawVertices");
29874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPaint(paint, "paint");
299dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
300