LuaYard/Surface.cpp

38 lines
744 B
C++

#include "Surface.h"
#include "LuaHelper.h"
#include <iostream>
using namespace std;
inline Surface::Surface(SDL_Surface* s) : surf(s, SDL_FreeSurface)
{
}
inline int Surface::close(lua_State* L)
{
cout << "In Surface::close" << endl;
auto p = (Surface*)luaL_checkudata(L, 1, "surface");
p->~Surface();
return 0;
}
int Surface::create(lua_State* L, SDL_Surface* s)
{
cout << "In Surface::create" << endl;
auto p = new (lua_newuserdata(L, sizeof(Surface))) Surface(s);
if (luaL_newmetatable(L, "surface"))
{
// GC
lua_pushcfunction(L, close);
lua_setfield(L, -2, "__gc");
// Fields
lua_newtable(L);
settype("surface");
setfn(close, "close");
lua_setfield(L, -2, "__index");
}
lua_setmetatable(L, -2);
return 1;
}