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
89e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.orgSkCanvas::SaveLayerStrategy SkLuaCanvas::willSaveLayer(const SkRect* bounds, const SkPaint* paint,
90e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org                                                       SaveFlags flags) {
911c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("saveLayer");
921c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    if (bounds) {
9374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com        lua.pushRect(*bounds, "bounds");
941c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    }
951c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    if (paint) {
9674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com        lua.pushPaint(*paint, "paint");
971c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    }
98e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org
99e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org    this->INHERITED::willSaveLayer(bounds, paint, flags);
100e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org    // No need for a layer.
101e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org    return kNoLayer_SaveLayerStrategy;
102dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
103dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
104e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.orgvoid SkLuaCanvas::willRestore() {
1051c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("restore");
106e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org    this->INHERITED::willRestore();
107dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
108dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
10944c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.orgvoid SkLuaCanvas::didConcat(const SkMatrix& matrix) {
110d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org    switch (matrix.getType()) {
111d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org        case SkMatrix::kTranslate_Mask: {
112d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org            AUTO_LUA("translate");
113d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org            lua.pushScalar(matrix.getTranslateX(), "dx");
114d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org            lua.pushScalar(matrix.getTranslateY(), "dy");
115d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org            break;
116d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org        }
117d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org        case SkMatrix::kScale_Mask: {
118d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org            AUTO_LUA("scale");
119d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org            lua.pushScalar(matrix.getScaleX(), "sx");
120d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org            lua.pushScalar(matrix.getScaleY(), "sy");
121d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org            break;
122d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org        }
123d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org        default: {
124d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org            AUTO_LUA("concat");
125ab885be21bfc389450e6194d0562493c658b3c36commit-bot@chromium.org            // pushMatrix added in https://codereview.chromium.org/203203004/
126ab885be21bfc389450e6194d0562493c658b3c36commit-bot@chromium.org            // Doesn't seem to have ever been working correctly since added
127ab885be21bfc389450e6194d0562493c658b3c36commit-bot@chromium.org            // lua.pushMatrix(matrix);
128d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org            break;
129d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org        }
130d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org    }
131d9ea09e1f29b303e6fa36079e99729d2951925b9commit-bot@chromium.org
13244c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.org    this->INHERITED::didConcat(matrix);
133dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
134dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
13544c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.orgvoid SkLuaCanvas::didSetMatrix(const SkMatrix& matrix) {
13644c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.org    this->INHERITED::didSetMatrix(matrix);
137dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
138dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
1398f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.comvoid SkLuaCanvas::onClipRect(const SkRect& r, SkRegion::Op op, ClipEdgeStyle edgeStyle) {
1401c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("clipRect");
14174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushRect(r, "rect");
1428f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    lua.pushBool(kSoft_ClipEdgeStyle == edgeStyle, "aa");
1438f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    this->INHERITED::onClipRect(r, op, edgeStyle);
144dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
145dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
1468f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.comvoid SkLuaCanvas::onClipRRect(const SkRRect& rrect, SkRegion::Op op, ClipEdgeStyle edgeStyle) {
1471c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("clipRRect");
14874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushRRect(rrect, "rrect");
1498f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    lua.pushBool(kSoft_ClipEdgeStyle == edgeStyle, "aa");
1508f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    this->INHERITED::onClipRRect(rrect, op, edgeStyle);
151dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
152dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
1538f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.comvoid SkLuaCanvas::onClipPath(const SkPath& path, SkRegion::Op op, ClipEdgeStyle edgeStyle) {
1541c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("clipPath");
15574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPath(path, "path");
1568f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    lua.pushBool(kSoft_ClipEdgeStyle == edgeStyle, "aa");
1578f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    this->INHERITED::onClipPath(path, op, edgeStyle);
158dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
159dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
1608f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.comvoid SkLuaCanvas::onClipRegion(const SkRegion& deviceRgn, SkRegion::Op op) {
1611c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("clipRegion");
1628f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    this->INHERITED::onClipRegion(deviceRgn, op);
163dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
164dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
16541af966ab338e95eee81ab618ab28195075338f7reedvoid SkLuaCanvas::onDrawPaint(const SkPaint& paint) {
1661c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawPaint");
16774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPaint(paint, "paint");
168dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
169dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
17041af966ab338e95eee81ab618ab28195075338f7reedvoid SkLuaCanvas::onDrawPoints(PointMode mode, size_t count,
171dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com                               const SkPoint pts[], const SkPaint& paint) {
1721c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawPoints");
1732cfa3200fda29279eba1240170c7e873d12f9d48commit-bot@chromium.org    lua.pushArrayPoint(pts, SkToInt(count), "points");
17474ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPaint(paint, "paint");
175dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
176dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
17741af966ab338e95eee81ab618ab28195075338f7reedvoid SkLuaCanvas::onDrawOval(const SkRect& rect, const SkPaint& paint) {
1781c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawOval");
17974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushRect(rect, "rect");
18074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPaint(paint, "paint");
181dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
182dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
18341af966ab338e95eee81ab618ab28195075338f7reedvoid SkLuaCanvas::onDrawRect(const SkRect& rect, const SkPaint& paint) {
1841c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawRect");
18574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushRect(rect, "rect");
18674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPaint(paint, "paint");
187dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
188dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
18941af966ab338e95eee81ab618ab28195075338f7reedvoid SkLuaCanvas::onDrawRRect(const SkRRect& rrect, const SkPaint& paint) {
1901c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawRRect");
19174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushRRect(rrect, "rrect");
19274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPaint(paint, "paint");
193dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
194dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
195ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.orgvoid SkLuaCanvas::onDrawDRRect(const SkRRect& outer, const SkRRect& inner,
196ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org                               const SkPaint& paint) {
197ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org    AUTO_LUA("drawDRRect");
198ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org    lua.pushRRect(outer, "outer");
199ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org    lua.pushRRect(inner, "inner");
200ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org    lua.pushPaint(paint, "paint");
201ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org}
202ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org
20341af966ab338e95eee81ab618ab28195075338f7reedvoid SkLuaCanvas::onDrawPath(const SkPath& path, const SkPaint& paint) {
2041c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawPath");
20574ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPath(path, "path");
20674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPaint(paint, "paint");
207dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
208dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
20941af966ab338e95eee81ab618ab28195075338f7reedvoid SkLuaCanvas::onDrawBitmap(const SkBitmap& bitmap, SkScalar x, SkScalar y,
21041af966ab338e95eee81ab618ab28195075338f7reed                               const SkPaint* paint) {
2111c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawBitmap");
2121c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    if (paint) {
21374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com        lua.pushPaint(*paint, "paint");
2141c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    }
215dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
216dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
21741af966ab338e95eee81ab618ab28195075338f7reedvoid SkLuaCanvas::onDrawBitmapRect(const SkBitmap& bitmap, const SkRect* src, const SkRect& dst,
21841af966ab338e95eee81ab618ab28195075338f7reed                                   const SkPaint* paint, DrawBitmapRectFlags flags) {
21941af966ab338e95eee81ab618ab28195075338f7reed    AUTO_LUA("drawBitmapRect");
2201c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    if (paint) {
22174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com        lua.pushPaint(*paint, "paint");
2221c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    }
223dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
224dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
22541af966ab338e95eee81ab618ab28195075338f7reedvoid SkLuaCanvas::onDrawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, const SkRect& dst,
22641af966ab338e95eee81ab618ab28195075338f7reed                                   const SkPaint* paint) {
22741af966ab338e95eee81ab618ab28195075338f7reed    AUTO_LUA("drawBitmapNine");
22841af966ab338e95eee81ab618ab28195075338f7reed    if (paint) {
22941af966ab338e95eee81ab618ab28195075338f7reed        lua.pushPaint(*paint, "paint");
23041af966ab338e95eee81ab618ab28195075338f7reed    }
23141af966ab338e95eee81ab618ab28195075338f7reed}
23241af966ab338e95eee81ab618ab28195075338f7reed
23341af966ab338e95eee81ab618ab28195075338f7reedvoid SkLuaCanvas::onDrawImage(const SkImage* image, SkScalar x, SkScalar y, const SkPaint* paint) {
23441af966ab338e95eee81ab618ab28195075338f7reed    AUTO_LUA("drawImage");
23541af966ab338e95eee81ab618ab28195075338f7reed    if (paint) {
23641af966ab338e95eee81ab618ab28195075338f7reed        lua.pushPaint(*paint, "paint");
23741af966ab338e95eee81ab618ab28195075338f7reed    }
23841af966ab338e95eee81ab618ab28195075338f7reed}
23941af966ab338e95eee81ab618ab28195075338f7reed
24041af966ab338e95eee81ab618ab28195075338f7reedvoid SkLuaCanvas::onDrawImageRect(const SkImage* image, const SkRect* src, const SkRect& dst,
24141af966ab338e95eee81ab618ab28195075338f7reed                                  const SkPaint* paint) {
24241af966ab338e95eee81ab618ab28195075338f7reed    AUTO_LUA("drawImageRect");
24341af966ab338e95eee81ab618ab28195075338f7reed    if (paint) {
24441af966ab338e95eee81ab618ab28195075338f7reed        lua.pushPaint(*paint, "paint");
24541af966ab338e95eee81ab618ab28195075338f7reed    }
24641af966ab338e95eee81ab618ab28195075338f7reed}
24741af966ab338e95eee81ab618ab28195075338f7reed
24841af966ab338e95eee81ab618ab28195075338f7reedvoid SkLuaCanvas::onDrawSprite(const SkBitmap& bitmap, int x, int y, const SkPaint* paint) {
2491c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawSprite");
2501c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    if (paint) {
25174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com        lua.pushPaint(*paint, "paint");
2521c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    }
253dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
254dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
255e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.comvoid SkLuaCanvas::onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y,
256e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com                             const SkPaint& paint) {
2571c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawText");
258e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com    lua.pushEncodedText(paint.getTextEncoding(), text, byteLength);
25974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPaint(paint, "paint");
260dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
261dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
262e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.comvoid SkLuaCanvas::onDrawPosText(const void* text, size_t byteLength, const SkPoint pos[],
263e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com                                const SkPaint& paint) {
2641c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawPosText");
265e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com    lua.pushEncodedText(paint.getTextEncoding(), text, byteLength);
26674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPaint(paint, "paint");
267dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
268dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
269e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.comvoid SkLuaCanvas::onDrawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[],
270e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com                                 SkScalar constY, const SkPaint& paint) {
2711c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawPosTextH");
272e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com    lua.pushEncodedText(paint.getTextEncoding(), text, byteLength);
27374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPaint(paint, "paint");
274dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
275dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
276e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.comvoid SkLuaCanvas::onDrawTextOnPath(const void* text, size_t byteLength, const SkPath& path,
277e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com                                   const SkMatrix* matrix, const SkPaint& paint) {
2781c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawTextOnPath");
27974ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPath(path, "path");
280e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com    lua.pushEncodedText(paint.getTextEncoding(), text, byteLength);
28174ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPaint(paint, "paint");
282dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
283dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
284b7425173f96e93b090787e2386ba5f022b6c2869fmalitavoid SkLuaCanvas::onDrawTextBlob(const SkTextBlob *blob, SkScalar x, SkScalar y,
285b7425173f96e93b090787e2386ba5f022b6c2869fmalita                                 const SkPaint &paint) {
286b7425173f96e93b090787e2386ba5f022b6c2869fmalita    AUTO_LUA("drawTextBlob");
287b7425173f96e93b090787e2386ba5f022b6c2869fmalita    lua.pushTextBlob(blob, "blob");
288b7425173f96e93b090787e2386ba5f022b6c2869fmalita    lua.pushScalar(x, "x");
289b7425173f96e93b090787e2386ba5f022b6c2869fmalita    lua.pushScalar(y, "y");
290b7425173f96e93b090787e2386ba5f022b6c2869fmalita    lua.pushPaint(paint, "paint");
291b7425173f96e93b090787e2386ba5f022b6c2869fmalita}
292b7425173f96e93b090787e2386ba5f022b6c2869fmalita
293d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reedvoid SkLuaCanvas::onDrawPicture(const SkPicture* picture, const SkMatrix* matrix,
294d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed                                const SkPaint* paint) {
2951c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawPicture");
296dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com    // call through so we can see the nested picture ops
297d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed    this->INHERITED::onDrawPicture(picture, matrix, paint);
298dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
299dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
30041af966ab338e95eee81ab618ab28195075338f7reedvoid SkLuaCanvas::onDrawVertices(VertexMode vmode, int vertexCount,
301dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com                                 const SkPoint vertices[], const SkPoint texs[],
302dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com                                 const SkColor colors[], SkXfermode* xmode,
303dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com                                 const uint16_t indices[], int indexCount,
304dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com                                 const SkPaint& paint) {
3051c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawVertices");
30674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPaint(paint, "paint");
307dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
308