Browse Source

Fixed a memory leak in love.graphics.newText.

Alex Szpakowski 10 years ago
parent
commit
14cbc91e7f

+ 1 - 1
readme.md

@@ -61,7 +61,7 @@ Dependencies
 ------------
 ------------
 
 
 - SDL2
 - SDL2
-- OpenGL
+- OpenGL 2.1+ / OpenGL ES 2+
 - OpenAL
 - OpenAL
 - Lua / LuaJIT / LLVM-lua
 - Lua / LuaJIT / LLVM-lua
 - jpeg-turbo
 - jpeg-turbo

+ 8 - 8
src/modules/event/sdl/Event.cpp

@@ -352,7 +352,7 @@ Message *Event::convert(const SDL_Event &e) const
 				Proxy proxy;
 				Proxy proxy;
 				proxy.object = new love::filesystem::DroppedFile(e.drop.file);
 				proxy.object = new love::filesystem::DroppedFile(e.drop.file);
 				proxy.type = FILESYSTEM_DROPPED_FILE_ID;
 				proxy.type = FILESYSTEM_DROPPED_FILE_ID;
-				vargs.push_back(new Variant(FILESYSTEM_DROPPED_FILE_ID, &proxy));
+				vargs.push_back(new Variant(proxy.type, &proxy));
 				msg = new Message("filedropped", vargs);
 				msg = new Message("filedropped", vargs);
 				proxy.object->release();
 				proxy.object->release();
 			}
 			}
@@ -406,7 +406,7 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const
 		if (!proxy.object)
 		if (!proxy.object)
 			break;
 			break;
 
 
-		vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy));
+		vargs.push_back(new Variant(proxy.type, (void *) &proxy));
 		vargs.push_back(new Variant((double)(e.jbutton.button+1)));
 		vargs.push_back(new Variant((double)(e.jbutton.button+1)));
 		msg = new Message((e.type == SDL_JOYBUTTONDOWN) ?
 		msg = new Message((e.type == SDL_JOYBUTTONDOWN) ?
 						  "joystickpressed" : "joystickreleased",
 						  "joystickpressed" : "joystickreleased",
@@ -419,7 +419,7 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const
 			if (!proxy.object)
 			if (!proxy.object)
 				break;
 				break;
 
 
-			vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy));
+			vargs.push_back(new Variant(proxy.type, (void *) &proxy));
 			vargs.push_back(new Variant((double)(e.jaxis.axis+1)));
 			vargs.push_back(new Variant((double)(e.jaxis.axis+1)));
 			float value = joystick::Joystick::clampval(e.jaxis.value / 32768.0f);
 			float value = joystick::Joystick::clampval(e.jaxis.value / 32768.0f);
 			vargs.push_back(new Variant((double) value));
 			vargs.push_back(new Variant((double) value));
@@ -435,7 +435,7 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const
 		if (!proxy.object)
 		if (!proxy.object)
 			break;
 			break;
 
 
-		vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy));
+		vargs.push_back(new Variant(proxy.type, (void *) &proxy));
 		vargs.push_back(new Variant((double)(e.jhat.hat+1)));
 		vargs.push_back(new Variant((double)(e.jhat.hat+1)));
 		vargs.push_back(new Variant(txt, strlen(txt)));
 		vargs.push_back(new Variant(txt, strlen(txt)));
 		msg = new Message("joystickhat", vargs);
 		msg = new Message("joystickhat", vargs);
@@ -453,7 +453,7 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const
 		if (!proxy.object)
 		if (!proxy.object)
 			break;
 			break;
 
 
-		vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy));
+		vargs.push_back(new Variant(proxy.type, (void *) &proxy));
 		vargs.push_back(new Variant(txt, strlen(txt)));
 		vargs.push_back(new Variant(txt, strlen(txt)));
 		msg = new Message(e.type == SDL_CONTROLLERBUTTONDOWN ?
 		msg = new Message(e.type == SDL_CONTROLLERBUTTONDOWN ?
 						  "gamepadpressed" : "gamepadreleased", vargs);
 						  "gamepadpressed" : "gamepadreleased", vargs);
@@ -469,7 +469,7 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const
 			if (!proxy.object)
 			if (!proxy.object)
 				break;
 				break;
 
 
-			vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy));
+			vargs.push_back(new Variant(proxy.type, (void *) &proxy));
 
 
 			vargs.push_back(new Variant(txt, strlen(txt)));
 			vargs.push_back(new Variant(txt, strlen(txt)));
 			float value = joystick::Joystick::clampval(e.caxis.value / 32768.0f);
 			float value = joystick::Joystick::clampval(e.caxis.value / 32768.0f);
