diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-03-22 22:47:52 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-03-22 22:47:52 +0400 |
commit | d89c5077f30ea30cec7c2e29e9597d3177281b47 (patch) | |
tree | a7663878aa66fce206d0ee2fe38078a89139f9e0 | |
parent | 665f784b0670a2008f783a3351b60dddf1edc72d (diff) |
patch [#30636] Enable full screen mode with SDL2
from Wander Costa (walac)
-rw-r--r-- | intern/ghost/intern/GHOST_DisplayManagerSDL.cpp | 15 | ||||
-rw-r--r-- | intern/ghost/intern/GHOST_DisplayManagerSDL.h | 4 | ||||
-rw-r--r-- | intern/ghost/intern/GHOST_SystemSDL.cpp | 11 |
3 files changed, 28 insertions, 2 deletions
diff --git a/intern/ghost/intern/GHOST_DisplayManagerSDL.cpp b/intern/ghost/intern/GHOST_DisplayManagerSDL.cpp index e76068f42e6..8d2348dcf5c 100644 --- a/intern/ghost/intern/GHOST_DisplayManagerSDL.cpp +++ b/intern/ghost/intern/GHOST_DisplayManagerSDL.cpp @@ -39,7 +39,7 @@ GHOST_DisplayManagerSDL::GHOST_DisplayManagerSDL(GHOST_SystemSDL *system) GHOST_DisplayManager(), m_system(system) { - /* do nothing */ + memset(&m_mode, 0, sizeof m_mode); } GHOST_TSuccess @@ -105,6 +105,13 @@ GHOST_DisplayManagerSDL::getCurrentDisplaySetting(GHOST_TUns8 display, } GHOST_TSuccess +GHOST_DisplayManagerSDL::getCurrentDisplayModeSDL(SDL_DisplayMode &mode) const +{ + mode = m_mode; + return GHOST_kSuccess; +} + +GHOST_TSuccess GHOST_DisplayManagerSDL:: setCurrentDisplaySetting(GHOST_TUns8 display, const GHOST_DisplaySetting& setting) { @@ -151,6 +158,8 @@ GHOST_DisplayManagerSDL:: setCurrentDisplaySetting(GHOST_TUns8 display, SDL_GetDisplayMode(display, best_fit, &mode); } + m_mode = mode; + /* evil, SDL2 needs a window to adjust display modes */ GHOST_WindowSDL *win = (GHOST_WindowSDL *)m_system->getWindowManager()->getActiveWindow(); @@ -168,6 +177,8 @@ GHOST_DisplayManagerSDL:: setCurrentDisplaySetting(GHOST_TUns8 display, /* this is a problem for the BGE player :S, perhaps SDL2 will resolve at some point. * we really need SDL_SetDisplayModeForDisplay() to become an API func! - campbell */ printf("no windows available, cant fullscreen"); - return GHOST_kFailure; + + /* do not fail, we will try again later when the window is created - wander */ + return GHOST_kSuccess; } } diff --git a/intern/ghost/intern/GHOST_DisplayManagerSDL.h b/intern/ghost/intern/GHOST_DisplayManagerSDL.h index aad0cf39309..bfd8d1a77e6 100644 --- a/intern/ghost/intern/GHOST_DisplayManagerSDL.h +++ b/intern/ghost/intern/GHOST_DisplayManagerSDL.h @@ -62,11 +62,15 @@ public: GHOST_DisplaySetting& setting) const; GHOST_TSuccess + getCurrentDisplayModeSDL(SDL_DisplayMode &mode) const; + + GHOST_TSuccess setCurrentDisplaySetting(GHOST_TUns8 display, const GHOST_DisplaySetting& setting); private : GHOST_SystemSDL * m_system; + SDL_DisplayMode m_mode; }; #endif /* __GHOST_DISPLAYMANAGERSDL_H__ */ diff --git a/intern/ghost/intern/GHOST_SystemSDL.cpp b/intern/ghost/intern/GHOST_SystemSDL.cpp index 4d1159fbfbe..a2b457cc262 100644 --- a/intern/ghost/intern/GHOST_SystemSDL.cpp +++ b/intern/ghost/intern/GHOST_SystemSDL.cpp @@ -76,6 +76,17 @@ GHOST_SystemSDL::createWindow(const STR_String& title, window= new GHOST_WindowSDL (this, title, left, top, width, height, state, parentWindow, type, stereoVisual, 1); if (window) { + if (GHOST_kWindowStateFullScreen == state) { + SDL_Window *sdl_win = window->getSDLWindow(); + SDL_DisplayMode mode; + + static_cast<GHOST_DisplayManagerSDL *> (m_displayManager)->getCurrentDisplayModeSDL(mode); + + SDL_SetWindowDisplayMode(sdl_win, &mode); + SDL_ShowWindow(sdl_win); + SDL_SetWindowFullscreen(sdl_win, SDL_TRUE); + } + if (window->getValid()) { m_windowManager->addWindow(window); pushEvent(new GHOST_Event(getMilliSeconds(), GHOST_kEventWindowSize, window)); |