[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45091] trunk/blender/intern/ghost/intern: patch [#30636] Enable full screen mode with SDL2

Campbell Barton ideasman42 at gmail.com
Thu Mar 22 19:48:03 CET 2012


Revision: 45091
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45091
Author:   campbellbarton
Date:     2012-03-22 18:47:52 +0000 (Thu, 22 Mar 2012)
Log Message:
-----------
patch [#30636] Enable full screen mode with SDL2
from Wander Costa (walac)

Modified Paths:
--------------
    trunk/blender/intern/ghost/intern/GHOST_DisplayManagerSDL.cpp
    trunk/blender/intern/ghost/intern/GHOST_DisplayManagerSDL.h
    trunk/blender/intern/ghost/intern/GHOST_SystemSDL.cpp

Modified: trunk/blender/intern/ghost/intern/GHOST_DisplayManagerSDL.cpp
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_DisplayManagerSDL.cpp	2012-03-22 17:27:37 UTC (rev 45090)
+++ trunk/blender/intern/ghost/intern/GHOST_DisplayManagerSDL.cpp	2012-03-22 18:47:52 UTC (rev 45091)
@@ -39,7 +39,7 @@
       GHOST_DisplayManager(),
       m_system(system)
 {
-	/* do nothing */
+	memset(&m_mode, 0, sizeof m_mode);
 }
 
 GHOST_TSuccess
@@ -105,6 +105,13 @@
 }
 
 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 @@
 		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 @@
 		/* 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;
 	}
 }

Modified: trunk/blender/intern/ghost/intern/GHOST_DisplayManagerSDL.h
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_DisplayManagerSDL.h	2012-03-22 17:27:37 UTC (rev 45090)
+++ trunk/blender/intern/ghost/intern/GHOST_DisplayManagerSDL.h	2012-03-22 18:47:52 UTC (rev 45091)
@@ -62,11 +62,15 @@
 	                         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__ */

Modified: trunk/blender/intern/ghost/intern/GHOST_SystemSDL.cpp
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_SystemSDL.cpp	2012-03-22 17:27:37 UTC (rev 45090)
+++ trunk/blender/intern/ghost/intern/GHOST_SystemSDL.cpp	2012-03-22 18:47:52 UTC (rev 45091)
@@ -76,6 +76,17 @@
 	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));




More information about the Bf-blender-cvs mailing list