public int AddEventHandlerLua(Movie movie = null, Button button = null) { if (luaState==null) return 0; Lua.lua_State l = (Lua.lua_State)luaState; string ev; int luaHandlerId; int handlerId; /* 1: LWF_LWF instance */ /* 2: string */ /* 3: function */ ev = Lua.lua_tostring(l, 2).ToString(); Lua.lua_getglobal(l, "LWF"); /* -1: LWF */ if (!Lua.lua_istable(l, -1)) { Lua.lua_pop(l, 1); /* 0 */ goto error; } Lua.lua_getfield(l, -1, "Instances"); /* -2: LWF */ /* -1: LWF.Instances */ Lua.lua_remove(l, -2); /* -1: LWF.Instances */ if (!Lua.lua_istable(l, -1)) { Lua.lua_pop(l, 1); /* 0 */ goto error; } Lua.lua_getfield(l, -1, instanceIdString); /* -2: LWF.Instances */ /* -1: LWF.Instances.<instanceId> */ Lua.lua_remove(l, -2); /* -1: LWF.Instances.<instanceId> */ if (!Lua.lua_istable(l, -1)) { Lua.lua_pop(l, 1); /* 0 */ goto error; } Lua.lua_getfield(l, -1, "Handlers"); /* -2: LWF.Instances.<instanceId> */ /* -1: LWF.Instances.<instanceId>.Handlers */ Lua.lua_remove(l, -2); /* -1: LWF.Instances.<instanceId>.Handlers */ if (!Lua.lua_istable(l, -1)) { Lua.lua_pop(l, 1); /* 0 */ goto error; } Lua.lua_pushvalue(l, 3); /* -2: LWF.Instances.<instanceId>.Handlers */ /* -1: function */ luaHandlerId = GetEventOffset(); Lua.lua_setfield(l, -2, luaHandlerId.ToString()); /* LWF.Instances.<instanceId>.Handlers.<luaHandlerId> = function */ /* -1: LWF.Instances.<instanceId>.Handlers */ Lua.lua_pop(l, 1); /* 0 */ if (movie != null) { if (string.IsNullOrEmpty(ev) || MovieEvents.ContainsKey(ev)) { /* Movie event */ handlerId = movie.AddEventHandler(ev, (Movie m) => { Lua.lua_State _l = (Lua.lua_State)m.lwf.luaState; if (!m.lwf.PushHandlerLua(luaHandlerId)) return; /* -1: function */ Luna_LWF_Movie.push(_l, m, false); /* -2: function */ /* -1: Movie */ if (Lua.lua_pcall(_l, 1, 0, 0)!=0) Lua.lua_pop(_l, 1); }); } else { handlerId = movie.AddEventHandler(ev, () => { Lua.lua_State _l = (Lua.lua_State)movie.lwf.luaState; if (!movie.lwf.PushHandlerLua(luaHandlerId)) return; /* -1: function */ /* User defined event */ Lua.lua_createtable(_l, 0, 2); /* -2: function */ /* -1: table */ Lua.lua_pushstring(_l, ev); /* -3: function */ /* -2: table */ /* -1: string(type) */ Lua.lua_setfield(_l, -2, "type"); /* -2: function */ /* -1: table */ if (Lua.lua_istable(_l, 2)) { Lua.lua_getfield(_l, 2, "param"); /* -3: function */ /* -2: table */ /* -1: param */ } else { Lua.lua_pushnil(_l); /* -3: function */ /* -2: table */ /* -1: nil */ } Lua.lua_setfield(_l, -2, "param"); /* -2: function */ /* -1: table */ if (Lua.lua_pcall(_l, 1, 0, 0)!=0) Lua.lua_pop(_l, 1); /* 0 */ }); } } else if (button != null) { if (string.Compare(ev, "keyPress") == 0) { handlerId = button.AddEventHandler(ev, (Button b, int k) => { if (!b.lwf.PushHandlerLua(luaHandlerId)) return; /* -1: function */ Lua.lua_State _l = (Lua.lua_State)b.lwf.luaState; Luna_LWF_Button.push(_l, b, false); Lua.lua_pushnumber(_l, k); /* -3: function */ /* -2: Button */ /* -1: int */ if (Lua.lua_pcall(l, 2, 0, 0)!=0) Lua.lua_pop(l, 1); /* 0 */ }); } else { handlerId = button.AddEventHandler(ev, (Button b) => { if (!b.lwf.PushHandlerLua(luaHandlerId)) return; /* -1: function */ Lua.lua_State _l = (Lua.lua_State)b.lwf.luaState; Luna_LWF_Button.push(_l, b, false); /* -2: function */ /* -1: Button */ if (Lua.lua_pcall(l, 1, 0, 0)!=0) Lua.lua_pop(l, 1); /* 0 */ }); } } else { handlerId = AddEventHandler(ev, (Movie m, Button b) => { if (!m.lwf.PushHandlerLua(luaHandlerId)) return; /* -1: function */ Lua.lua_State _l = (Lua.lua_State)m.lwf.luaState; Luna_LWF_Movie.push(_l, m, false); Luna_LWF_Button.push(_l, b, false); /* -3: function */ /* -2: Movie */ /* -1: Button */ if (Lua.lua_pcall(l, 2, 0, 0)!=0) Lua.lua_pop(l, 1); /* 0 */ }); } Lua.lua_pushnumber(l, handlerId); /* -1: handlerId */ return 1; error: Lua.lua_pushnumber(l, -1); /* -1: -1 */ return 1; }
public int AddEventHandlerLua(Movie movie = null, Button button = null) { if (luaState == null) { return(0); } Lua.lua_State l = (Lua.lua_State)luaState; string ev; int luaHandlerId; int handlerId; /* 1: LWF_LWF instance */ /* 2: string */ /* 3: function */ ev = Lua.lua_tostring(l, 2).ToString(); Lua.lua_getglobal(l, "LWF"); /* -1: LWF */ if (!Lua.lua_istable(l, -1)) { Lua.lua_pop(l, 1); /* 0 */ goto error; } Lua.lua_getfield(l, -1, "Instances"); /* -2: LWF */ /* -1: LWF.Instances */ Lua.lua_remove(l, -2); /* -1: LWF.Instances */ if (!Lua.lua_istable(l, -1)) { Lua.lua_pop(l, 1); /* 0 */ goto error; } Lua.lua_getfield(l, -1, instanceIdString); /* -2: LWF.Instances */ /* -1: LWF.Instances.<instanceId> */ Lua.lua_remove(l, -2); /* -1: LWF.Instances.<instanceId> */ if (!Lua.lua_istable(l, -1)) { Lua.lua_pop(l, 1); /* 0 */ goto error; } Lua.lua_getfield(l, -1, "Handlers"); /* -2: LWF.Instances.<instanceId> */ /* -1: LWF.Instances.<instanceId>.Handlers */ Lua.lua_remove(l, -2); /* -1: LWF.Instances.<instanceId>.Handlers */ if (!Lua.lua_istable(l, -1)) { Lua.lua_pop(l, 1); /* 0 */ goto error; } Lua.lua_pushvalue(l, 3); /* -2: LWF.Instances.<instanceId>.Handlers */ /* -1: function */ luaHandlerId = GetEventOffset(); Lua.lua_setfield(l, -2, luaHandlerId.ToString()); /* LWF.Instances.<instanceId>.Handlers.<luaHandlerId> = function */ /* -1: LWF.Instances.<instanceId>.Handlers */ Lua.lua_pop(l, 1); /* 0 */ if (movie != null) { if (string.IsNullOrEmpty(ev) || MovieEvents.ContainsKey(ev)) { /* Movie event */ handlerId = movie.AddEventHandler(ev, (Movie m) => { Lua.lua_State _l = (Lua.lua_State)m.lwf.luaState; if (!m.lwf.PushHandlerLua(luaHandlerId)) { return; } /* -1: function */ Luna_LWF_Movie.push(_l, m, false); /* -2: function */ /* -1: Movie */ if (Lua.lua_pcall(_l, 1, 0, 0) != 0) { Lua.lua_pop(_l, 1); } }); } else { handlerId = movie.AddEventHandler(ev, () => { Lua.lua_State _l = (Lua.lua_State)movie.lwf.luaState; if (!movie.lwf.PushHandlerLua(luaHandlerId)) { return; } /* -1: function */ /* User defined event */ Lua.lua_createtable(_l, 0, 2); /* -2: function */ /* -1: table */ Lua.lua_pushstring(_l, ev); /* -3: function */ /* -2: table */ /* -1: string(type) */ Lua.lua_setfield(_l, -2, "type"); /* -2: function */ /* -1: table */ if (Lua.lua_istable(_l, 2)) { Lua.lua_getfield(_l, 2, "param"); /* -3: function */ /* -2: table */ /* -1: param */ } else { Lua.lua_pushnil(_l); /* -3: function */ /* -2: table */ /* -1: nil */ } Lua.lua_setfield(_l, -2, "param"); /* -2: function */ /* -1: table */ if (Lua.lua_pcall(_l, 1, 0, 0) != 0) { Lua.lua_pop(_l, 1); } /* 0 */ }); } } else if (button != null) { if (string.Compare(ev, "keyPress") == 0) { handlerId = button.AddEventHandler(ev, (Button b, int k) => { if (!b.lwf.PushHandlerLua(luaHandlerId)) { return; } /* -1: function */ Lua.lua_State _l = (Lua.lua_State)b.lwf.luaState; Luna_LWF_Button.push(_l, b, false); Lua.lua_pushnumber(_l, k); /* -3: function */ /* -2: Button */ /* -1: int */ if (Lua.lua_pcall(l, 2, 0, 0) != 0) { Lua.lua_pop(l, 1); } /* 0 */ }); } else { handlerId = button.AddEventHandler(ev, (Button b) => { if (!b.lwf.PushHandlerLua(luaHandlerId)) { return; } /* -1: function */ Lua.lua_State _l = (Lua.lua_State)b.lwf.luaState; Luna_LWF_Button.push(_l, b, false); /* -2: function */ /* -1: Button */ if (Lua.lua_pcall(l, 1, 0, 0) != 0) { Lua.lua_pop(l, 1); } /* 0 */ }); } } else { handlerId = AddEventHandler(ev, (Movie m, Button b) => { if (!m.lwf.PushHandlerLua(luaHandlerId)) { return; } /* -1: function */ Lua.lua_State _l = (Lua.lua_State)m.lwf.luaState; Luna_LWF_Movie.push(_l, m, false); Luna_LWF_Button.push(_l, b, false); /* -3: function */ /* -2: Movie */ /* -1: Button */ if (Lua.lua_pcall(l, 2, 0, 0) != 0) { Lua.lua_pop(l, 1); } /* 0 */ }); } Lua.lua_pushnumber(l, handlerId); /* -1: handlerId */ return(1); error: Lua.lua_pushnumber(l, -1); /* -1: -1 */ return(1); }