aboutsummaryrefslogtreecommitdiff
path: root/src/client/lua_api/gui/iguiimage.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/lua_api/gui/iguiimage.cpp')
-rw-r--r--src/client/lua_api/gui/iguiimage.cpp100
1 files changed, 100 insertions, 0 deletions
diff --git a/src/client/lua_api/gui/iguiimage.cpp b/src/client/lua_api/gui/iguiimage.cpp
new file mode 100644
index 0000000..c349c3e
--- /dev/null
+++ b/src/client/lua_api/gui/iguiimage.cpp
@@ -0,0 +1,100 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <vector>
+#include <memory>
+#include <map>
+#include <functional>
+extern "C" {
+ #include <lua.h>
+ #include <lauxlib.h>
+ #include <lualib.h>
+}
+#include <irrlicht.h>
+#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)
+static int newiguiimage(lua_State* L){
+ printf("Creating iguiimage\n");
+
+ video::ITexture* tex = (video::ITexture*)lua_touserdata(L,-1);
+ lua_pop(L,1);
+
+ 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<s32>(sx,sy),usealpha,0,-1,L"");
+ img->setImage(tex);
+
+ lua_pushlightuserdata(L,img);//ud_iguiimg
+ luaL_getmetatable(L,"iguiimage");//ud_iguiimg,{m_iguiimg}
+ lua_setmetatable(L,-1);//ud_iguiimg
+
+ return 1;
+}
+
+static const luaL_reg iguiimage_m[] = {
+ //{"move", moveiguielement},
+ //{"settext", setiguitext},
+ //{"remove", removeiguielement},
+ {0, 0},
+};
+
+void iguiimage_register(lua_State* L){
+ printf("Loading iguiimage\n");
+ luaL_newmetatable(L,"iguiimage");//{m_iguiimg}
+ 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");
+}