aboutsummaryrefslogtreecommitdiffhomepage
path: root/samplecode/SampleLua.cpp
diff options
context:
space:
mode:
authorGravatar reed <reed@google.com>2014-11-07 10:23:55 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2014-11-07 10:23:55 -0800
commit7a72c6702da9e1f6fb536efe844db23f77535a19 (patch)
treeff1dabfa99425f9e9ea7a81cb04afeeeff31e8f9 /samplecode/SampleLua.cpp
parent0c533a87312437456303e4425bca86cd1c102b2f (diff)
add patch and clicktracking to lua
Diffstat (limited to 'samplecode/SampleLua.cpp')
-rw-r--r--samplecode/SampleLua.cpp35
1 files changed, 33 insertions, 2 deletions
diff --git a/samplecode/SampleLua.cpp b/samplecode/SampleLua.cpp
index 921931b20c..81ac6aef0d 100644
--- a/samplecode/SampleLua.cpp
+++ b/samplecode/SampleLua.cpp
@@ -25,6 +25,8 @@ static const char gDrawName[] = "onDrawContent";
static const char gClickName[] = "onClickHandler";
static const char gUnicharName[] = "onCharHandler";
+static const char gLuaClickHandlerName[] = "lua-click-handler";
+
static const char gMissingCode[] = ""
"local paint = Sk.newPaint()"
"paint:setAntiAlias(true)"
@@ -130,11 +132,15 @@ protected:
if (lua_isfunction(L, -1)) {
fLua->pushScalar(x);
fLua->pushScalar(y);
- if (lua_pcall(L, 2, 1, 0) != LUA_OK) {
+ fLua->pushString("down");
+ if (lua_pcall(L, 3, 1, 0) != LUA_OK) {
SkDebugf("lua err: %s\n", lua_tostring(L, -1));
} else {
if (lua_isboolean(L, -1) && lua_toboolean(L, -1)) {
this->inval(NULL);
+ Click* c = new Click(this);
+ c->setType(gLuaClickHandlerName);
+ return c;
}
}
}
@@ -142,7 +148,32 @@ protected:
}
virtual bool onClick(Click* click) SK_OVERRIDE {
- return this->INHERITED::onClick(click);
+ if (click->getType() != gLuaClickHandlerName) {
+ return this->INHERITED::onClick(click);
+ }
+
+ const char* state = NULL;
+ switch (click->fState) {
+ case Click::kMoved_State:
+ state = "moved";
+ break;
+ case Click::kUp_State:
+ state = "up";
+ break;
+ default:
+ break;
+ }
+ if (state) {
+ this->inval(NULL);
+ lua_State* L = fLua->get();
+ lua_getglobal(L, gClickName);
+ fLua->pushScalar(click->fCurr.x());
+ fLua->pushScalar(click->fCurr.y());
+ fLua->pushString(state);
+ lua_pcall(L, 3, 1, 0);
+ return lua_isboolean(L, -1) && lua_toboolean(L, -1);
+ }
+ return true;
}
private: