Events now have 4 arguments (or less)

This commit is contained in:
Bart van Strien
2011-12-20 19:17:26 +01:00
parent adf25991e8
commit d3bd9b1156
6 changed files with 33 additions and 28 deletions
+18 -13
View File
@@ -24,18 +24,20 @@ namespace love
{
namespace event
{
Message::Message(std::string name, int nargs, ...)
: name(name), nargs(nargs)
Message::Message(std::string name, Variant *a, Variant *b, Variant *c, Variant *d)
: name(name), nargs(0)
{
args = new Variant*[nargs];
va_list arg;
va_start(arg, nargs);
for (int i = 0; i < nargs; i++)
args[0] = a;
args[1] = b;
args[2] = c;
args[3] = d;
for (int i = 0; i < 4; i++)
{
args[i] = va_arg(arg, Variant*);
if (!args[i])
continue;
args[i]->retain();
nargs++;
}
va_end(arg);
}
Message::~Message()
@@ -55,13 +57,16 @@ namespace event
Message *Message::fromLua(lua_State *L, int n)
{
std::string name = luaL_checkstring(L, n);
Message *m = new Message(name, 0);
int nargs = lua_gettop(L)-n;
delete[] m->args;
m->args = new Variant*[nargs];
for (int i = 0; i < nargs; i++)
n++;
Message *m = new Message(name);
for (int i = 0; i < 4; i++)
{
if (lua_isnoneornil(L, n+i))
break;
m->args[i] = Variant::fromLua(L, n+i);
if (!m->args[i])
break;
m->nargs++;
}
return m;
}
+2 -2
View File
@@ -39,11 +39,11 @@ namespace event
{
private:
std::string name;
Variant **args;
Variant *args[4];
int nargs;
public:
Message(std::string name, int nargs, ...);
Message(std::string name, Variant *a = NULL, Variant *b = NULL, Variant *c = NULL, Variant *d = NULL);
~Message();
int toLua(lua_State *L);
+6 -6
View File
@@ -98,7 +98,7 @@ namespace sdl
{
arg1 = new Variant(txt, strlen(txt));
arg2 = new Variant((double) e.key.keysym.unicode);
msg = new Message("keypressed", 2, arg1, arg2);
msg = new Message("keypressed", arg1, arg2);
arg1->release();
arg2->release();
}
@@ -107,7 +107,7 @@ namespace sdl
if (keys.find(e.key.keysym.sym, key) && love::event::Event::keys.find(key, txt))
{
arg1 = new Variant(txt, strlen(txt));
msg = new Message("keyreleased", 1, arg1);
msg = new Message("keyreleased", arg1);
arg1->release();
}
break;
@@ -119,7 +119,7 @@ namespace sdl
arg2 = new Variant((double) e.button.y);
arg3 = new Variant(txt, strlen(txt));
msg = new Message((e.type == SDL_MOUSEBUTTONDOWN) ?
"mousepressed" : "mousereleased", 3,
"mousepressed" : "mousereleased",
arg1, arg2, arg3);
arg1->release();
arg2->release();
@@ -131,7 +131,7 @@ namespace sdl
arg1 = new Variant((double) (e.jbutton.which+1));
arg2 = new Variant((double) (e.jbutton.button+1));
msg = new Message((e.type == SDL_JOYBUTTONDOWN) ?
"joystickpressed" : "joystickreleased", 2,
"joystickpressed" : "joystickreleased",
arg1, arg2);
arg1->release();
arg2->release();
@@ -139,11 +139,11 @@ namespace sdl
case SDL_ACTIVEEVENT:
arg1 = new Variant(e.active.gain != 0);
if (e.active.state & SDL_APPINPUTFOCUS)
msg = new Message("focus", 1, arg1);
msg = new Message("focus", arg1);
arg1->release();
break;
case SDL_QUIT:
msg = new Message("quit", 0);
msg = new Message("quit");
break;
}
+1 -1
View File
@@ -99,7 +99,7 @@ namespace sdl
int w_quit(lua_State * L)
{
Message *m = new Message("quit", 0);
Message *m = new Message("quit");
instance->push(m);
return 1;
}