Commit 6dc2a410eb33ecb3fd1894d9d219a5cd91686bc7

David Ludwig 2013-08-27T12:13:45

WinRT: moved the WinRT SDL_VideoDevice out of SDL_WinRTApp This was done to help pave the way for XAML support.

diff --git a/src/core/winrt/SDL_winrtapp.cpp b/src/core/winrt/SDL_winrtapp.cpp
index 2a97fc5..df23ca9 100644
--- a/src/core/winrt/SDL_winrtapp.cpp
+++ b/src/core/winrt/SDL_winrtapp.cpp
@@ -40,6 +40,7 @@ extern "C" {
 #include "SDL_winrtapp.h"
 
 extern SDL_Window * WINRT_GlobalSDLWindow;
+extern SDL_VideoDevice * WINRT_GlobalSDLVideoDevice;
 
 
 // Compile-time debugging options:
@@ -145,8 +146,7 @@ static void WINRT_SetDisplayOrientationsPreference(void *userdata, const char *n
 
 SDL_WinRTApp::SDL_WinRTApp() :
     m_windowClosed(false),
-    m_windowVisible(true),
-    m_sdlVideoDevice(NULL)
+    m_windowVisible(true)
 {
 }
 
@@ -306,9 +306,9 @@ void SDL_WinRTApp::OnWindowSizeChanged(CoreWindow^ sender, WindowSizeChangedEven
         // size, and the Direct3D 11.1 renderer wouldn't resize its swap
         // chain.
         SDL_DisplayMode resizedDisplayMode = CalcCurrentDisplayMode();
-        m_sdlVideoDevice->displays[0].current_mode = resizedDisplayMode;
-        m_sdlVideoDevice->displays[0].desktop_mode = resizedDisplayMode;
-        m_sdlVideoDevice->displays[0].display_modes[0] = resizedDisplayMode;
+        WINRT_GlobalSDLVideoDevice->displays[0].current_mode = resizedDisplayMode;
+        WINRT_GlobalSDLVideoDevice->displays[0].desktop_mode = resizedDisplayMode;
+        WINRT_GlobalSDLVideoDevice->displays[0].display_modes[0] = resizedDisplayMode;
 
         // Send the window-resize event to the rest of SDL, and to apps:
         const int windowWidth = (int) ceil(args->Size.Width);
@@ -487,8 +487,3 @@ SDL_DisplayMode SDL_WinRTApp::CalcCurrentDisplayMode()
 
     return mode;
 }
-
-void SDL_WinRTApp::SetSDLVideoDevice(const SDL_VideoDevice * videoDevice)
-{
-    m_sdlVideoDevice = videoDevice;
-}
diff --git a/src/core/winrt/SDL_winrtapp.h b/src/core/winrt/SDL_winrtapp.h
index a8b5bd3..0b76621 100644
--- a/src/core/winrt/SDL_winrtapp.h
+++ b/src/core/winrt/SDL_winrtapp.h
@@ -16,7 +16,6 @@ internal:
     // SDL-specific methods
     SDL_DisplayMode CalcCurrentDisplayMode();
     void PumpEvents();
-    void SetSDLVideoDevice(const SDL_VideoDevice * videoDevice);
     Windows::Foundation::Point TransformCursor(Windows::Foundation::Point rawPosition);
 
 protected:
@@ -40,5 +39,4 @@ protected:
 private:
     bool m_windowClosed;
     bool m_windowVisible;
-    const SDL_VideoDevice* m_sdlVideoDevice;
 };
diff --git a/src/video/winrt/SDL_winrtvideo.cpp b/src/video/winrt/SDL_winrtvideo.cpp
index 8d2f612..b2534c6 100644
--- a/src/video/winrt/SDL_winrtvideo.cpp
+++ b/src/video/winrt/SDL_winrtvideo.cpp
@@ -79,6 +79,11 @@ struct SDL_WindowData
 SDL_Window * WINRT_GlobalSDLWindow = NULL;
 
 
+/* The global, WinRT, video device.
+*/
+SDL_VideoDevice * WINRT_GlobalSDLVideoDevice = NULL;
+
+
 /* WinRT driver bootstrap functions */
 
 static int
@@ -90,7 +95,9 @@ WINRT_Available(void)
 static void
 WINRT_DeleteDevice(SDL_VideoDevice * device)
 {
-    SDL_WinRTGlobalApp->SetSDLVideoDevice(NULL);
+    if (device == WINRT_GlobalSDLVideoDevice) {
+        WINRT_GlobalSDLVideoDevice = NULL;
+    }
     SDL_free(device);
 }
 
@@ -118,7 +125,7 @@ WINRT_CreateDevice(int devindex)
     device->PumpEvents = WINRT_PumpEvents;
     device->GetWindowWMInfo = WINRT_GetWindowWMInfo;
     device->free = WINRT_DeleteDevice;
-    SDL_WinRTGlobalApp->SetSDLVideoDevice(device);
+    WINRT_GlobalSDLVideoDevice = NULL;
 
     return device;
 }