Cleaned up some love.window code.

This commit is contained in:
Alex Szpakowski
2015-12-17 23:15:06 -04:00
parent 4e75c7be9a
commit f6809f941d
2 changed files with 56 additions and 61 deletions
+50 -51
View File
@@ -122,9 +122,9 @@ void Window::setGLContextAttributes(const ContextAttribs &attribs)
int contextflags = 0;
if (attribs.gles)
profilemask |= SDL_GL_CONTEXT_PROFILE_ES;
profilemask = SDL_GL_CONTEXT_PROFILE_ES;
else if (attribs.debug)
profilemask |= SDL_GL_CONTEXT_PROFILE_COMPATIBILITY;
profilemask = SDL_GL_CONTEXT_PROFILE_COMPATIBILITY;
if (attribs.debug)
contextflags |= SDL_GL_CONTEXT_DEBUG_FLAG;
@@ -471,7 +471,7 @@ bool Window::setWindow(int width, int height, WindowSettings *settings)
return false;
// Make sure the window keeps any previously set icon.
setIcon(curMode.icon.get());
setIcon(icon.get());
// Make sure the mouse keeps its previous grab setting.
setMouseGrab(mouseGrabbed);
@@ -490,7 +490,7 @@ bool Window::setWindow(int width, int height, WindowSettings *settings)
auto gfx = Module::getInstance<graphics::Graphics>(Module::M_GRAPHICS);
if (gfx != nullptr)
gfx->setMode(curMode.pixelwidth, curMode.pixelheight);
gfx->setMode(pixelWidth, pixelHeight);
#ifdef LOVE_ANDROID
love::android::setImmersive(f.fullscreen);
@@ -504,14 +504,14 @@ bool Window::onSizeChanged(int width, int height)
if (!window)
return false;
curMode.width = width;
curMode.height = height;
windowWidth = width;
windowHeight = height;
SDL_GL_GetDrawableSize(window, &curMode.pixelwidth, &curMode.pixelheight);
SDL_GL_GetDrawableSize(window, &pixelWidth, &pixelHeight);
auto gfx = Module::getInstance<graphics::Graphics>(Module::M_GRAPHICS);
if (gfx != nullptr)
gfx->setViewportSize(curMode.pixelwidth, curMode.pixelheight);
gfx->setViewportSize(pixelWidth, pixelHeight);
return true;
}
@@ -521,23 +521,23 @@ void Window::updateSettings(const WindowSettings &newsettings)
Uint32 wflags = SDL_GetWindowFlags(window);
// Set the new display mode as the current display mode.
SDL_GetWindowSize(window, &curMode.width, &curMode.height);
SDL_GL_GetDrawableSize(window, &curMode.pixelwidth, &curMode.pixelheight);
SDL_GetWindowSize(window, &windowWidth, &windowHeight);
SDL_GL_GetDrawableSize(window, &pixelWidth, &pixelHeight);
if ((wflags & SDL_WINDOW_FULLSCREEN_DESKTOP) == SDL_WINDOW_FULLSCREEN_DESKTOP)
{
curMode.settings.fullscreen = true;
curMode.settings.fstype = FULLSCREEN_DESKTOP;
settings.fullscreen = true;
settings.fstype = FULLSCREEN_DESKTOP;
}
else if ((wflags & SDL_WINDOW_FULLSCREEN) == SDL_WINDOW_FULLSCREEN)
{
curMode.settings.fullscreen = true;
curMode.settings.fstype = FULLSCREEN_EXCLUSIVE;
settings.fullscreen = true;
settings.fstype = FULLSCREEN_EXCLUSIVE;
}
else
{
curMode.settings.fullscreen = false;
curMode.settings.fstype = newsettings.fstype;
settings.fullscreen = false;
settings.fstype = newsettings.fstype;
}
#ifdef LOVE_ANDROID
@@ -545,20 +545,19 @@ void Window::updateSettings(const WindowSettings &newsettings)
#endif
// SDL_GetWindowMinimumSize gives back 0,0 sometimes...
curMode.settings.minwidth = newsettings.minwidth;
curMode.settings.minheight = newsettings.minheight;
settings.minwidth = newsettings.minwidth;
settings.minheight = newsettings.minheight;
curMode.settings.resizable = (wflags & SDL_WINDOW_RESIZABLE) != 0;
curMode.settings.borderless = (wflags & SDL_WINDOW_BORDERLESS) != 0;
curMode.settings.centered = newsettings.centered;
settings.resizable = (wflags & SDL_WINDOW_RESIZABLE) != 0;
settings.borderless = (wflags & SDL_WINDOW_BORDERLESS) != 0;
settings.centered = newsettings.centered;
getPosition(curMode.settings.x, curMode.settings.y, curMode.settings.display);
getPosition(settings.x, settings.y, settings.display);
curMode.settings.highdpi = (wflags & SDL_WINDOW_ALLOW_HIGHDPI) != 0;
settings.highdpi = (wflags & SDL_WINDOW_ALLOW_HIGHDPI) != 0;
// Only minimize on focus loss if the window is in exclusive-fullscreen
// mode.
if (curMode.settings.fullscreen && curMode.settings.fstype == FULLSCREEN_EXCLUSIVE)
// Only minimize on focus loss if the window is in exclusive-fullscreen mode
if (settings.fullscreen && settings.fstype == FULLSCREEN_EXCLUSIVE)
SDL_SetHint(SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS, "1");
else
SDL_SetHint(SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS, "0");
@@ -569,25 +568,25 @@ void Window::updateSettings(const WindowSettings &newsettings)
SDL_GL_GetAttribute(SDL_GL_MULTISAMPLEBUFFERS, &buffers);
SDL_GL_GetAttribute(SDL_GL_MULTISAMPLESAMPLES, &samples);
curMode.settings.msaa = (buffers > 0 ? samples : 0);
curMode.settings.vsync = SDL_GL_GetSwapInterval() != 0;
settings.msaa = (buffers > 0 ? samples : 0);
settings.vsync = SDL_GL_GetSwapInterval() != 0;
SDL_DisplayMode dmode = {};
SDL_GetCurrentDisplayMode(curMode.settings.display, &dmode);
SDL_GetCurrentDisplayMode(settings.display, &dmode);
// May be 0 if the refresh rate can't be determined.
curMode.settings.refreshrate = (double) dmode.refresh_rate;
settings.refreshrate = (double) dmode.refresh_rate;
}
void Window::getWindow(int &width, int &height, WindowSettings &settings)
void Window::getWindow(int &width, int &height, WindowSettings &newsettings)
{
// The window might have been modified (moved, resized, etc.) by the user.
if (window)
updateSettings(curMode.settings);
updateSettings(settings);
width = curMode.width;
height = curMode.height;
settings = curMode.settings;
width = windowWidth;
height = windowHeight;
newsettings = settings;
}
void Window::close()
@@ -620,7 +619,7 @@ bool Window::setFullscreen(bool fullscreen, Window::FullscreenType fstype)
if (!window)
return false;
WindowSettings newsettings = curMode.settings;
WindowSettings newsettings = settings;
newsettings.fullscreen = fullscreen;
newsettings.fstype = fstype;
@@ -635,8 +634,8 @@ bool Window::setFullscreen(bool fullscreen, Window::FullscreenType fstype)
sdlflags = SDL_WINDOW_FULLSCREEN;
SDL_DisplayMode mode = {};
mode.w = curMode.width;
mode.h = curMode.height;
mode.w = windowWidth;
mode.h = windowHeight;
SDL_GetClosestDisplayMode(SDL_GetWindowDisplayIndex(window), &mode, &mode);
SDL_SetWindowDisplayMode(window, &mode);
@@ -654,12 +653,12 @@ bool Window::setFullscreen(bool fullscreen, Window::FullscreenType fstype)
// Apparently this gets un-set when we exit fullscreen (at least in OS X).
if (!fullscreen)
SDL_SetWindowMinimumSize(window, curMode.settings.minwidth, curMode.settings.minheight);
SDL_SetWindowMinimumSize(window, settings.minwidth, settings.minheight);
// Update the viewport size now instead of waiting for event polling.
auto gfx = Module::getInstance<graphics::Graphics>(Module::M_GRAPHICS);
if (gfx != nullptr)
gfx->setViewportSize(curMode.pixelwidth, curMode.pixelheight);
gfx->setViewportSize(pixelWidth, pixelHeight);
return true;
}
@@ -669,7 +668,7 @@ bool Window::setFullscreen(bool fullscreen, Window::FullscreenType fstype)
bool Window::setFullscreen(bool fullscreen)
{
return setFullscreen(fullscreen, curMode.settings.fstype);
return setFullscreen(fullscreen, settings.fstype);
}
int Window::getDisplayCount() const
@@ -741,7 +740,7 @@ void Window::setPosition(int x, int y, int displayindex)
SDL_SetWindowPosition(window, x, y);
curMode.settings.useposition = true;
settings.useposition = true;
}
void Window::getPosition(int &x, int &y, int &displayindex)
@@ -793,7 +792,7 @@ bool Window::setIcon(love::image::ImageData *imgd)
if (!imgd)
return false;
curMode.icon.set(imgd);
icon.set(imgd);
if (!window)
return false;
@@ -834,7 +833,7 @@ bool Window::setIcon(love::image::ImageData *imgd)
love::image::ImageData *Window::getIcon()
{
return curMode.icon.get();
return icon.get();
}
void Window::setDisplaySleepEnabled(bool enable)
@@ -909,24 +908,24 @@ bool Window::isMouseGrabbed() const
void Window::getPixelDimensions(int &w, int &h) const
{
w = curMode.pixelwidth;
h = curMode.pixelheight;
w = pixelWidth;
h = pixelHeight;
}
void Window::windowToPixelCoords(double *x, double *y) const
{
if (x != nullptr)
*x = (*x) * ((double) curMode.pixelwidth / (double) curMode.width);
*x = (*x) * ((double) pixelWidth / (double) windowWidth);
if (y != nullptr)
*y = (*y) * ((double) curMode.pixelheight / (double) curMode.height);
*y = (*y) * ((double) pixelHeight / (double) windowHeight);
}
void Window::pixelToWindowCoords(double *x, double *y) const
{
if (x != nullptr)
*x = (*x) * ((double) curMode.width / (double) curMode.pixelwidth);
*x = (*x) * ((double) windowWidth / (double) pixelWidth);
if (y != nullptr)
*y = (*y) * ((double) curMode.height / (double) curMode.pixelheight);
*y = (*y) * ((double) windowHeight / (double) pixelHeight);
}
double Window::getPixelScale() const
@@ -934,7 +933,7 @@ double Window::getPixelScale() const
#ifdef LOVE_ANDROID
return love::android::getScreenScale();
#else
return (double) curMode.pixelheight / (double) curMode.height;
return (double) pixelHeight / (double) windowHeight;
#endif
}
+6 -10
View File
@@ -131,16 +131,12 @@ private:
std::string title;
struct _currentMode
{
int width = 800;
int height = 600;
int pixelwidth = 800;
int pixelheight = 600;
WindowSettings settings;
StrongRef<love::image::ImageData> icon;
} curMode;
int windowWidth = 800;
int windowHeight = 600;
int pixelWidth = 800;
int pixelHeight = 600;
WindowSettings settings;
StrongRef<love::image::ImageData> icon;
bool open;