Added love.window.close (resolves issue #1059), and renamed love.window.isCreated to love.window.isOpen.

This commit is contained in:
Alex Szpakowski
2015-07-18 13:22:55 -03:00
parent 2cce18946d
commit 4cd725cee6
6 changed files with 54 additions and 58 deletions
+2 -2
View File
@@ -69,7 +69,7 @@ Graphics::Graphics()
currentWindow->getWindow(w, h, wsettings);
if (currentWindow->isCreated())
if (currentWindow->isOpen())
setMode(w, h, wsettings.sRGB);
}
@@ -355,7 +355,7 @@ bool Graphics::isActive() const
{
// The graphics module is only completely 'active' if there's a window, a
// context, and the active variable is set.
return active && isCreated() && currentWindow && currentWindow->isCreated();
return active && isCreated() && currentWindow && currentWindow->isOpen();
}
static void APIENTRY debugCB(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei /*len*/, const GLchar *msg, const GLvoid* /*usr*/)
+3 -1
View File
@@ -112,6 +112,8 @@ public:
virtual bool setWindow(int width = 800, int height = 600, WindowSettings *settings = nullptr) = 0;
virtual void getWindow(int &width, int &height, WindowSettings &settings) = 0;
virtual void close() = 0;
virtual bool setFullscreen(bool fullscreen, FullscreenType fstype) = 0;
virtual bool setFullscreen(bool fullscreen) = 0;
@@ -128,7 +130,7 @@ public:
virtual void setPosition(int x, int y, int displayindex) = 0;
virtual void getPosition(int &x, int &y, int &displayindex) = 0;
virtual bool isCreated() const = 0;
virtual bool isOpen() const = 0;
virtual void setWindowTitle(const std::string &title) = 0;
virtual const std::string &getWindowTitle() const = 0;
+33 -49
View File
@@ -52,7 +52,7 @@ namespace sdl
{
Window::Window()
: created(false)
: open(false)
, mouseGrabbed(false)
, window(nullptr)
, context(nullptr)
@@ -65,17 +65,7 @@ Window::Window()
Window::~Window()
{
if (context)
{
graphics::Graphics *gfx = Module::getInstance<graphics::Graphics>(Module::M_GRAPHICS);
if (gfx != nullptr)
gfx->unSetMode();
SDL_GL_DeleteContext(context);
}
if (window)
SDL_DestroyWindow(window);
close();
SDL_QuitSubSystem(SDL_INIT_VIDEO);
}
@@ -345,22 +335,12 @@ bool Window::createWindowAndContext(int x, int y, int w, int h, Uint32 windowfla
}
}
if (context)
{
SDL_GL_DeleteContext(context);
context = nullptr;
}
if (window)
{
SDL_DestroyWindow(window);
SDL_FlushEvent(SDL_WINDOWEVENT);
window = nullptr;
}
close();
return false;
}
open = true;
return true;
}
@@ -439,33 +419,11 @@ bool Window::setWindow(int width, int height, WindowSettings *settings)
x = y = SDL_WINDOWPOS_UNDEFINED_DISPLAY(f.display);
}
graphics::Graphics *gfx = Module::getInstance<graphics::Graphics>(Module::M_GRAPHICS);
if (gfx != nullptr)
gfx->unSetMode();
if (context)
{
SDL_GL_DeleteContext(context);
context = nullptr;
}
if (window)
{
SDL_DestroyWindow(window);
window = nullptr;
// The old window may have generated pending events which are no longer
// relevant. Destroy them all!
SDL_FlushEvent(SDL_WINDOWEVENT);
}
created = false;
close();
if (!createWindowAndContext(x, y, width, height, sdlflags, f.msaa, f.sRGB))
return false;
created = true;
// Make sure the window keeps any previously set icon.
setIcon(curMode.icon.get());
@@ -484,6 +442,7 @@ bool Window::setWindow(int width, int height, WindowSettings *settings)
updateSettings(f);
auto gfx = Module::getInstance<graphics::Graphics>(Module::M_GRAPHICS);
if (gfx != nullptr)
gfx->setMode(curMode.pixelwidth, curMode.pixelheight, curMode.settings.sRGB);
@@ -584,6 +543,31 @@ void Window::getWindow(int &width, int &height, WindowSettings &settings)
settings = curMode.settings;
}
void Window::close()
{
auto gfx = Module::getInstance<graphics::Graphics>(Module::M_GRAPHICS);
if (gfx != nullptr)
gfx->unSetMode();
if (context)
{
SDL_GL_DeleteContext(context);
context = nullptr;
}
if (window)
{
SDL_DestroyWindow(window);
window = nullptr;
// The old window may have generated pending events which are no longer
// relevant. Destroy them all!
SDL_FlushEvent(SDL_WINDOWEVENT);
}
open = false;
}
bool Window::setFullscreen(bool fullscreen, Window::FullscreenType fstype)
{
if (!window)
@@ -730,9 +714,9 @@ void Window::getPosition(int &x, int &y, int &displayindex)
}
}
bool Window::isCreated() const
bool Window::isOpen() const
{
return created;
return open;
}
void Window::setWindowTitle(const std::string &title)
+4 -2
View File
@@ -44,6 +44,8 @@ public:
bool setWindow(int width = 800, int height = 600, WindowSettings *settings = nullptr);
void getWindow(int &width, int &height, WindowSettings &settings);
void close();
bool setFullscreen(bool fullscreen, FullscreenType fstype);
bool setFullscreen(bool fullscreen);
@@ -60,7 +62,7 @@ public:
void setPosition(int x, int y, int displayindex);
void getPosition(int &x, int &y, int &displayindex);
bool isCreated() const;
bool isOpen() const;
void setWindowTitle(const std::string &title);
const std::string &getWindowTitle() const;
@@ -139,7 +141,7 @@ private:
} curMode;
bool created;
bool open;
bool mouseGrabbed;
+10 -3
View File
@@ -260,12 +260,18 @@ int w_getFullscreen(lua_State *L)
return 2;
}
int w_isCreated(lua_State *L)
int w_isOpen(lua_State *L)
{
luax_pushboolean(L, instance()->isCreated());
luax_pushboolean(L, instance()->isOpen());
return 1;
}
int w_close(lua_State * /*L*/)
{
instance()->close();
return 0;
}
int w_getDesktopDimensions(lua_State *L)
{
int width = 0, height = 0;
@@ -499,7 +505,8 @@ static const luaL_Reg functions[] =
{ "getFullscreenModes", w_getFullscreenModes },
{ "setFullscreen", w_setFullscreen },
{ "getFullscreen", w_getFullscreen },
{ "isCreated", w_isCreated },
{ "isOpen", w_isOpen },
{ "close", w_close },
{ "getDesktopDimensions", w_getDesktopDimensions },
{ "setPosition", w_setPosition },
{ "getPosition", w_getPosition },
+2 -1
View File
@@ -36,7 +36,8 @@ int w_getMode(lua_State *L);
int w_getFullscreenModes(lua_State *L);
int w_setFullscreen(lua_State *L);
int w_getFullscreen(lua_State *L);
int w_isCreated(lua_State *L);
int w_isOpen(lua_State *L);
int w_close(lua_State *L);
int w_getDesktopDimensions(lua_State *L);
int w_setPosition(lua_State *L);
int w_getPosition(lua_State *L);