aboutsummaryrefslogtreecommitdiff
path: root/src/client/lua_api/gui
diff options
context:
space:
mode:
authorAlexander Pickering <alex@cogarr.net>2018-06-30 16:15:05 -0600
committerAlexander Pickering <alex@cogarr.net>2018-06-30 16:15:05 -0600
commited58795eaf03bdee0b1fae8d05ce5b86d17549f7 (patch)
tree065092f3e95bf74fdba541f6c5f7504757487d3d /src/client/lua_api/gui
parent45e61c74802af739736d33c82f27596b45987eee (diff)
downloadbrokengine-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.cpp112
-rw-r--r--src/client/lua_api/gui/iguibutton.hpp2
-rw-r--r--src/client/lua_api/gui/iguicheckbox.cpp6
-rw-r--r--src/client/lua_api/gui/iguielement.cpp181
-rw-r--r--src/client/lua_api/gui/iguielement.hpp1
-rw-r--r--src/client/lua_api/gui/iguilabel.cpp144
-rw-r--r--src/client/lua_api/gui/iguilabel.hpp2
-rw-r--r--src/client/lua_api/gui/iguiwindow.cpp25
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;
}