diff options
author | Johannes Schickel | 2015-02-16 00:49:42 +0100 |
---|---|---|
committer | Johannes Schickel | 2015-02-16 01:03:29 +0100 |
commit | 627d766325e1d435816648f85dbf9c007269b3f2 (patch) | |
tree | 795ea66fd2755e81c7d060ee250fd6f53cf20ade /backends/graphics | |
parent | b00050439f0f602cb54500f7fda268a7589b4c8b (diff) | |
download | scummvm-rg350-627d766325e1d435816648f85dbf9c007269b3f2.tar.gz scummvm-rg350-627d766325e1d435816648f85dbf9c007269b3f2.tar.bz2 scummvm-rg350-627d766325e1d435816648f85dbf9c007269b3f2.zip |
SDL: Add basic abstraction class for the SDL window.
Diffstat (limited to 'backends/graphics')
22 files changed, 61 insertions, 270 deletions
diff --git a/backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp b/backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp index 975e34a314..0b9cc0c7e8 100644 --- a/backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp +++ b/backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp @@ -35,8 +35,8 @@ static const OSystem::GraphicsMode s_supportedGraphicsModes[] = { {0, 0, 0} }; -DINGUXSdlGraphicsManager::DINGUXSdlGraphicsManager(SdlEventSource *boss) - : SurfaceSdlGraphicsManager(boss) { +DINGUXSdlGraphicsManager::DINGUXSdlGraphicsManager(SdlEventSource *boss, SdlWindow *window) + : SurfaceSdlGraphicsManager(boss, window) { } const OSystem::GraphicsMode *DINGUXSdlGraphicsManager::getSupportedGraphicsModes() const { @@ -122,7 +122,7 @@ void DINGUXSdlGraphicsManager::initSize(uint w, uint h) { if (w > 320 || h > 240) { setGraphicsMode(GFX_HALF); setGraphicsModeIntern(); - toggleMouseGrab(); + _window->toggleMouseGrab(); } _transactionDetails.sizeChanged = true; diff --git a/backends/graphics/dinguxsdl/dinguxsdl-graphics.h b/backends/graphics/dinguxsdl/dinguxsdl-graphics.h index fc70e721cf..8a356106ad 100644 --- a/backends/graphics/dinguxsdl/dinguxsdl-graphics.h +++ b/backends/graphics/dinguxsdl/dinguxsdl-graphics.h @@ -34,7 +34,7 @@ enum { class DINGUXSdlGraphicsManager : public SurfaceSdlGraphicsManager { public: - DINGUXSdlGraphicsManager(SdlEventSource *boss); + DINGUXSdlGraphicsManager(SdlEventSource *boss, SdlWindow *window); bool hasFeature(OSystem::Feature f); void setFeatureState(OSystem::Feature f, bool enable); diff --git a/backends/graphics/gph/gph-graphics.cpp b/backends/graphics/gph/gph-graphics.cpp index 247e5ed490..65cb3d1d65 100644 --- a/backends/graphics/gph/gph-graphics.cpp +++ b/backends/graphics/gph/gph-graphics.cpp @@ -35,8 +35,8 @@ static const OSystem::GraphicsMode s_supportedGraphicsModes[] = { {0, 0, 0} }; -GPHGraphicsManager::GPHGraphicsManager(SdlEventSource *sdlEventSource) - : SurfaceSdlGraphicsManager(sdlEventSource) { +GPHGraphicsManager::GPHGraphicsManager(SdlEventSource *sdlEventSource, SdlWindow *window) + : SurfaceSdlGraphicsManager(sdlEventSource, window) { } const OSystem::GraphicsMode *GPHGraphicsManager::getSupportedGraphicsModes() const { @@ -141,7 +141,7 @@ void GPHGraphicsManager::initSize(uint w, uint h, const Graphics::PixelFormat *f if (w > 320 || h > 240) { setGraphicsMode(GFX_HALF); setGraphicsModeIntern(); - _eventSource->toggleMouseGrab(); + _window->toggleMouseGrab(); } _videoMode.overlayWidth = 320; diff --git a/backends/graphics/gph/gph-graphics.h b/backends/graphics/gph/gph-graphics.h index 4a68ea6eed..152d29ddf4 100644 --- a/backends/graphics/gph/gph-graphics.h +++ b/backends/graphics/gph/gph-graphics.h @@ -33,7 +33,7 @@ enum { class GPHGraphicsManager : public SurfaceSdlGraphicsManager { public: - GPHGraphicsManager(SdlEventSource *boss); + GPHGraphicsManager(SdlEventSource *boss, SdlWindow *window); bool hasFeature(OSystem::Feature f); void setFeatureState(OSystem::Feature f, bool enable); diff --git a/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp b/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp index f8ab9930d7..52e5b42e8b 100644 --- a/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp +++ b/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.cpp @@ -45,8 +45,8 @@ static const OSystem::GraphicsMode s_supportedGraphicsModes[] = { {0, 0, 0} }; -LinuxmotoSdlGraphicsManager::LinuxmotoSdlGraphicsManager(SdlEventSource *sdlEventSource) - : SurfaceSdlGraphicsManager(sdlEventSource) { +LinuxmotoSdlGraphicsManager::LinuxmotoSdlGraphicsManager(SdlEventSource *sdlEventSource, SdlWindow *window) + : SurfaceSdlGraphicsManager(sdlEventSource, window) { } const OSystem::GraphicsMode *LinuxmotoSdlGraphicsManager::getSupportedGraphicsModes() const { @@ -134,7 +134,7 @@ void LinuxmotoSdlGraphicsManager::initSize(uint w, uint h) { if (w > 320 || h > 240) { setGraphicsMode(GFX_HALF); setGraphicsModeIntern(); - toggleMouseGrab(); + _window->toggleMouseGrab(); } _transactionDetails.sizeChanged = true; diff --git a/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.h b/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.h index 8760c5004d..d7a13b1cb4 100644 --- a/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.h +++ b/backends/graphics/linuxmotosdl/linuxmotosdl-graphics.h @@ -27,7 +27,7 @@ class LinuxmotoSdlGraphicsManager : public SurfaceSdlGraphicsManager { public: - LinuxmotoSdlGraphicsManager(SdlEventSource *sdlEventSource); + LinuxmotoSdlGraphicsManager(SdlEventSource *sdlEventSource, SdlWindow *window); virtual void initSize(uint w, uint h); virtual void setGraphicsModeIntern(); diff --git a/backends/graphics/maemosdl/maemosdl-graphics.cpp b/backends/graphics/maemosdl/maemosdl-graphics.cpp index 07d6d32d3a..478d022aa0 100644 --- a/backends/graphics/maemosdl/maemosdl-graphics.cpp +++ b/backends/graphics/maemosdl/maemosdl-graphics.cpp @@ -29,8 +29,8 @@ #include "backends/events/maemosdl/maemosdl-events.h" #include "backends/graphics/maemosdl/maemosdl-graphics.h" -MaemoSdlGraphicsManager::MaemoSdlGraphicsManager(SdlEventSource *sdlEventSource) - : SurfaceSdlGraphicsManager(sdlEventSource) { +MaemoSdlGraphicsManager::MaemoSdlGraphicsManager(SdlEventSource *sdlEventSource, SdlWindow *window) + : SurfaceSdlGraphicsManager(sdlEventSource, window) { } bool MaemoSdlGraphicsManager::loadGFXMode() { diff --git a/backends/graphics/maemosdl/maemosdl-graphics.h b/backends/graphics/maemosdl/maemosdl-graphics.h index c255e94653..4cb84c81ee 100644 --- a/backends/graphics/maemosdl/maemosdl-graphics.h +++ b/backends/graphics/maemosdl/maemosdl-graphics.h @@ -29,7 +29,7 @@ class MaemoSdlGraphicsManager : public SurfaceSdlGraphicsManager { public: - MaemoSdlGraphicsManager(SdlEventSource *sdlEventSource); + MaemoSdlGraphicsManager(SdlEventSource *sdlEventSource, SdlWindow *window); protected: virtual bool loadGFXMode(); diff --git a/backends/graphics/openglsdl/openglsdl-graphics.cpp b/backends/graphics/openglsdl/openglsdl-graphics.cpp index 2710b66ecd..c71b9c9219 100644 --- a/backends/graphics/openglsdl/openglsdl-graphics.cpp +++ b/backends/graphics/openglsdl/openglsdl-graphics.cpp @@ -28,8 +28,8 @@ #include "common/translation.h" #endif -OpenGLSdlGraphicsManager::OpenGLSdlGraphicsManager(uint desktopWidth, uint desktopHeight, SdlEventSource *eventSource) - : SdlGraphicsManager(eventSource), _lastRequestedHeight(0), +OpenGLSdlGraphicsManager::OpenGLSdlGraphicsManager(uint desktopWidth, uint desktopHeight, SdlEventSource *eventSource, SdlWindow *window) + : SdlGraphicsManager(eventSource, window), _lastRequestedHeight(0), #if SDL_VERSION_ATLEAST(2, 0, 0) _glContext(), #else @@ -134,7 +134,7 @@ void OpenGLSdlGraphicsManager::setFeatureState(OSystem::Feature f, bool enable) case OSystem::kFeatureIconifyWindow: if (enable) { - iconifyWindow(); + _window->iconifyWindow(); } break; @@ -148,7 +148,7 @@ bool OpenGLSdlGraphicsManager::getFeatureState(OSystem::Feature f) { case OSystem::kFeatureFullscreenMode: #if SDL_VERSION_ATLEAST(2, 0, 0) if (_window) { - return (SDL_GetWindowFlags(_window) & SDL_WINDOW_FULLSCREEN) != 0; + return (SDL_GetWindowFlags(_window->getSDLWindow()) & SDL_WINDOW_FULLSCREEN) != 0; } else { return _wantsFullScreen; } @@ -236,7 +236,7 @@ void OpenGLSdlGraphicsManager::updateScreen() { // Swap OpenGL buffers #if SDL_VERSION_ATLEAST(2, 0, 0) - SDL_GL_SwapWindow(_window); + SDL_GL_SwapWindow(_window->getSDLWindow()); #else SDL_GL_SwapBuffers(); #endif @@ -271,7 +271,7 @@ void OpenGLSdlGraphicsManager::notifyMousePos(Common::Point mouse) { } void OpenGLSdlGraphicsManager::setInternalMousePosition(int x, int y) { - warpMouseInWindow(x, y); + _window->warpMouseInWindow(x, y); } bool OpenGLSdlGraphicsManager::loadVideoMode(uint requestedWidth, uint requestedHeight, const Graphics::PixelFormat &format) { @@ -362,7 +362,7 @@ bool OpenGLSdlGraphicsManager::setupMode(uint width, uint height) { _glContext = nullptr; } - destroyWindow(); + _window->destroyWindow(); uint32 flags = SDL_WINDOW_OPENGL; if (_wantsFullScreen) { @@ -371,26 +371,26 @@ bool OpenGLSdlGraphicsManager::setupMode(uint width, uint height) { flags |= SDL_WINDOW_RESIZABLE; } - if (!createWindow(width, height, flags)) { + if (!_window->createWindow(width, height, flags)) { // We treat fullscreen requests as a "hint" for now. This means in // case it is not available we simply ignore it. if (_wantsFullScreen) { - createWindow(width, height, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE); + _window->createWindow(width, height, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE); } - if (!_window) { + if (!_window->getSDLWindow()) { return false; } } - _glContext = SDL_GL_CreateContext(_window); + _glContext = SDL_GL_CreateContext(_window->getSDLWindow()); if (!_glContext) { return false; } notifyContextCreate(rgba8888, rgba8888); int actualWidth, actualHeight; - SDL_GetWindowSize(_window, &actualWidth, &actualHeight); + getWindowDimensions(&actualWidth, &actualHeight); setActualScreenSize(actualWidth, actualHeight); return true; #else @@ -451,7 +451,7 @@ bool OpenGLSdlGraphicsManager::setupMode(uint width, uint height) { void OpenGLSdlGraphicsManager::getWindowDimensions(int *width, int *height) { #if SDL_VERSION_ATLEAST(2, 0, 0) - SDL_GetWindowSize(_window, width, height); + SDL_GetWindowSize(_window->getSDLWindow(), width, height); #else if (width) { *width = _hwScreen->w; diff --git a/backends/graphics/openglsdl/openglsdl-graphics.h b/backends/graphics/openglsdl/openglsdl-graphics.h index 1e927df766..845880eb14 100644 --- a/backends/graphics/openglsdl/openglsdl-graphics.h +++ b/backends/graphics/openglsdl/openglsdl-graphics.h @@ -32,7 +32,7 @@ class OpenGLSdlGraphicsManager : public OpenGL::OpenGLGraphicsManager, public SdlGraphicsManager, public Common::EventObserver { public: - OpenGLSdlGraphicsManager(uint desktopWidth, uint desktopHeight, SdlEventSource *eventSource); + OpenGLSdlGraphicsManager(uint desktopWidth, uint desktopHeight, SdlEventSource *eventSource, SdlWindow *window); virtual ~OpenGLSdlGraphicsManager(); // GraphicsManager API diff --git a/backends/graphics/openpandora/op-graphics.cpp b/backends/graphics/openpandora/op-graphics.cpp index 1ded1614de..f4c9dc16cc 100644 --- a/backends/graphics/openpandora/op-graphics.cpp +++ b/backends/graphics/openpandora/op-graphics.cpp @@ -32,8 +32,8 @@ static SDL_Cursor *hiddenCursor; -OPGraphicsManager::OPGraphicsManager(SdlEventSource *sdlEventSource) - : SurfaceSdlGraphicsManager(sdlEventSource) { +OPGraphicsManager::OPGraphicsManager(SdlEventSource *sdlEventSource, SdlWindow *window) + : SurfaceSdlGraphicsManager(sdlEventSource, window) { } bool OPGraphicsManager::loadGFXMode() { diff --git a/backends/graphics/openpandora/op-graphics.h b/backends/graphics/openpandora/op-graphics.h index 8b498d632b..50994072bb 100644 --- a/backends/graphics/openpandora/op-graphics.h +++ b/backends/graphics/openpandora/op-graphics.h @@ -32,7 +32,7 @@ enum { class OPGraphicsManager : public SurfaceSdlGraphicsManager { public: - OPGraphicsManager(SdlEventSource *sdlEventSource); + OPGraphicsManager(SdlEventSource *sdlEventSource, SdlWindow *window); bool loadGFXMode(); void unloadGFXMode(); diff --git a/backends/graphics/samsungtvsdl/samsungtvsdl-graphics.cpp b/backends/graphics/samsungtvsdl/samsungtvsdl-graphics.cpp index 3603d8a861..0c98462891 100644 --- a/backends/graphics/samsungtvsdl/samsungtvsdl-graphics.cpp +++ b/backends/graphics/samsungtvsdl/samsungtvsdl-graphics.cpp @@ -28,8 +28,8 @@ #include "backends/events/samsungtvsdl/samsungtvsdl-events.h" #include "backends/graphics/samsungtvsdl/samsungtvsdl-graphics.h" -SamsungTVSdlGraphicsManager::SamsungTVSdlGraphicsManager(SdlEventSource *sdlEventSource) - : SurfaceSdlGraphicsManager(sdlEventSource) { +SamsungTVSdlGraphicsManager::SamsungTVSdlGraphicsManager(SdlEventSource *sdlEventSource, SdlWindow *window) + : SurfaceSdlGraphicsManager(sdlEventSource, window) { } bool SamsungTVSdlGraphicsManager::hasFeature(OSystem::Feature f) { diff --git a/backends/graphics/samsungtvsdl/samsungtvsdl-graphics.h b/backends/graphics/samsungtvsdl/samsungtvsdl-graphics.h index 15ba3dca48..8699d77bc8 100644 --- a/backends/graphics/samsungtvsdl/samsungtvsdl-graphics.h +++ b/backends/graphics/samsungtvsdl/samsungtvsdl-graphics.h @@ -29,7 +29,7 @@ class SamsungTVSdlGraphicsManager : public SurfaceSdlGraphicsManager { public: - SamsungTVSdlGraphicsManager(SdlEventSource *sdlEventSource); + SamsungTVSdlGraphicsManager(SdlEventSource *sdlEventSource, SdlWindow *window); bool hasFeature(OSystem::Feature f); void setFeatureState(OSystem::Feature f, bool enable); diff --git a/backends/graphics/sdl/sdl-graphics.cpp b/backends/graphics/sdl/sdl-graphics.cpp index f6d56ece01..a13ca45477 100644 --- a/backends/graphics/sdl/sdl-graphics.cpp +++ b/backends/graphics/sdl/sdl-graphics.cpp @@ -26,19 +26,11 @@ #include "backends/events/sdl/sdl-events.h" #include "common/textconsole.h" -SdlGraphicsManager::SdlGraphicsManager(SdlEventSource *source) - : _eventSource(source) -#if SDL_VERSION_ATLEAST(2, 0, 0) - , _window(nullptr), _inputGrabState(false), _windowCaption("ScummVM"), _windowIcon(nullptr) -#endif - { +SdlGraphicsManager::SdlGraphicsManager(SdlEventSource *source, SdlWindow *window) + : _eventSource(source), _window(window) { } SdlGraphicsManager::~SdlGraphicsManager() { -#if SDL_VERSION_ATLEAST(2, 0, 0) - SDL_FreeSurface(_windowIcon); - destroyWindow(); -#endif } void SdlGraphicsManager::activateManager() { @@ -49,113 +41,6 @@ void SdlGraphicsManager::deactivateManager() { _eventSource->setGraphicsManager(0); } -void SdlGraphicsManager::setWindowCaption(const Common::String &caption) { -#if SDL_VERSION_ATLEAST(2, 0, 0) - _windowCaption = caption; - if (_window) { - SDL_SetWindowTitle(_window, caption.c_str()); - } -#else - SDL_WM_SetCaption(caption.c_str(), caption.c_str()); -#endif -} - -void SdlGraphicsManager::setWindowIcon(SDL_Surface *icon) { -#if SDL_VERSION_ATLEAST(2, 0, 0) - SDL_FreeSurface(_windowIcon); - _windowIcon = icon; - if (_window) { - SDL_SetWindowIcon(_window, icon); - } -#else - SDL_WM_SetIcon(icon, NULL); - SDL_FreeSurface(icon); -#endif -} - -void SdlGraphicsManager::toggleMouseGrab() { -#if SDL_VERSION_ATLEAST(2, 0, 0) - if (_window) { - _inputGrabState = !(SDL_GetWindowGrab(_window) == SDL_TRUE); - SDL_SetWindowGrab(_window, _inputGrabState ? SDL_TRUE : SDL_FALSE); - } -#else - if (SDL_WM_GrabInput(SDL_GRAB_QUERY) == SDL_GRAB_OFF) { - SDL_WM_GrabInput(SDL_GRAB_ON); - } else { - SDL_WM_GrabInput(SDL_GRAB_OFF); - } -#endif -} - -bool SdlGraphicsManager::hasMouseFocus() const { -#if SDL_VERSION_ATLEAST(2, 0, 0) - if (_window) { - return (SDL_GetWindowFlags(_window) & SDL_WINDOW_MOUSE_FOCUS); - } else { - return false; - } -#else - return (SDL_GetAppState() & SDL_APPMOUSEFOCUS); -#endif -} - -void SdlGraphicsManager::warpMouseInWindow(uint x, uint y) { -#if SDL_VERSION_ATLEAST(2, 0, 0) - if (_window) { - SDL_WarpMouseInWindow(_window, x, y); - } -#else - SDL_WarpMouse(x, y); -#endif -} - -void SdlGraphicsManager::iconifyWindow() { -#if SDL_VERSION_ATLEAST(2, 0, 0) - if (_window) { - SDL_MinimizeWindow(_window); - } -#else - SDL_WM_IconifyWindow(); -#endif -} - -SdlGraphicsManager::State::State() -#if SDL_VERSION_ATLEAST(2, 0, 0) - : windowIcon(nullptr) -#endif - { -} - -SdlGraphicsManager::State::~State() { -#if SDL_VERSION_ATLEAST(2, 0, 0) - SDL_FreeSurface(windowIcon); -#endif -} - -#if SDL_VERSION_ATLEAST(2, 0, 0) -SDL_Surface *copySDLSurface(SDL_Surface *src) { - const bool locked = SDL_MUSTLOCK(src) == SDL_TRUE; - - if (locked) { - if (SDL_LockSurface(src) != 0) { - return nullptr; - } - } - - SDL_Surface *res = SDL_CreateRGBSurfaceFrom(src->pixels, - src->w, src->h, src->format->BitsPerPixel, - src->pitch, src->format->Rmask, src->format->Gmask, - src->format->Bmask, src->format->Amask); - - if (locked) { - SDL_UnlockSurface(src); - } - - return res; -} -#endif - SdlGraphicsManager::State SdlGraphicsManager::getState() { State state; @@ -167,30 +52,10 @@ SdlGraphicsManager::State SdlGraphicsManager::getState() { #ifdef USE_RGB_COLOR state.pixelFormat = getScreenFormat(); #endif - -#if SDL_VERSION_ATLEAST(2, 0, 0) - state.inputGrabState = _inputGrabState; - state.windowCaption = _windowCaption; - state.windowIcon = copySDLSurface(_windowIcon); -#endif - return state; } bool SdlGraphicsManager::setState(const State &state) { -#if SDL_VERSION_ATLEAST(2, 0, 0) - _inputGrabState = state.inputGrabState; - if (!_window) { - _windowCaption = state.windowCaption; - SDL_FreeSurface(_windowIcon); - _windowIcon = copySDLSurface(state.windowIcon); - } else { - SDL_SetWindowGrab(_window, _inputGrabState ? SDL_TRUE : SDL_FALSE); - setWindowCaption(state.windowCaption); - setWindowIcon(copySDLSurface(state.windowIcon)); - } -#endif - beginGFXTransaction(); #ifdef USE_RGB_COLOR initSize(state.screenWidth, state.screenHeight, &state.pixelFormat); @@ -208,26 +73,3 @@ bool SdlGraphicsManager::setState(const State &state) { } } -#if SDL_VERSION_ATLEAST(2, 0, 0) -bool SdlGraphicsManager::createWindow(int width, int height, uint32 flags) { - destroyWindow(); - - if (_inputGrabState) { - flags |= SDL_WINDOW_INPUT_GRABBED; - } - - _window = SDL_CreateWindow(_windowCaption.c_str(), SDL_WINDOWPOS_UNDEFINED, - SDL_WINDOWPOS_UNDEFINED, width, height, flags); - if (!_window) { - return false; - } - SDL_SetWindowIcon(_window, _windowIcon); - - return true; -} - -void SdlGraphicsManager::destroyWindow() { - SDL_DestroyWindow(_window); - _window = nullptr; -} -#endif diff --git a/backends/graphics/sdl/sdl-graphics.h b/backends/graphics/sdl/sdl-graphics.h index af7242b99e..7f8790a9b4 100644 --- a/backends/graphics/sdl/sdl-graphics.h +++ b/backends/graphics/sdl/sdl-graphics.h @@ -24,10 +24,9 @@ #define BACKENDS_GRAPHICS_SDL_SDLGRAPHICS_H #include "backends/graphics/graphics.h" +#include "backends/platform/sdl/sdl-window.h" -#include "backends/platform/sdl/sdl-sys.h" #include "common/rect.h" -#include "common/str.h" class SdlEventSource; @@ -38,7 +37,7 @@ class SdlEventSource; */ class SdlGraphicsManager : virtual public GraphicsManager { public: - SdlGraphicsManager(SdlEventSource *source); + SdlGraphicsManager(SdlEventSource *source, SdlWindow *window); virtual ~SdlGraphicsManager(); /** @@ -94,49 +93,10 @@ public: virtual void notifyMousePos(Common::Point mouse) = 0; /** - * Change the caption of the window. - * - * @param caption New window caption in UTF-8 encoding. - */ - void setWindowCaption(const Common::String &caption); - - /** - * Attach an icon to the window. - * - * @param icon The surface to use as icon. SdlGraphicsManager takes - * ownership over it. - */ - void setWindowIcon(SDL_Surface *icon); - - /** - * Toggle mouse grab state. This decides whether the cursor can leave the - * window or not. - */ - void toggleMouseGrab(); - - /** - * Check whether the application has mouse focus. - */ - bool hasMouseFocus() const; - - /** - * Warp the mouse to the specified position in window coordinates. - */ - void warpMouseInWindow(uint x, uint y); - - /** - * Iconifies the window. - */ - void iconifyWindow(); - - /** * A (subset) of the graphic manager's state. This is used when switching * between different SDL graphic managers on runtime. */ struct State { - State(); - ~State(); - int screenWidth, screenHeight; bool aspectRatio; bool fullscreen; @@ -145,12 +105,6 @@ public: #ifdef USE_RGB_COLOR Graphics::PixelFormat pixelFormat; #endif - -#if SDL_VERSION_ATLEAST(2, 0, 0) - bool inputGrabState; - Common::String windowCaption; - SDL_Surface *windowIcon; -#endif }; /** @@ -163,19 +117,14 @@ public: */ bool setState(const State &state); + /** + * Queries the SDL window. + */ + SdlWindow *getWindow() const { return _window; } + protected: SdlEventSource *_eventSource; - -#if SDL_VERSION_ATLEAST(2, 0, 0) - SDL_Window *_window; - - bool createWindow(int width, int height, uint32 flags); - void destroyWindow(); -private: - bool _inputGrabState; - Common::String _windowCaption; - SDL_Surface *_windowIcon; -#endif + SdlWindow *_window; }; #endif diff --git a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp index 8e349653d0..d08925349a 100644 --- a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp +++ b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp @@ -116,9 +116,9 @@ static AspectRatio getDesiredAspectRatio() { } #endif -SurfaceSdlGraphicsManager::SurfaceSdlGraphicsManager(SdlEventSource *sdlEventSource) +SurfaceSdlGraphicsManager::SurfaceSdlGraphicsManager(SdlEventSource *sdlEventSource, SdlWindow *window) : - SdlGraphicsManager(sdlEventSource), + SdlGraphicsManager(sdlEventSource, window), #ifdef USE_OSD _osdSurface(0), _osdAlpha(SDL_ALPHA_TRANSPARENT), _osdFadeStartTime(0), #endif @@ -239,7 +239,7 @@ void SurfaceSdlGraphicsManager::setFeatureState(OSystem::Feature f, bool enable) break; case OSystem::kFeatureIconifyWindow: if (enable) - iconifyWindow(); + _window->iconifyWindow(); break; default: break; @@ -1742,7 +1742,7 @@ void SurfaceSdlGraphicsManager::warpMouse(int x, int y) { int y1 = y; // Don't change actual mouse position, when mouse is outside of our window (in case of windowed mode) - if (!hasMouseFocus()) { + if (!_window->hasMouseFocus()) { setMousePos(x, y); // but change game cursor position return; } @@ -1752,9 +1752,9 @@ void SurfaceSdlGraphicsManager::warpMouse(int x, int y) { if (_mouseCurState.x != x || _mouseCurState.y != y) { if (!_overlayVisible) - warpMouseInWindow(x * _videoMode.scaleFactor, y1 * _videoMode.scaleFactor); + _window->warpMouseInWindow(x * _videoMode.scaleFactor, y1 * _videoMode.scaleFactor); else - warpMouseInWindow(x, y1); + _window->warpMouseInWindow(x, y1); // SDL_WarpMouse() generates a mouse movement event, so // setMousePos() would be called eventually. However, the @@ -2357,17 +2357,17 @@ void SurfaceSdlGraphicsManager::deinitializeRenderer() { SDL_DestroyRenderer(_renderer); _renderer = nullptr; - destroyWindow(); + _window->destroyWindow(); } SDL_Surface *SurfaceSdlGraphicsManager::SDL_SetVideoMode(int width, int height, int bpp, Uint32 flags) { deinitializeRenderer(); - if (!createWindow(width, height, (flags & SDL_FULLSCREEN) ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0)) { + if (!_window->createWindow(width, height, (flags & SDL_FULLSCREEN) ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0)) { return nullptr; } - _renderer = SDL_CreateRenderer(_window, -1, 0); + _renderer = SDL_CreateRenderer(_window->getSDLWindow(), -1, 0); if (!_renderer) { deinitializeRenderer(); return nullptr; diff --git a/backends/graphics/surfacesdl/surfacesdl-graphics.h b/backends/graphics/surfacesdl/surfacesdl-graphics.h index c4227475c0..4ba15a304b 100644 --- a/backends/graphics/surfacesdl/surfacesdl-graphics.h +++ b/backends/graphics/surfacesdl/surfacesdl-graphics.h @@ -77,7 +77,7 @@ public: */ class SurfaceSdlGraphicsManager : public SdlGraphicsManager, public Common::EventObserver { public: - SurfaceSdlGraphicsManager(SdlEventSource *sdlEventSource); + SurfaceSdlGraphicsManager(SdlEventSource *sdlEventSource, SdlWindow *window); virtual ~SurfaceSdlGraphicsManager(); virtual void activateManager(); diff --git a/backends/graphics/symbiansdl/symbiansdl-graphics.cpp b/backends/graphics/symbiansdl/symbiansdl-graphics.cpp index e339fecd1c..c17cfd5efa 100644 --- a/backends/graphics/symbiansdl/symbiansdl-graphics.cpp +++ b/backends/graphics/symbiansdl/symbiansdl-graphics.cpp @@ -27,8 +27,8 @@ #include "backends/graphics/symbiansdl/symbiansdl-graphics.h" #include "backends/platform/symbian/src/SymbianActions.h" -SymbianSdlGraphicsManager::SymbianSdlGraphicsManager(SdlEventSource *sdlEventSource) - : SurfaceSdlGraphicsManager(sdlEventSource) { +SymbianSdlGraphicsManager::SymbianSdlGraphicsManager(SdlEventSource *sdlEventSource, SdlWindow *window) + : SurfaceSdlGraphicsManager(sdlEventSource, window) { } int SymbianSdlGraphicsManager::getDefaultGraphicsMode() const { diff --git a/backends/graphics/symbiansdl/symbiansdl-graphics.h b/backends/graphics/symbiansdl/symbiansdl-graphics.h index f514db286c..fb9a49a834 100644 --- a/backends/graphics/symbiansdl/symbiansdl-graphics.h +++ b/backends/graphics/symbiansdl/symbiansdl-graphics.h @@ -27,7 +27,7 @@ class SymbianSdlGraphicsManager : public SurfaceSdlGraphicsManager { public: - SymbianSdlGraphicsManager(SdlEventSource *sdlEventSource); + SymbianSdlGraphicsManager(SdlEventSource *sdlEventSource, SdlWindow *window); public: virtual bool hasFeature(OSystem::Feature f); diff --git a/backends/graphics/wincesdl/wincesdl-graphics.cpp b/backends/graphics/wincesdl/wincesdl-graphics.cpp index 8e4685dbd8..07f7d47262 100644 --- a/backends/graphics/wincesdl/wincesdl-graphics.cpp +++ b/backends/graphics/wincesdl/wincesdl-graphics.cpp @@ -42,8 +42,8 @@ #include "backends/platform/wince/CEScaler.h" #include "backends/platform/wince/CEgui/ItemAction.h" -WINCESdlGraphicsManager::WINCESdlGraphicsManager(SdlEventSource *sdlEventSource) - : SurfaceSdlGraphicsManager(sdlEventSource), +WINCESdlGraphicsManager::WINCESdlGraphicsManager(SdlEventSource *sdlEventSource, SdlWindow *window) + : SurfaceSdlGraphicsManager(sdlEventSource, window), _panelInitialized(false), _noDoubleTapRMB(false), _noDoubleTapPT(false), _toolbarHighDrawn(false), _newOrientation(0), _orientationLandscape(0), _panelVisible(true), _saveActiveToolbar(NAME_MAIN_PANEL), _panelStateForced(false), diff --git a/backends/graphics/wincesdl/wincesdl-graphics.h b/backends/graphics/wincesdl/wincesdl-graphics.h index 50b422c10d..9316c69e44 100644 --- a/backends/graphics/wincesdl/wincesdl-graphics.h +++ b/backends/graphics/wincesdl/wincesdl-graphics.h @@ -41,7 +41,7 @@ extern bool _hasSmartphoneResolution; class WINCESdlGraphicsManager : public SurfaceSdlGraphicsManager { public: - WINCESdlGraphicsManager(SdlEventSource *sdlEventSource); + WINCESdlGraphicsManager(SdlEventSource *sdlEventSource, SdlWindow *window); const OSystem::GraphicsMode *getSupportedGraphicsModes() const; void initSize(uint w, uint h, const Graphics::PixelFormat *format = NULL); |