mirror of
https://github.com/love2d/love.git
synced 2026-08-12 16:40:57 +02:00
Added love.window.close (resolves issue #1059), and renamed love.window.isCreated to love.window.isOpen.
This commit is contained in:
@@ -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*/)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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 },
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user