Changed how userdata is handled
This commit is contained in:
@@ -1,6 +1,22 @@
|
||||
#include "gui.hpp"
|
||||
#include "luastack.hpp"
|
||||
|
||||
LuaDefineType(Gui);
|
||||
void Gui::store_global_pointer(lua_State *L, Gui *g) {
|
||||
lua_pushstring(L, "gui");
|
||||
lua_pushlightuserdata(L, g);
|
||||
lua_rawset(L, LUA_REGISTRYINDEX);
|
||||
}
|
||||
|
||||
Gui *Gui::fetch_global_pointer(lua_State *L) {
|
||||
lua_pushstring(L, "gui");
|
||||
lua_rawget(L, LUA_REGISTRYINDEX);
|
||||
Gui *result = (Gui *)lua_touserdata(L, -1);
|
||||
if (result == nullptr) {
|
||||
luaL_error(L, "Not currently building a GUI");
|
||||
}
|
||||
lua_pop(L, 1);
|
||||
return result;
|
||||
}
|
||||
|
||||
void Gui::menu_item(const std::string &action, const std::string &label) {
|
||||
GuiElt elt;
|
||||
@@ -19,17 +35,10 @@ bool Gui::has_action(const std::string &action) const {
|
||||
return false;
|
||||
}
|
||||
|
||||
LuaDefine(gui_create, "c") {
|
||||
LuaRet lgui;
|
||||
LuaStack LS(L, lgui);
|
||||
LS.newpointer<Gui>(lgui, new Gui, true);
|
||||
return LS.result();
|
||||
}
|
||||
|
||||
LuaDefine(gui_menu_item, "c") {
|
||||
LuaArg lgui, laction, llabel;
|
||||
LuaStack LS(L, lgui, laction, llabel);
|
||||
Gui *gui = LS.ckuserdata<Gui>(lgui);
|
||||
Gui *gui = Gui::fetch_global_pointer(L);
|
||||
LuaArg laction, llabel;
|
||||
LuaStack LS(L, laction, llabel);
|
||||
std::string action = LS.ckstring(laction);
|
||||
std::string label = LS.ckstring(llabel);
|
||||
gui->menu_item(action, label);
|
||||
|
||||
Reference in New Issue
Block a user