From 065b2cf470c53f497bf84c93b61eb5955a3f3377 Mon Sep 17 00:00:00 2001 From: David Ludwig Date: Tue, 27 Aug 2013 10:56:10 -0400 Subject: [PATCH] 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 | 10 ++++++---- src/video/winrt/SDL_winrtvideo.cpp | 29 ++++++----------------------- 2 files changed, 12 insertions(+), 27 deletions(-) diff --git a/src/core/winrt/SDL_winrtapp.cpp b/src/core/winrt/SDL_winrtapp.cpp index 00d4762be..22df55b35 100644 --- a/src/core/winrt/SDL_winrtapp.cpp +++ b/src/core/winrt/SDL_winrtapp.cpp @@ -300,10 +300,12 @@ void SDL_WinRTApp::OnWindowSizeChanged(CoreWindow^ sender, WindowSizeChangedEven // 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); diff --git a/src/video/winrt/SDL_winrtvideo.cpp b/src/video/winrt/SDL_winrtvideo.cpp index b5295dd13..48e6ed8dd 100644 --- a/src/video/winrt/SDL_winrtvideo.cpp +++ b/src/video/winrt/SDL_winrtvideo.cpp @@ -187,31 +187,14 @@ WINRT_CreateWindow(_THIS, SDL_Window * window) 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). - */ - _this->displays[0].fullscreen_window = window; + /* 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. - /* 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. + TODO, WinRT: if and when non-fullscreen XAML control support is added to SDL, consider making those resizable via SDL_Window's interfaces. */ - 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: