mirror of
https://github.com/love2d/love.git
synced 2026-08-19 20:19:42 +02:00
The Proxy struct now stores an actual love::Object pointer (rather than void*), which makes code using Proxies a bit cleaner.
--HG-- branch : minor
This commit is contained in:
@@ -102,8 +102,8 @@ Variant::Variant(love::Type udatatype, void *userdata)
|
|||||||
{
|
{
|
||||||
Proxy *p = (Proxy *) userdata;
|
Proxy *p = (Proxy *) userdata;
|
||||||
flags = p->flags;
|
flags = p->flags;
|
||||||
data.userdata = p->data;
|
data.userdata = p->object;
|
||||||
((love::Object *) data.userdata)->retain();
|
p->object->retain();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
data.userdata = userdata;
|
data.userdata = userdata;
|
||||||
|
|||||||
@@ -42,10 +42,7 @@ namespace love
|
|||||||
static int w__gc(lua_State *L)
|
static int w__gc(lua_State *L)
|
||||||
{
|
{
|
||||||
Proxy *p = (Proxy *) lua_touserdata(L, 1);
|
Proxy *p = (Proxy *) lua_touserdata(L, 1);
|
||||||
Object *object = (Object *) p->data;
|
p->object->release();
|
||||||
|
|
||||||
object->release();
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,7 +64,7 @@ static int w__eq(lua_State *L)
|
|||||||
{
|
{
|
||||||
Proxy *p1 = (Proxy *)lua_touserdata(L, 1);
|
Proxy *p1 = (Proxy *)lua_touserdata(L, 1);
|
||||||
Proxy *p2 = (Proxy *)lua_touserdata(L, 2);
|
Proxy *p2 = (Proxy *)lua_touserdata(L, 2);
|
||||||
luax_pushboolean(L, p1->data == p2->data);
|
luax_pushboolean(L, p1->object == p2->object);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -209,7 +206,7 @@ int luax_register_module(lua_State *L, const WrappedModule &m)
|
|||||||
luax_insistregistry(L, REGISTRY_MODULES);
|
luax_insistregistry(L, REGISTRY_MODULES);
|
||||||
|
|
||||||
Proxy *p = (Proxy *)lua_newuserdata(L, sizeof(Proxy));
|
Proxy *p = (Proxy *)lua_newuserdata(L, sizeof(Proxy));
|
||||||
p->data = m.module;
|
p->object = m.module;
|
||||||
p->flags = m.flags;
|
p->flags = m.flags;
|
||||||
|
|
||||||
luaL_newmetatable(L, m.module->getName());
|
luaL_newmetatable(L, m.module->getName());
|
||||||
@@ -383,7 +380,7 @@ void luax_rawnewtype(lua_State *L, const char *name, bits flags, love::Object *o
|
|||||||
|
|
||||||
object->retain();
|
object->retain();
|
||||||
|
|
||||||
u->data = (void *) object;
|
u->object = object;
|
||||||
u->flags = flags;
|
u->flags = flags;
|
||||||
|
|
||||||
luaL_newmetatable(L, name);
|
luaL_newmetatable(L, name);
|
||||||
|
|||||||
@@ -65,8 +65,8 @@ struct Proxy
|
|||||||
// Holds type information (see types.h).
|
// Holds type information (see types.h).
|
||||||
bits flags;
|
bits flags;
|
||||||
|
|
||||||
// The light userdata (pointer to the love::Object).
|
// Pointer to the actual object.
|
||||||
void *data;
|
Object *object;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -409,7 +409,7 @@ T *luax_checktype(lua_State *L, int idx, const char *name, love::bits type)
|
|||||||
if ((u->flags & type) != type)
|
if ((u->flags & type) != type)
|
||||||
luax_typerror(L, idx, name);
|
luax_typerror(L, idx, name);
|
||||||
|
|
||||||
return (T *)u->data;
|
return (T *)u->object;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@@ -428,7 +428,7 @@ T *luax_getmodule(lua_State *L, const char *k, love::bits type)
|
|||||||
|
|
||||||
lua_pop(L, 2);
|
lua_pop(L, 2);
|
||||||
|
|
||||||
return (T *)u->data;
|
return (T *)u->object;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@@ -450,7 +450,7 @@ T *luax_optmodule(lua_State *L, const char *k, love::bits type)
|
|||||||
|
|
||||||
lua_pop(L, 2);
|
lua_pop(L, 2);
|
||||||
|
|
||||||
return (T *) u->data;
|
return (T *) u->object;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -465,7 +465,7 @@ T *luax_optmodule(lua_State *L, const char *k, love::bits type)
|
|||||||
template <typename T>
|
template <typename T>
|
||||||
T *luax_totype(lua_State *L, int idx, const char * /* name */, love::bits /* type */)
|
T *luax_totype(lua_State *L, int idx, const char * /* name */, love::bits /* type */)
|
||||||
{
|
{
|
||||||
return (T *)(((Proxy *)lua_touserdata(L, idx))->data);
|
return (T *)(((Proxy *)lua_touserdata(L, idx))->object);
|
||||||
}
|
}
|
||||||
|
|
||||||
Type luax_type(lua_State *L, int idx);
|
Type luax_type(lua_State *L, int idx);
|
||||||
|
|||||||
@@ -352,11 +352,11 @@ Message *Event::convert(const SDL_Event &e) const
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
Proxy proxy;
|
Proxy proxy;
|
||||||
proxy.data = new love::filesystem::DroppedFile(e.drop.file);
|
proxy.object = new love::filesystem::DroppedFile(e.drop.file);
|
||||||
proxy.flags = FILESYSTEM_DROPPED_FILE_T;
|
proxy.flags = FILESYSTEM_DROPPED_FILE_T;
|
||||||
vargs.push_back(new Variant(FILESYSTEM_DROPPED_FILE_ID, &proxy));
|
vargs.push_back(new Variant(FILESYSTEM_DROPPED_FILE_ID, &proxy));
|
||||||
msg = new Message("filedropped", vargs);
|
msg = new Message("filedropped", vargs);
|
||||||
((Object *) proxy.data)->release();
|
proxy.object->release();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SDL_free(e.drop.file);
|
SDL_free(e.drop.file);
|
||||||
@@ -401,8 +401,8 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const
|
|||||||
case SDL_JOYBUTTONDOWN:
|
case SDL_JOYBUTTONDOWN:
|
||||||
case SDL_JOYBUTTONUP:
|
case SDL_JOYBUTTONUP:
|
||||||
proxy.flags = JOYSTICK_JOYSTICK_T;
|
proxy.flags = JOYSTICK_JOYSTICK_T;
|
||||||
proxy.data = joymodule->getJoystickFromID(e.jbutton.which);
|
proxy.object = joymodule->getJoystickFromID(e.jbutton.which);
|
||||||
if (!proxy.data)
|
if (!proxy.object)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy));
|
vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy));
|
||||||
@@ -414,8 +414,8 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const
|
|||||||
case SDL_JOYAXISMOTION:
|
case SDL_JOYAXISMOTION:
|
||||||
{
|
{
|
||||||
proxy.flags = JOYSTICK_JOYSTICK_T;
|
proxy.flags = JOYSTICK_JOYSTICK_T;
|
||||||
proxy.data = joymodule->getJoystickFromID(e.jaxis.which);
|
proxy.object = joymodule->getJoystickFromID(e.jaxis.which);
|
||||||
if (!proxy.data)
|
if (!proxy.object)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy));
|
vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy));
|
||||||
@@ -430,8 +430,8 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
proxy.flags = JOYSTICK_JOYSTICK_T;
|
proxy.flags = JOYSTICK_JOYSTICK_T;
|
||||||
proxy.data = joymodule->getJoystickFromID(e.jhat.which);
|
proxy.object = joymodule->getJoystickFromID(e.jhat.which);
|
||||||
if (!proxy.data)
|
if (!proxy.object)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy));
|
vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy));
|
||||||
@@ -448,8 +448,8 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
proxy.flags = JOYSTICK_JOYSTICK_T;
|
proxy.flags = JOYSTICK_JOYSTICK_T;
|
||||||
proxy.data = joymodule->getJoystickFromID(e.cbutton.which);
|
proxy.object = joymodule->getJoystickFromID(e.cbutton.which);
|
||||||
if (!proxy.data)
|
if (!proxy.object)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy));
|
vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy));
|
||||||
@@ -464,8 +464,8 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
proxy.flags = JOYSTICK_JOYSTICK_T;
|
proxy.flags = JOYSTICK_JOYSTICK_T;
|
||||||
proxy.data = joymodule->getJoystickFromID(e.caxis.which);
|
proxy.object = joymodule->getJoystickFromID(e.caxis.which);
|
||||||
if (!proxy.data)
|
if (!proxy.object)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy));
|
vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy));
|
||||||
@@ -478,9 +478,9 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const
|
|||||||
break;
|
break;
|
||||||
case SDL_JOYDEVICEADDED:
|
case SDL_JOYDEVICEADDED:
|
||||||
// jdevice.which is the joystick device index.
|
// jdevice.which is the joystick device index.
|
||||||
proxy.data = joymodule->addJoystick(e.jdevice.which);
|
proxy.object = joymodule->addJoystick(e.jdevice.which);
|
||||||
proxy.flags = JOYSTICK_JOYSTICK_T;
|
proxy.flags = JOYSTICK_JOYSTICK_T;
|
||||||
if (proxy.data)
|
if (proxy.object)
|
||||||
{
|
{
|
||||||
vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy));
|
vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy));
|
||||||
msg = new Message("joystickadded", vargs);
|
msg = new Message("joystickadded", vargs);
|
||||||
@@ -488,11 +488,11 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const
|
|||||||
break;
|
break;
|
||||||
case SDL_JOYDEVICEREMOVED:
|
case SDL_JOYDEVICEREMOVED:
|
||||||
// jdevice.which is the joystick instance ID now.
|
// jdevice.which is the joystick instance ID now.
|
||||||
proxy.data = joymodule->getJoystickFromID(e.jdevice.which);
|
proxy.object = joymodule->getJoystickFromID(e.jdevice.which);
|
||||||
proxy.flags = JOYSTICK_JOYSTICK_T;
|
proxy.flags = JOYSTICK_JOYSTICK_T;
|
||||||
if (proxy.data)
|
if (proxy.object)
|
||||||
{
|
{
|
||||||
joymodule->removeJoystick((joystick::Joystick *) proxy.data);
|
joymodule->removeJoystick((joystick::Joystick *) proxy.object);
|
||||||
vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy));
|
vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy));
|
||||||
msg = new Message("joystickremoved", vargs);
|
msg = new Message("joystickremoved", vargs);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ void LuaThread::onError()
|
|||||||
|
|
||||||
Proxy p;
|
Proxy p;
|
||||||
p.flags = THREAD_THREAD_T;
|
p.flags = THREAD_THREAD_T;
|
||||||
p.data = this;
|
p.object = this;
|
||||||
|
|
||||||
std::vector<StrongRef<Variant>> vargs = {
|
std::vector<StrongRef<Variant>> vargs = {
|
||||||
new Variant(THREAD_THREAD_ID, &p),
|
new Variant(THREAD_THREAD_ID, &p),
|
||||||
|
|||||||
Reference in New Issue
Block a user