From d89c5077f30ea30cec7c2e29e9597d3177281b47 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 22 Mar 2012 18:47:52 +0000 Subject: patch [#30636] Enable full screen mode with SDL2 from Wander Costa (walac) --- intern/ghost/intern/GHOST_DisplayManagerSDL.cpp | 15 +++++++++++++-- intern/ghost/intern/GHOST_DisplayManagerSDL.h | 4 ++++ intern/ghost/intern/GHOST_SystemSDL.cpp | 11 +++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) (limited to 'intern') 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 @@ -104,6 +104,13 @@ GHOST_DisplayManagerSDL::getCurrentDisplaySetting(GHOST_TUns8 display, return GHOST_kSuccess; } +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 @@ -61,12 +61,16 @@ public: getCurrentDisplaySetting(GHOST_TUns8 display, 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 (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)); -- cgit v1.2.3