mirror of
https://github.com/love2d/love.git
synced 2026-08-16 00:02:12 +02:00
Events now have 4 arguments (or less)
This commit is contained in:
+18
-13
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user