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
84e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.orgvoid SkLuaCanvas::willSave(SaveFlags flags) {
851c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("save");
86e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org    this->INHERITED::willSave(flags);
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
165dff7e11c2000d6745261de046d76b1500a05ece9reed@google.comvoid SkLuaCanvas::drawPaint(const SkPaint& paint) {
1661c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawPaint");
16774ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPaint(paint, "paint");
168dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
169dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
170dff7e11c2000d6745261de046d76b1500a05ece9reed@google.comvoid SkLuaCanvas::drawPoints(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
177dff7e11c2000d6745261de046d76b1500a05ece9reed@google.comvoid SkLuaCanvas::drawOval(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
1837ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.comvoid SkLuaCanvas::drawRect(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
189dff7e11c2000d6745261de046d76b1500a05ece9reed@google.comvoid SkLuaCanvas::drawRRect(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
2037ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.comvoid SkLuaCanvas::drawPath(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
209dff7e11c2000d6745261de046d76b1500a05ece9reed@google.comvoid SkLuaCanvas::drawBitmap(const SkBitmap& bitmap, SkScalar x, SkScalar y,
210eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org                             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
217dff7e11c2000d6745261de046d76b1500a05ece9reed@google.comvoid SkLuaCanvas::drawBitmapRectToRect(const SkBitmap& bitmap, const SkRect* src,
218eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org                                       const SkRect& dst, const SkPaint* paint,
219eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org                                       DrawBitmapRectFlags flags) {
2201c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawBitmapRectToRect");
2211c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    if (paint) {
22274ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com        lua.pushPaint(*paint, "paint");
2231c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    }
224dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
225dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
226dff7e11c2000d6745261de046d76b1500a05ece9reed@google.comvoid SkLuaCanvas::drawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& m,
227eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org                                   const SkPaint* paint) {
2281c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawBitmapMatrix");
2291c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    if (paint) {
23074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com        lua.pushPaint(*paint, "paint");
2311c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    }
232dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
233dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
234dff7e11c2000d6745261de046d76b1500a05ece9reed@google.comvoid SkLuaCanvas::drawSprite(const SkBitmap& bitmap, int x, int y,
235dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com                               const SkPaint* paint) {
2361c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawSprite");
2371c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    if (paint) {
23874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com        lua.pushPaint(*paint, "paint");
2391c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    }
240dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
241dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
242e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.comvoid SkLuaCanvas::onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y,
243e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com                             const SkPaint& paint) {
2441c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawText");
245e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com    lua.pushEncodedText(paint.getTextEncoding(), text, byteLength);
24674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPaint(paint, "paint");
247dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
248dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
249e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.comvoid SkLuaCanvas::onDrawPosText(const void* text, size_t byteLength, const SkPoint pos[],
250e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com                                const SkPaint& paint) {
2511c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawPosText");
252e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com    lua.pushEncodedText(paint.getTextEncoding(), text, byteLength);
25374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPaint(paint, "paint");
254dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
255dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
256e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.comvoid SkLuaCanvas::onDrawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[],
257e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com                                 SkScalar constY, const SkPaint& paint) {
2581c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawPosTextH");
259e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com    lua.pushEncodedText(paint.getTextEncoding(), text, byteLength);
26074ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPaint(paint, "paint");
261dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
262dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
263e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.comvoid SkLuaCanvas::onDrawTextOnPath(const void* text, size_t byteLength, const SkPath& path,
264e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com                                   const SkMatrix* matrix, const SkPaint& paint) {
2651c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawTextOnPath");
26674ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPath(path, "path");
267e3823fd901674e22269637a669ac2b3e2667dc9creed@google.com    lua.pushEncodedText(paint.getTextEncoding(), text, byteLength);
26874ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPaint(paint, "paint");
269dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
270dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
2719b14f26d0f3a974f3dd626c8354e1db1cfcd322frobertphillipsvoid SkLuaCanvas::onDrawPicture(const SkPicture* picture) {
2721c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawPicture");
273dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com    // call through so we can see the nested picture ops
2749b14f26d0f3a974f3dd626c8354e1db1cfcd322frobertphillips    this->INHERITED::onDrawPicture(picture);
275dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
276dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
277dff7e11c2000d6745261de046d76b1500a05ece9reed@google.comvoid SkLuaCanvas::drawVertices(VertexMode vmode, int vertexCount,
278dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com                                 const SkPoint vertices[], const SkPoint texs[],
279dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com                                 const SkColor colors[], SkXfermode* xmode,
280dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com                                 const uint16_t indices[], int indexCount,
281dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com                                 const SkPaint& paint) {
2821c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawVertices");
28374ce6f046c8c8990172cebcfa830c8e5f5e42a1ereed@google.com    lua.pushPaint(paint, "paint");
284dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
285dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com
286dff7e11c2000d6745261de046d76b1500a05ece9reed@google.comvoid SkLuaCanvas::drawData(const void* data, size_t length) {
2871c5a94f5e01d0851bfeceb7d17ad7d693bdc899emike@reedtribe.org    AUTO_LUA("drawData");
288dff7e11c2000d6745261de046d76b1500a05ece9reed@google.com}
289