#include #include #include #include #include #include extern "C" { #include #include #include } #include #include "../guiparts.hpp" #include "iguielement.hpp" #include "iguiwindow.hpp" #include "iguiutil.hpp" #include "../../callbackhandeler.hpp" #include "../../../shared/lua_api/common.h" using namespace irr; using namespace gui; extern IrrlichtDevice* device; extern IGUIEnvironment* env; //IrrlichtDevice* guidevice; //static bool iguiimageevent(irr::SEvent e){ //IGUIElement* caller = (IGUIElement*)e.GUIEvent.Caller; //int ref = iguielements[caller]; //EGUI_EVENT_TYPE etype = e.GUIEvent.EventType; //printf("Detected image event\n"); //if(etype == EGET_ELEMENT_CLOSED){ //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 = checkiguiwindow(tL,-1); //int hashmapresponse; //char* hashkey = (char*)"onclose"; //int terror = hashmap_get(tbut->funcmap,hashkey,(void**)&hashmapresponse); //if(terror == MAP_OK){ //Only call if we actually have that function. //printf("Looks like we have an onclose function, calling!\n"); //lua_rawgeti(tL,LUA_REGISTRYINDEX,hashmapresponse); //push the function //lua_rawgeti(tL,LUA_REGISTRYINDEX,ref); //push the referance to iguielement //lua_call(tL,1,1); ////int b = lua_isnoneornil(tL,1); //int a = lua_toboolean(tL,-1); //printf("a:%d\n",a); //return a; //} //} //printf("Oh no! an iguiimage generated an event!"); //return false; //} //new({startx,starty},alpha,{itexture}) -> {guielement} static int newiguiimage(lua_State* L){ //printf("Creating iguiimage\n"); lua_getfield(L,-1,"texture");//{startx,starty},alpha,{itexture},*itexture video::ITexture* tex = (video::ITexture*)lua_touserdata(L,-1); lua_pop(L,2);//{startx,starty},alpha, bool usealpha = lua_toboolean(L,-1); lua_pop(L,1); long sx,sy; popvector2i(L,&sx,&sy); IGUIEnvironment* env = device->getGUIEnvironment(); IGUIImage* img = env->addImage(tex,core::position2d(sx,sy),usealpha,0,-1,L""); img->setImage(tex); lua_newtable(L); lua_pushlightuserdata(L,img);//ud_iguiimg lua_setfield(L,-2,"guielement"); luaL_getmetatable(L,"iguiimage");//ud_iguiimg,{m_iguiimg} lua_setmetatable(L,-2);//ud_iguiimg return 1; } //setcolor(self,{r,g,b,a}) int setcolor(lua_State* L){ long r,g,b,a; popvector4i(L,&r,&g,&b,&a); lua_getfield(L,-1,"guielement"); IGUIImage *img = (IGUIImage*)lua_touserdata(L,-1); img->setColor(video::SColor(a,r,g,b)); lua_pop(L,2); return 0; } static const luaL_reg iguiimage_m[] = { {"move", moveiguielement}, {"getabsrect", getiguiclippingrect}, {"setcolor", setcolor}, //{"settext", setiguitext}, {"remove", removeiguielement}, {0, 0}, }; void iguiimage_register(lua_State* L){ //printf("Loading iguiimage\n"); luaL_newmetatable(L,"iguiimage");//{m_iguiimg} //printf("made meta table\n"); lua_newtable(L);//{m_iguiimg},{} luaL_register(L,NULL,iguiimage_m);//{m_iguiimg},{iguiimg_m} //printf("About to set field\n"); lua_setfield(L,-2,"__index");//{m_iguiimg} lua_pop(L,1);// //printf("Got half way\n"); lua_getglobal(L,"gui");//{gui} lua_pushcfunction(L,newiguiimage);//{gui},newimg() lua_setfield(L,-2,"newiguiimage");//{gui} lua_pop(L,1);// //printf("Finished loading iguiimage\n"); }