blob: b848263282f31dccdb3214588f6eec32d6f4e4a5 [file]
#ifdef WITH_RIVE_SCRIPTING
#include "rive/lua/rive_lua_libs.hpp"
#include "rive/scripted/transition_child_ref.hpp"
using namespace rive;
void TransitionChild::draw(Renderer* renderer)
{
ScriptBackend::TransitionChildRef{m_artboard, m_worldTransform}.draw(
renderer);
}
float TransitionChild::width() const
{
return ScriptBackend::TransitionChildRef{m_artboard, m_worldTransform}
.width();
}
float TransitionChild::height() const
{
return ScriptBackend::TransitionChildRef{m_artboard, m_worldTransform}
.height();
}
static int transition_child_draw(lua_State* L)
{
auto child = lua_torive<TransitionChild>(L, 1);
auto scriptedRenderer = lua_torive<ScriptedRenderer>(L, 2);
auto renderer = scriptedRenderer->validate(L);
child->draw(renderer);
return 0;
}
static int transition_child_namecall(lua_State* L)
{
int atom;
const char* str = lua_namecallatom(L, &atom);
if (str != nullptr)
{
switch (atom)
{
case (int)LuaAtoms::draw:
return transition_child_draw(L);
}
}
luaL_error(L,
"%s is not a valid method of %s",
str,
TransitionChild::luaName);
return 0;
}
static int transition_child_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 child = lua_torive<TransitionChild>(L, 1);
switch (atom)
{
case (int)LuaAtoms::width:
lua_pushnumber(L, child->width());
return 1;
case (int)LuaAtoms::height:
lua_pushnumber(L, child->height());
return 1;
default:
break;
}
luaL_error(L,
"'%s' is not a valid index of %s",
key,
TransitionChild::luaName);
return 0;
}
int luaopen_rive_transition(lua_State* L)
{
lua_register_rive<TransitionChild>(L);
lua_pushcfunction(L, transition_child_index, nullptr);
lua_setfield(L, -2, "__index");
lua_pushcfunction(L, transition_child_namecall, nullptr);
lua_setfield(L, -2, "__namecall");
lua_setreadonly(L, -1, true);
lua_pop(L, 1); // pop the metatable
return 0;
}
#endif