blob: 713203328de722a0dd90918924a6241ae920f11b [file] [log] [blame]
#ifdef WITH_RIVE_SCRIPTING
#include "rive/lua/rive_lua_libs.hpp"
#include "lualib.h"
using namespace rive;
static int pointer_event_index(lua_State* L)
{
int atom;
const char* key = lua_tostringatom(L, 2, &atom);
if (!key)
{
luaL_typeerrorL(L, 2, lua_typename(L, LUA_TSTRING));
return 0;
}
auto pointerEvent = lua_torive<ScriptedPointerEvent>(L, 1);
switch (atom)
{
case (int)LuaAtoms::id:
lua_pushunsigned(L, (unsigned)pointerEvent->m_id);
return 1;
case (int)LuaAtoms::position:
lua_pushvector2(L,
pointerEvent->m_position.x,
pointerEvent->m_position.y);
return 1;
}
luaL_error(L,
"%s is not a valid field of %s",
luaL_checkstring(L, 1),
ScriptedPointerEvent::luaName);
return 0;
}
static int pointer_event_hit(lua_State* L)
{
auto pointerEvent = lua_torive<ScriptedPointerEvent>(L, 1);
if (lua_isboolean(L, 2))
{
pointerEvent->m_hitResult =
lua_toboolean(L, 2) ? HitResult::hit : HitResult::hitOpaque;
}
else
{
pointerEvent->m_hitResult = HitResult::hitOpaque;
}
return 0;
}
static int pointer_event_namecall(lua_State* L)
{
int atom;
const char* str = lua_namecallatom(L, &atom);
if (str != nullptr)
{
switch (atom)
{
case (int)LuaAtoms::hit:
return pointer_event_hit(L);
}
}
luaL_error(L,
"%s is not a valid method of %s",
luaL_checkstring(L, 1),
ScriptedPointerEvent::luaName);
return 0;
}
static int pointer_event_new(lua_State* L)
{
int id = luaL_checkinteger(L, 1);
auto vec = lua_checkvec2d(L, 2);
lua_newrive<ScriptedPointerEvent>(L, id, Vec2D(vec->x, vec->y));
return 1;
}
static const luaL_Reg pointerEventsStaticMethods[] = {
{"new", pointer_event_new},
{nullptr, nullptr}};
int luaopen_rive_input(lua_State* L)
{
{
luaL_register(L,
ScriptedPointerEvent::luaName,
pointerEventsStaticMethods);
}
{
lua_register_rive<ScriptedPointerEvent>(L);
lua_pushcfunction(L, pointer_event_index, nullptr);
lua_setfield(L, -2, "__index");
lua_pushcfunction(L, pointer_event_namecall, nullptr);
lua_setfield(L, -2, "__namecall");
lua_setreadonly(L, -1, true);
lua_pop(L, 1); // pop the metatable
}
return 1;
}
#endif