diff options
| author | Alexander Pickering <alex@cogarr.net> | 2018-06-30 16:15:05 -0600 |
|---|---|---|
| committer | Alexander Pickering <alex@cogarr.net> | 2018-06-30 16:15:05 -0600 |
| commit | ed58795eaf03bdee0b1fae8d05ce5b86d17549f7 (patch) | |
| tree | 065092f3e95bf74fdba541f6c5f7504757487d3d /src/client/lua_api/gui | |
| parent | 45e61c74802af739736d33c82f27596b45987eee (diff) | |
| download | brokengine-ed58795eaf03bdee0b1fae8d05ce5b86d17549f7.tar.gz brokengine-ed58795eaf03bdee0b1fae8d05ce5b86d17549f7.tar.bz2 brokengine-ed58795eaf03bdee0b1fae8d05ce5b86d17549f7.zip | |
Warning-less build
All compile warning for -Wall have been fixed
Diffstat (limited to 'src/client/lua_api/gui')
| -rw-r--r-- | src/client/lua_api/gui/iguibutton.cpp | 112 | ||||
| -rw-r--r-- | src/client/lua_api/gui/iguibutton.hpp | 2 | ||||
| -rw-r--r-- | src/client/lua_api/gui/iguicheckbox.cpp | 6 | ||||
| -rw-r--r-- | src/client/lua_api/gui/iguielement.cpp | 181 | ||||
| -rw-r--r-- | src/client/lua_api/gui/iguielement.hpp | 1 | ||||
| -rw-r--r-- | src/client/lua_api/gui/iguilabel.cpp | 144 | ||||
| -rw-r--r-- | src/client/lua_api/gui/iguilabel.hpp | 2 | ||||
| -rw-r--r-- | src/client/lua_api/gui/iguiwindow.cpp | 25 |
8 files changed, 243 insertions, 230 deletions
diff --git a/src/client/lua_api/gui/iguibutton.cpp b/src/client/lua_api/gui/iguibutton.cpp index 86e6db8..25a30ed 100644 --- a/src/client/lua_api/gui/iguibutton.cpp +++ b/src/client/lua_api/gui/iguibutton.cpp @@ -24,53 +24,53 @@ using namespace gui; extern IrrlichtDevice* device; char lhashkey[20]; -static LIGUIElement* checkiguibutton(lua_State* L, int index){ - void* ud = luaL_checkudata(L,index,"gui.iguibutton"); - luaL_argcheck(L,ud != NULL, index, "'gui.iguibutton' expected"); - return (LIGUIElement*) ud; -} +//static LIGUIElement* checkiguibutton(lua_State* L, int index){ + //void* ud = luaL_checkudata(L,index,"gui.iguibutton"); + //luaL_argcheck(L,ud != NULL, index, "'gui.iguibutton' expected"); + //return (LIGUIElement*) ud; +//} -static LIGUIElement* checkiguibutton(lua_State* L){ - return checkiguibutton(L,1); -} +//static LIGUIElement* checkiguibutton(lua_State* L){ + //return checkiguibutton(L,1); +//} //The callback even for all gui buttons -static bool iguibuttonevent(irr::SEvent e){ - IGUIElement* caller = (IGUIElement*)e.GUIEvent.Caller; - printf("Some gui something somewhere was pressed\n"); - if(iguielements.find(caller) != iguielements.end()){ - printf("I know what reference is linked to that button: %d!\n",iguielements[caller]); - int ref = iguielements[caller]; - EGUI_EVENT_TYPE etype = e.GUIEvent.EventType; - if(etype == EGET_BUTTON_CLICKED){ - lua_rawgeti(tL,LUA_REGISTRYINDEX,ref); - printf("getting raw, the thing on the top of stack is a %s\n",luaL_typename(tL,-1)); - LIGUIElement* tbut = checkiguibutton(tL,-1); - int hashmapresponse; - char* hashkey = (char*)"onpress"; - int terror = hashmap_get(tbut->funcmap,hashkey,(void**)&hashmapresponse); - if(terror == MAP_OK){ - lua_rawgeti(tL,LUA_REGISTRYINDEX,hashmapresponse); - lua_call(tL,0,0); - }else{ - printf("Tried to call onpress on something that dosen't have onpress\n"); - } - }else if(etype == EGET_ELEMENT_HOVERED){ - printf("Trying to call onhovered!\n"); - lua_rawgeti(tL,LUA_REGISTRYINDEX,ref); - LIGUIElement* tbut = (LIGUIElement*)lua_touserdata(tL,-1); - int hashmapresponse; - int terror = hashmap_get(tbut->funcmap,(char*)"onhovered",(void**)&hashmapresponse); - if(terror == MAP_OK){ - lua_rawgeti(tL,LUA_REGISTRYINDEX,hashmapresponse); - lua_call(tL,0,0); - } - } - } - return false; -} - -//gui.newbutton({x,y},{width,height},text[,parent]) +//static bool iguibuttonevent(irr::SEvent e){ + //IGUIElement* caller = (IGUIElement*)e.GUIEvent.Caller; + //printf("Some gui something somewhere was pressed\n"); + //if(iguielements.find(caller) != iguielements.end()){ + //printf("I know what reference is linked to that button: %d!\n",iguielements[caller]); + //int ref = iguielements[caller]; + //EGUI_EVENT_TYPE etype = e.GUIEvent.EventType; + //if(etype == EGET_BUTTON_CLICKED){ + //lua_rawgeti(tL,LUA_REGISTRYINDEX,ref); + //printf("getting raw, the thing on the top of stack is a %s\n",luaL_typename(tL,-1)); + //LIGUIElement* tbut = checkiguibutton(tL,-1); + //int hashmapresponse; + //char* hashkey = (char*)"onpress"; + //int terror = hashmap_get(tbut->funcmap,hashkey,(void**)&hashmapresponse); + //if(terror == MAP_OK){ + //lua_rawgeti(tL,LUA_REGISTRYINDEX,hashmapresponse); + //lua_call(tL,0,0); + //}else{ + //printf("Tried to call onpress on something that dosen't have onpress\n"); + //} + //}else if(etype == EGET_ELEMENT_HOVERED){ + //printf("Trying to call onhovered!\n"); + //lua_rawgeti(tL,LUA_REGISTRYINDEX,ref); + //LIGUIElement* tbut = (LIGUIElement*)lua_touserdata(tL,-1); + //int hashmapresponse; + //int terror = hashmap_get(tbut->funcmap,(char*)"onhovered",(void**)&hashmapresponse); + //if(terror == MAP_OK){ + //lua_rawgeti(tL,LUA_REGISTRYINDEX,hashmapresponse); + //lua_call(tL,0,0); + //} + //} + //} + //return false; +//} + +//gui.newbutton({{sx,sy},{ex,ey}},"text"[,parent]) static int newiguibutton(lua_State* L){ printf("Createing gui button!\n"); @@ -86,19 +86,21 @@ static int newiguibutton(lua_State* L){ const wchar_t* label_w = irr::core::stringw(label_c).c_str(); lua_pop(L,1); - long x,y,w,h; - popvector2i(L,&w,&h); - popvector2i(L,&x,&y); + long sx,sy,ex,ey; + poprecti(L,&sx,&sy,&ex,&ey); - rect<s32> dim = rect<s32>(x,y,x+w,y+h); + rect<s32> dim = rect<s32>(sx,sy,ex,ey); IGUIEnvironment* env = device->getGUIEnvironment(); IGUIButton* but = env->addButton(dim,parent,-2,label_w,L""); - lua_pushlightuserdata(L,but);// - luaL_getmetatable(L,"gui.iguibutton"); - lua_setmetatable(L,-2); - - registerguicallback(but,EGET_BUTTON_CLICKED,iguibuttonevent); + lua_newtable(L);//{} + lua_pushlightuserdata(L,but);//{},ud_iguibutton + lua_setfield(L,-2,"guielement");//{guielement} + luaL_getmetatable(L,"gui.iguibutton");//{guielement},{m_iguibutton} + lua_setmetatable(L,-2);//{guielement} + + setelementcallback(L,EGET_BUTTON_CLICKED,"onClicked");// + printf("Finished registering callback\n"); return 1; @@ -106,8 +108,6 @@ static int newiguibutton(lua_State* L){ static const luaL_reg iguibutton_f[] = { {"new", newiguibutton}, - {"gethandeler", guigethandeler}, - {"sethandeler", guisethandeler}, {0,0}, }; @@ -118,7 +118,7 @@ static const luaL_reg iguibutton_m[] = { {0,0}, }; -int iguibutton_register(lua_State* L){ +void iguibutton_register(lua_State* L){ tL = L; luaL_newmetatable(L, "gui.iguibutton");//{m_iguibutton} diff --git a/src/client/lua_api/gui/iguibutton.hpp b/src/client/lua_api/gui/iguibutton.hpp index abccbf0..b1595d3 100644 --- a/src/client/lua_api/gui/iguibutton.hpp +++ b/src/client/lua_api/gui/iguibutton.hpp @@ -8,4 +8,4 @@ extern "C" { } #include <irrlicht.h> -int iguibutton_register(lua_State* L); +void iguibutton_register(lua_State* L); diff --git a/src/client/lua_api/gui/iguicheckbox.cpp b/src/client/lua_api/gui/iguicheckbox.cpp index ec9cb93..8e1a643 100644 --- a/src/client/lua_api/gui/iguicheckbox.cpp +++ b/src/client/lua_api/gui/iguicheckbox.cpp @@ -20,11 +20,11 @@ int newiguicheckbox(lua_State* L){ IGUIElement* par = 0; if(lua_gettop(L) > 3){ par = (IGUIElement*)lua_touserdata(L,-1);//{startx,starty},{endx,endy},"checkbox_name",ud_parent - printf("Checkbox's parent was %s\n",par); + printf("Checkbox's parent was %p\n",par); lua_pop(L,1);//{startx,starty},{endx,endy},"checkbox_name" } const char* text = lua_tostring(L,-1); - int tlen = strlen(text); + //int tlen = strlen(text); lua_pop(L,1);//{startx,starty},{endx,endy} long startx,starty,endx,endy; popvector2i(L,&endx,&endy);//{startx,starty} @@ -40,7 +40,7 @@ int newiguicheckbox(lua_State* L){ static const luaL_reg iguicheckbox_m[] = { {"move", moveiguielement}, {"setText", setiguitext}, - {"remove", guisethandeler}, + //{"remove", guisethandeler}, {0,0}, }; diff --git a/src/client/lua_api/gui/iguielement.cpp b/src/client/lua_api/gui/iguielement.cpp index d14c18e..bdc13df 100644 --- a/src/client/lua_api/gui/iguielement.cpp +++ b/src/client/lua_api/gui/iguielement.cpp @@ -9,21 +9,22 @@ extern "C" { #include <shared/lua_api/common.hpp> #include <irrlicht.h> #include "../guiparts.hpp" +#include <client/callbackhandeler.hpp> using namespace irr; using namespace core; using namespace gui; -static LIGUIElement* toiguielement(lua_State* L,int index){ - LIGUIElement* ret = (LIGUIElement*)lua_touserdata(L,index); - if(ret == NULL) - luaL_typerror(L,index,"LIGUIButton"); - return ret; -} +//static LIGUIElement* toiguielement(lua_State* L,int index){ + //LIGUIElement* ret = (LIGUIElement*)lua_touserdata(L,index); + //if(ret == NULL) + //luaL_typerror(L,index,"LIGUIButton"); + //return ret; +//} -static LIGUIElement* toiguielement(lua_State* L){ - return toiguielement(L,1); -} +//static LIGUIElement* toiguielement(lua_State* L){ + //return toiguielement(L,1); +//} //move({element},{x,y}) -> nil int moveiguielement(lua_State* L){ @@ -45,18 +46,16 @@ int moveiguielement(lua_State* L){ int getiguiclippingrect(lua_State* L){ printf("Getting iguiclipping elemnt\n"); lua_getfield(L,-1,"guielement"); - IGUIElement *el = (IGUIElement*)lua_touserdata(L,-1); + IGUIElement *el = (IGUIElement*)lua_touserdata(L,-1);//{element},ud_element + lua_pop(L,2); core::rect<s32> rect = el->getAbsoluteClippingRect(); - position2d<s32> ul = rect.UpperLeftCorner; - position2d<s32> lr = rect.LowerRightCorner; - lua_newtable(L); - lua_pushnumber(L,1); - double sx,sy,ex,ey; - pushvector2i(L,ul.X,ul.Y); - lua_settable(L,-3); - lua_pushnumber(L,2); - pushvector2i(L,lr.X,lr.Y); - lua_settable(L,-3); + pushrecti( + L, + rect.UpperLeftCorner.X, + rect.UpperLeftCorner.Y, + rect.LowerRightCorner.X, + rect.LowerRightCorner.Y + ); return 1; } /* @@ -69,15 +68,19 @@ int moveiguielement(lua_State* L){ } */ +//setText({guielement},"text") :: nil int setiguitext(lua_State* L){ - LIGUIElement* ele = toiguielement(L,1); - const char* str = luaL_optstring(L,2,""); - int size = strlen(str); - wchar_t* al = (wchar_t*)malloc(sizeof(wchar_t)*size); - mbstowcs(al,str,size); - ele->e->setText(al); - free(al); - return 0; + const char* text = lua_tostring(L, -1); + lua_pop(L,1);//{guielement} + lua_getfield(L,-1,"guielement");//{guielement},ud_iguielement + IGUIElement* el = (IGUIElement*)lua_touserdata(L,-1);//{guielement},ud_iguielement + lua_pop(L,2); + int textlen = strlen(text); + wchar_t* wtext = (wchar_t*)malloc(sizeof(wchar_t)*textlen); + mbstowcs(wtext,text,textlen); + el->setText(wtext); + free(wtext); + return 0; } //remove({self}) @@ -89,50 +92,90 @@ int removeiguielement(lua_State* L){ return 0; } -int guigethandeler(lua_State* L){ - printf("Called the get index handeler!\n"); - LIGUIElement* button = toiguielement(L); - if(!lua_isstring(L,2)){ - luaL_error(L,"index of iguibutton must be of type 'string'"); - } - const char* lstr = lua_tostring(L,2); - char* hashkey = (char*)malloc(sizeof(char)*strlen(lstr)); - strcpy(hashkey,lstr); - int ref; - if(hashmap_get(button->funcmap,hashkey,(void**)&ref) == MAP_OK){ - //We found the value in our hashmap! - lua_rawgeti(L,LUA_REGISTRYINDEX,ref); - return 1; - }else{ - //Could not find in hashmap, check parrent - lua_getglobal(L,button->type); - printf("Button's type is %s\n",button->type); - lua_getfield(L,-1,lstr); - return 1; - } -} -int guisethandeler(lua_State* L){ - printf("Called the set index handeler\n"); - LIGUIElement* button = toiguielement(L); - if(!lua_isstring(L,2)){ - luaL_error(L,"index of iguibutton must be of type 'string'"); - } - const char* lstr = lua_tostring(L,2); - char* hashkey = (char*)malloc(sizeof(char)*strlen(lstr)); - strcpy(hashkey,lstr); - int oldref; - if(hashmap_get(button->funcmap,hashkey,(void**)&oldref) == MAP_OK){ - luaL_unref(L,LUA_REGISTRYINDEX,oldref); - hashmap_remove(button->funcmap,hashkey); - } - int ref = luaL_ref(L,LUA_REGISTRYINDEX); - if(hashmap_put(button->funcmap,hashkey,(void*)ref) != MAP_OK){ - luaL_error(L,"Error while setting the hashkey on iguibutton"); - } - return 0; +class guicallback{ +private: + int luaitem; + const char* funcname; + lua_State* L; +public: + guicallback(lua_State* L, int lf, const char* fn){ + this->luaitem = lf; + this->L = L; + this->funcname = fn; + } + bool operator () (SEvent e) { + lua_rawgeti(L,LUA_REGISTRYINDEX,this->luaitem);//{guielement} + lua_getfield(L,-1,this->funcname);//{guielement},func() + if(!lua_isnil(L,-1)){ + lua_rawgeti(L,LUA_REGISTRYINDEX,this->luaitem);//{guielement},func(),{guielement} + lua_call(L,1,0);//{iguielement} + lua_pop(L,1);//{} + return true; + }else{ + lua_pop(L,2);//{} + return false; + } + } +}; + +//{guielement} +//popelementcallback(lua_State* L, gui::EGUI_EVENT_TYPE, char*) +void setelementcallback(lua_State* L,gui::EGUI_EVENT_TYPE et, const char* funcname){ + //lua_getfield(L,-1,"guielement");//{guielement} + //IGUIElement* el = (IGUIElement*)lua_touserdata(L,-1);//{guielement},ud_element + //lua_pop(L,1);//{guielement} + registerguielement(L); + //int ref = luaL_ref(L,LUA_REGISTRYINDEX);// + //guicallback* gc = new guicallback(L,ref,funcname);//TODO:Clean this up somehow + //popregisterguicallback(el,et, gc); + //lua_rawgeti(L,LUA_REGISTRYINDEX,ref);//{guielement} } +//int guigethandeler(lua_State* L){ + //printf("Called the get index handeler!\n"); + //LIGUIElement* button = toiguielement(L); + //if(!lua_isstring(L,2)){ + //luaL_error(L,"index of iguibutton must be of type 'string'"); + //} + //const char* lstr = lua_tostring(L,2); + //char* hashkey = (char*)malloc(sizeof(char)*strlen(lstr)); + //strcpy(hashkey,lstr); + //int ref; + //if(hashmap_get(button->funcmap,hashkey,(void**)&ref) == MAP_OK){ + ////We found the value in our hashmap! + //lua_rawgeti(L,LUA_REGISTRYINDEX,ref); + //return 1; + //}else{ + ////Could not find in hashmap, check parrent + //lua_getglobal(L,button->type); + //printf("Button's type is %s\n",button->type); + //lua_getfield(L,-1,lstr); + //return 1; + //} +//} + +//int guisethandeler(lua_State* L){ + //printf("Called the set index handeler\n"); + //LIGUIElement* button = toiguielement(L); + //if(!lua_isstring(L,2)){ + //luaL_error(L,"index of iguibutton must be of type 'string'"); + //} + //const char* lstr = lua_tostring(L,2); + //char* hashkey = (char*)malloc(sizeof(char)*strlen(lstr)); + //strcpy(hashkey,lstr); + //int oldref; + //if(hashmap_get(button->funcmap,hashkey,(void**)&oldref) == MAP_OK){ + //luaL_unref(L,LUA_REGISTRYINDEX,oldref); + //hashmap_remove(button->funcmap,hashkey); + //} + //int ref = luaL_ref(L,LUA_REGISTRYINDEX); + //if(hashmap_put(button->funcmap,hashkey,(void*)ref) != MAP_OK){ + //luaL_error(L,"Error while setting the hashkey on iguibutton"); + //} + //return 0; +//} + //ud_iguielement int guigetid(lua_State* L){ IGUIElement* el = (IGUIElement*)lua_touserdata(L,-1); diff --git a/src/client/lua_api/gui/iguielement.hpp b/src/client/lua_api/gui/iguielement.hpp index 84fc2c9..f860d7e 100644 --- a/src/client/lua_api/gui/iguielement.hpp +++ b/src/client/lua_api/gui/iguielement.hpp @@ -12,6 +12,7 @@ int moveiguielement(lua_State* L); int getiguiclippingrect(lua_State* L); int setiguitext(lua_State* L); int removeiguielement(lua_State* L); +void setelementcallback(lua_State* L, irr::gui::EGUI_EVENT_TYPE et, const char* funcname); int guigethandeler(lua_State* L); int guisethandeler(lua_State* L); int guigetid(lua_State* L); diff --git a/src/client/lua_api/gui/iguilabel.cpp b/src/client/lua_api/gui/iguilabel.cpp index 7c00e84..dce1b15 100644 --- a/src/client/lua_api/gui/iguilabel.cpp +++ b/src/client/lua_api/gui/iguilabel.cpp @@ -13,89 +13,64 @@ extern "C" { #include <irrlicht.h> #include "../guiparts.hpp" #include "iguielement.hpp" +#include "iguilabel.hpp" #include "../../callbackhandeler.hpp" +#include <shared/lua_api/common.hpp> using namespace irr; using namespace gui; -//IrrlichtDevice* guidevice; - -static LIGUIElement* checkiguilabel(lua_State* L, int index){ - void* ud = luaL_checkudata(L,index,"gui.iguilabel"); - luaL_argcheck(L,ud != NULL, index, "'gui.iguilabel' expected"); - return (LIGUIElement*) ud; -} - -static LIGUIElement* checkiguilabel(lua_State* L){ - return checkiguilabel(L,1); -} +extern IrrlichtDevice* device; -static bool iguilabelevent(irr::SEvent e){ - printf("Oh no! an iguilabel generated an event!"); - return false; -} +//IrrlichtDevice* guidevice; +//static bool iguilabelevent(irr::SEvent e){ + //printf("Oh no! an iguilabel generated an event!"); + //return false; +//} +//gui.newguilabel({{sx,sy},{ex,ey}},"text"[,parent]) :: {guielement} static int newiguilabel(lua_State* L){ - printf("Createing label!\n"); - int nargs = lua_gettop(L); - //The position of the text - int startx = luaL_optint(L,1,0); - int starty = luaL_optint(L,2,0); - int endx = luaL_optint(L,3,startx+100); - int endy = luaL_optint(L,4,starty+100); - - //Label and tooltip - wchar_t* label; - const char* labelopt = luaL_optstring(L,5,"Label"); - int bls = strlen(labelopt); - label = (wchar_t*)malloc(sizeof(wchar_t)*(bls)); - mbstowcs(label,labelopt,bls); - printf("Got the string option\n"); - - //If the element has a parrent - int parent = 0; - if(nargs >= 6){ - parent = luaL_optint(L,6,0); - printf("got the parrent\n"); - } - - - //Create the button - IGUIEnvironment* env = guidevice->getGUIEnvironment(); - //Create the label - IGUIStaticText* llabel = (IGUIStaticText*) env->addStaticText(label,core::rect<s32>(startx,starty,endx,endy),false,false, guielements[parent], gui_elenum++, false); - printf("Created the button\n"); - - //Register it's callback - registerguicallback(llabel,EGET_ELEMENT_HOVERED,iguilabelevent); - - //Create it's lua representation - LIGUIElement* ltext = (LIGUIElement*)lua_newuserdata(L, sizeof(LIGUIElement)); - int tref = luaL_ref(L,LUA_REGISTRYINDEX); - iguielements[llabel] = tref; - lua_rawgeti(L,LUA_REGISTRYINDEX,tref);//Put it back on the stack since luaL_ref pops the object. - - //Set it's metatable - luaL_getmetatable(L, "gui.iguilabel"); - lua_setmetatable(L, -2); - - //Create the struct - ltext->e = llabel; - ltext->funcmap = hashmap_new(); - ltext->type = "iguilabel"; - - //Free up anything made in this function - free(label); - - //Put it on top and return it - lua_rawgeti(L,LUA_REGISTRYINDEX,tref); - return 1; + printf("Createing label!\n"); + int nargs = lua_gettop(L); + IGUIElement* parent = NULL; + if(nargs == 3){ + lua_getfield(L,-1,"guielement");//{{sx,sy},{ex,ey}},"text",{guielemtn=parent},parent + parent = (IGUIElement*)lua_touserdata(L,-1); + lua_pop(L,2);//{{sx,sy},{ex,ey}},"text" + } + //{{sx,sy},{ex,ey}},"text" + + const char* text = lua_tostring(L,-1);//{{sx,sy},{ex,ey}},"text" + int bls = strlen(text); + wchar_t* text_w = (wchar_t*)malloc(sizeof(wchar_t)*bls); + mbstowcs(text_w,text,bls); + lua_pop(L,1);//{{sx,sy},{ex,ey}} + + long sx, sy, ex, ey; + poprecti(L,&sx,&sy,&ex,&ey);// + + IGUIEnvironment* env = device->getGUIEnvironment(); + IGUIStaticText* statictext = env->addStaticText( + text_w, + core::rect<s32>(sx,sy,ex,ey), + false, + false, + parent, + -1, + false + ); + + lua_newtable(L); //{} + lua_pushlightuserdata(L,statictext);//{},*statictext + lua_setfield(L,-2,"guielement");//{guielement} + luaL_getmetatable(L,"gui.iguilabel");//{guielement},{m_guielement} + lua_setmetatable(L,-2);//{guielement} + registerguielement(L); + return 1; } static const luaL_reg iguilabel_f[] = { - {"new", newiguilabel}, - {"gethandeler", guigethandeler}, - {"sethandeler", guisethandeler}, + {"newlabel", newiguilabel}, {0,0}, }; @@ -106,23 +81,16 @@ static const luaL_reg iguilabel_m[] = { {0, 0}, }; -int iguilabel_register(lua_State* L, IrrlichtDevice* d){ - - luaL_newmetatable(L, "gui.iguilabel"); - - luaL_register(L,"iguilabel",iguilabel_f); - - lua_pushstring(L,"__index"); - lua_pushstring(L,"gethandeler"); - lua_gettable(L,-3); - lua_settable(L,-4); +void iguilabel_register(lua_State* L){ - lua_pushstring(L,"__newindex"); - lua_pushstring(L,"sethandeler"); - lua_gettable(L,-3); - lua_settable(L,-4); + luaL_newmetatable(L, "gui.iguilabel");//{m_gui.iguilabel} + lua_newtable(L);//{m_gui.iguilabel},{} - luaL_register(L, NULL, iguilabel_m); + luaL_register(L,"iguilabel",iguilabel_m);//{m_gui.iguilabel},{guilabel} + lua_setfield(L,-2,"__index");//{m_gui.iguilabel} + lua_pop(L,1); - return 1; + lua_getglobal(L,"gui");//{gui} + luaL_register(L, NULL,iguilabel_f);//{gui} + lua_pop(L,1);// } diff --git a/src/client/lua_api/gui/iguilabel.hpp b/src/client/lua_api/gui/iguilabel.hpp index c779c70..dba0dbf 100644 --- a/src/client/lua_api/gui/iguilabel.hpp +++ b/src/client/lua_api/gui/iguilabel.hpp @@ -8,4 +8,4 @@ extern "C" { } #include <irrlicht.h> -int iguilabel_register(lua_State* L, irr::IrrlichtDevice* d); +void iguilabel_register(lua_State* L); diff --git a/src/client/lua_api/gui/iguiwindow.cpp b/src/client/lua_api/gui/iguiwindow.cpp index 705af18..30af486 100644 --- a/src/client/lua_api/gui/iguiwindow.cpp +++ b/src/client/lua_api/gui/iguiwindow.cpp @@ -20,17 +20,17 @@ extern "C" { using namespace irr; using namespace gui; -static bool iguiwindowevent(irr::SEvent e){ - int ref = iguielements[e.GUIEvent.Caller]; - lua_rawgeti(tL,LUA_REGISTRYINDEX,ref); - lua_getfield(tL,-1,"close"); +//static bool iguiwindowevent(irr::SEvent e){ + //int ref = iguielements[e.GUIEvent.Caller]; + //lua_rawgeti(tL,LUA_REGISTRYINDEX,ref); + //lua_getfield(tL,-1,"close"); - lua_rawgeti(tL,LUA_REGISTRYINDEX,ref); - lua_call(tL,1,1); + //lua_rawgeti(tL,LUA_REGISTRYINDEX,ref); + //lua_call(tL,1,1); - int shouldclose = lua_toboolean(tL,-1); - return shouldclose == 1; -} + //int shouldclose = lua_toboolean(tL,-1); + //return shouldclose == 1; +//} //new({{sx,sy},{ex,ey}},"title"[,{guielement=parent}]) :: {guielement} static int newiguiwindow(lua_State* L){ @@ -68,11 +68,12 @@ static int newiguiwindow(lua_State* L){ luaL_getmetatable(L,"gui.window");//{element=ud_window},{m_gui.window} lua_setmetatable(L,-2);//{element=ud_window, __meta=gui.window} - int ref = luaL_ref(L,LUA_REGISTRYINDEX);//ref - lua_rawgeti(L,LUA_REGISTRYINDEX,ref);//ref,{element=ud_window, __meta=gui.window} + int ref = luaL_ref(L,LUA_REGISTRYINDEX);// + lua_rawgeti(L,LUA_REGISTRYINDEX,ref);//{element=ud_window, __meta=gui.window} + registerguielement(L); iguielements[wi] = ref; - registerguicallback(wi,EGET_ELEMENT_CLOSED,iguiwindowevent); + //registerguicallback(wi,EGET_ELEMENT_CLOSED,iguiwindowevent); return 1; } |