@@ -483,7 +483,7 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const
 		proxy.type = JOYSTICK_JOYSTICK_ID;
 		proxy.type = JOYSTICK_JOYSTICK_ID;
 		if (proxy.object)
 		if (proxy.object)
 		{
 		{
-			vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy));
+			vargs.push_back(new Variant(proxy.type, (void *) &proxy));
 			msg = new Message("joystickadded", vargs);
 			msg = new Message("joystickadded", vargs);
 		}
 		}
 		break;
 		break;
@@ -494,7 +494,7 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const
 		if (proxy.object)
 		if (proxy.object)
 		{
 		{
 			joymodule->removeJoystick((joystick::Joystick *) proxy.object);
 			joymodule->removeJoystick((joystick::Joystick *) proxy.object);
-			vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy));
+			vargs.push_back(new Variant(proxy.type, (void *) &proxy));
 			msg = new Message("joystickremoved", vargs);
 			msg = new Message("joystickremoved", vargs);
 		}
 		}
 		break;
 		break;

+ 1 - 0
src/modules/graphics/opengl/wrap_Graphics.cpp

@@ -632,6 +632,7 @@ int w_newText(lua_State *L)
 	}
 	}
 
 
 	luax_pushtype(L, GRAPHICS_TEXT_ID, t);
 	luax_pushtype(L, GRAPHICS_TEXT_ID, t);
+	t->release();
 	return 1;
 	return 1;
 }
 }
 
 

+ 3 - 3
src/modules/mouse/sdl/Mouse.cpp

@@ -146,7 +146,7 @@ void Mouse::getPosition(double &x, double &y) const
 
 
 void Mouse::setPosition(double x, double y)
 void Mouse::setPosition(double x, double y)
 {
 {
-	love::window::Window *window = love::window::sdl::Window::getSingleton();
+	window::Window *window = Module::getInstance<window::Window>(Module::M_WINDOW);
 
 
 	SDL_Window *handle = nullptr;
 	SDL_Window *handle = nullptr;
 	if (window)
 	if (window)
@@ -196,14 +196,14 @@ bool Mouse::isVisible() const
 
 
 void Mouse::setGrabbed(bool grab)
 void Mouse::setGrabbed(bool grab)
 {
 {
-	love::window::Window *window = love::window::sdl::Window::getSingleton();
+	window::Window *window = Module::getInstance<window::Window>(Module::M_WINDOW);
 	if (window)
 	if (window)
 		window->setMouseGrab(grab);
 		window->setMouseGrab(grab);
 }
 }
 
 
 bool Mouse::isGrabbed() const
 bool Mouse::isGrabbed() const
 {
 {
-	love::window::Window *window = love::window::sdl::Window::getSingleton();
+	window::Window *window = Module::getInstance<window::Window>(Module::M_WINDOW);
 	if (window)
 	if (window)
 		return window->isMouseGrabbed();
 		return window->isMouseGrabbed();
 	else
 	else

+ 1 - 2
src/modules/window/Window.h

@@ -172,8 +172,7 @@ public:
 	virtual int showMessageBox(const MessageBoxData &data) = 0;
 	virtual int showMessageBox(const MessageBoxData &data) = 0;
 
 
 	//virtual static Window *createSingleton() = 0;
 	//virtual static Window *createSingleton() = 0;
-	//virtual static Window *getSingleton() = 0;
-	// No virtual statics, of course, but you are supposed to implement these statics.
+	// No virtual statics, of course, but you are supposed to implement this static.
 
 
 	static bool getConstant(const char *in, Setting &out);
 	static bool getConstant(const char *in, Setting &out);
 	static bool getConstant(Setting in, const char *&out);
 	static bool getConstant(Setting in, const char *&out);

+ 0 - 5
src/modules/window/sdl/Window.cpp

@@ -970,11 +970,6 @@ love::window::Window *Window::createSingleton()
 	return singleton;
 	return singleton;
 }
 }
 
 
-love::window::Window *Window::getSingleton()
-{
-	return singleton;
-}
-
 const char *Window::getName() const
 const char *Window::getName() const
 {
 {
 	return "love.window.sdl";
 	return "love.window.sdl";

+ 0 - 1
src/modules/window/sdl/Window.h

@@ -101,7 +101,6 @@ public:
 	int showMessageBox(const MessageBoxData &data);
 	int showMessageBox(const MessageBoxData &data);
 
 
 	static love::window::Window *createSingleton();
 	static love::window::Window *createSingleton();
-	static love::window::Window *getSingleton();
 
 
 	const char *getName() const;
 	const char *getName() const;