From 7a72c6702da9e1f6fb536efe844db23f77535a19 Mon Sep 17 00:00:00 2001 From: reed Date: Fri, 7 Nov 2014 10:23:55 -0800 Subject: add patch and clicktracking to lua BUG=skia: Review URL: https://codereview.chromium.org/712613002 --- samplecode/SampleLua.cpp | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) (limited to 'samplecode/SampleLua.cpp') 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: -- cgit v1.2.3