WinRT: made all SDL_Windows get sized to the WinRT-defined window size
authorDavid Ludwig <dludwig@pobox.com>
Tue, 27 Aug 2013 10:56:10 -0400
changeset 8491 50b0bdce11cd
parent 8490 b05c6db83a07
child 8492 1bcacb98366e
WinRT: made all SDL_Windows get sized to the WinRT-defined window size This change removes some code that attempted to allow non-standard window sizes, the idea of which was to do display scaling, and a hackish one at that. If display scaling is needed, use SDL_Renderer as appropriate.
src/core/winrt/SDL_winrtapp.cpp
src/video/winrt/SDL_winrtvideo.cpp
--- a/src/core/winrt/SDL_winrtapp.cpp	Tue Aug 27 09:53:58 2013 -0400
+++ b/src/core/winrt/SDL_winrtapp.cpp	Tue Aug 27 10:56:10 2013 -0400
@@ -300,10 +300,12 @@
         // window-resize event as it appeared the SDL window didn't change
         // size, and the Direct3D 11.1 renderer wouldn't resize its swap
         // chain.
-        //
-        // TODO, WinRT: consider dropping old display modes after the fullscreen window changes size (from rotations, etc.)
-        m_sdlWindowData->sdlWindow->fullscreen_mode = GetMainDisplayMode();
-        SDL_AddDisplayMode(&m_sdlVideoDevice->displays[0], &m_sdlWindowData->sdlWindow->fullscreen_mode);
+        SDL_DisplayMode newDisplayMode = GetMainDisplayMode();
+        m_sdlVideoDevice->displays[0].current_mode = newDisplayMode;
+        m_sdlVideoDevice->displays[0].desktop_mode = newDisplayMode;
+        m_sdlVideoDevice->displays[0].display_modes[0] = newDisplayMode;
+
+        m_sdlWindowData->sdlWindow->fullscreen_mode = newDisplayMode;
 
         // Send the window-resize event to the rest of SDL, and to apps:
         const int windowWidth = (int) ceil(args->Size.Width);
--- a/src/video/winrt/SDL_winrtvideo.cpp	Tue Aug 27 09:53:58 2013 -0400
+++ b/src/video/winrt/SDL_winrtvideo.cpp	Tue Aug 27 10:56:10 2013 -0400
@@ -187,31 +187,14 @@
         SDL_WINDOW_MAXIMIZED |
         SDL_WINDOW_INPUT_GRABBED;
 
-    /* HACK from DLudwig: The following line of code prevents
-       SDL_CreateWindow and SDL_UpdateFullscreenMode from trying to resize
-       the window after the call to WINRT_CreateWindow returns.
-       
-       This hack should allow a window to be created in virtually any size,
-       and more importantly, it allows a window's framebuffer, as created and
-       retrieved via SDL_GetWindowSurface, to be in any size.  This can be
-       utilized by apps centered around software rendering, such as ports
-       of older apps.  The app can have SDL create a framebuffer in any size
-       it chooses.  SDL will scale the framebuffer to the native
-       screen size on the GPU (via SDL_UpdateWindowSurface).
+    /* WinRT does not, as of this writing, appear to support app-adjustable
+       window sizes.  Set the window size to whatever the native WinRT
+       CoreWindow is set at.
+
+       TODO, WinRT: if and when non-fullscreen XAML control support is added to SDL, consider making those resizable via SDL_Window's interfaces.
     */
-    _this->displays[0].fullscreen_window = window;
-
-    /* Further prevent any display resizing, and make sure SDL_GetWindowDisplayMode
-       can report the correct size of windows, by creating a new display
-       mode in the requested size.  To note, if the window is being created in
-       the device's native screen size, SDL_AddDisplayMode will do nothing.
-    */
-    window->fullscreen_mode = SDL_WinRTGlobalApp->GetMainDisplayMode();
-    window->fullscreen_mode.w = window->w;
-    window->fullscreen_mode.h = window->h;
-    SDL_AddDisplayMode(&_this->displays[0], &window->fullscreen_mode);
-
-    /* TODO: Consider removing custom display modes in WINRT_DestroyWindow. */
+    window->w = _this->displays[0].current_mode.w;
+    window->h = _this->displays[0].current_mode.h;
  
     /* Make sure the WinRT app's IFramworkView can post events on
        behalf of SDL: