Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2012-03-22 22:47:52 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-03-22 22:47:52 +0400
commitd89c5077f30ea30cec7c2e29e9597d3177281b47 (patch)
treea7663878aa66fce206d0ee2fe38078a89139f9e0 /intern/ghost
parent665f784b0670a2008f783a3351b60dddf1edc72d (diff)
patch [#30636] Enable full screen mode with SDL2
from Wander Costa (walac)
Diffstat (limited to 'intern/ghost')
-rw-r--r--intern/ghost/intern/GHOST_DisplayManagerSDL.cpp15
-rw-r--r--intern/ghost/intern/GHOST_DisplayManagerSDL.h4
-rw-r--r--intern/ghost/intern/GHOST_SystemSDL.cpp11
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));