diff --git a/src/core/winrt/SDL_winrtapp.cpp b/src/core/winrt/SDL_winrtapp.cpp index 7622314fd..2a97fc5fc 100644 --- a/src/core/winrt/SDL_winrtapp.cpp +++ b/src/core/winrt/SDL_winrtapp.cpp @@ -39,6 +39,8 @@ extern "C" { #include "../../video/winrt/SDL_winrtevents_c.h" #include "SDL_winrtapp.h" +extern SDL_Window * WINRT_GlobalSDLWindow; + // Compile-time debugging options: // To enable, uncomment; to disable, comment them out. @@ -144,7 +146,6 @@ static void WINRT_SetDisplayOrientationsPreference(void *userdata, const char *n SDL_WinRTApp::SDL_WinRTApp() : m_windowClosed(false), m_windowVisible(true), - m_sdlWindow(NULL), m_sdlVideoDevice(NULL) { } @@ -283,16 +284,16 @@ void SDL_WinRTApp::Uninitialize() void SDL_WinRTApp::OnWindowSizeChanged(CoreWindow^ sender, WindowSizeChangedEventArgs^ args) { #if LOG_WINDOW_EVENTS==1 - SDL_Log("%s, size={%f,%f}, current orientation=%d, native orientation=%d, auto rot. pref=%d, m_sdlWindow?=%s\n", + SDL_Log("%s, size={%f,%f}, current orientation=%d, native orientation=%d, auto rot. pref=%d, WINRT_GlobalSDLWindow?=%s\n", __FUNCTION__, args->Size.Width, args->Size.Height, (int)DisplayProperties::CurrentOrientation, (int)DisplayProperties::NativeOrientation, (int)DisplayProperties::AutoRotationPreferences, - (m_sdlWindow ? "yes" : "no")); + (WINRT_GlobalSDLWindow ? "yes" : "no")); #endif - if (m_sdlWindow) { + if (WINRT_GlobalSDLWindow) { // Make the new window size be the one true fullscreen mode. // This change was initially done, in part, to allow the Direct3D 11.1 // renderer to receive window-resize events as a device rotates. @@ -313,7 +314,7 @@ void SDL_WinRTApp::OnWindowSizeChanged(CoreWindow^ sender, WindowSizeChangedEven const int windowWidth = (int) ceil(args->Size.Width); const int windowHeight = (int) ceil(args->Size.Height); SDL_SendWindowEvent( - m_sdlWindow, + WINRT_GlobalSDLWindow, SDL_WINDOWEVENT_RESIZED, windowWidth, windowHeight); @@ -323,20 +324,20 @@ void SDL_WinRTApp::OnWindowSizeChanged(CoreWindow^ sender, WindowSizeChangedEven void SDL_WinRTApp::OnVisibilityChanged(CoreWindow^ sender, VisibilityChangedEventArgs^ args) { #if LOG_WINDOW_EVENTS==1 - SDL_Log("%s, visible?=%s, m_sdlWindow?=%s\n", + SDL_Log("%s, visible?=%s, WINRT_GlobalSDLWindow?=%s\n", __FUNCTION__, (args->Visible ? "yes" : "no"), - (m_sdlWindow ? "yes" : "no")); + (WINRT_GlobalSDLWindow ? "yes" : "no")); #endif m_windowVisible = args->Visible; - if (m_sdlWindow) { - SDL_bool wasSDLWindowSurfaceValid = m_sdlWindow->surface_valid; + if (WINRT_GlobalSDLWindow) { + SDL_bool wasSDLWindowSurfaceValid = WINRT_GlobalSDLWindow->surface_valid; if (args->Visible) { - SDL_SendWindowEvent(m_sdlWindow, SDL_WINDOWEVENT_SHOWN, 0, 0); + SDL_SendWindowEvent(WINRT_GlobalSDLWindow, SDL_WINDOWEVENT_SHOWN, 0, 0); } else { - SDL_SendWindowEvent(m_sdlWindow, SDL_WINDOWEVENT_HIDDEN, 0, 0); + SDL_SendWindowEvent(WINRT_GlobalSDLWindow, SDL_WINDOWEVENT_HIDDEN, 0, 0); } // HACK: Prevent SDL's window-hide handling code, which currently @@ -345,7 +346,7 @@ void SDL_WinRTApp::OnVisibilityChanged(CoreWindow^ sender, VisibilityChangedEven // // A better solution to this probably involves figuring out if the // fake window resize can be prevented. - m_sdlWindow->surface_valid = wasSDLWindowSurfaceValid; + WINRT_GlobalSDLWindow->surface_valid = wasSDLWindowSurfaceValid; } } @@ -359,27 +360,27 @@ void SDL_WinRTApp::OnWindowClosed(CoreWindow^ sender, CoreWindowEventArgs^ args) void SDL_WinRTApp::OnPointerPressed(CoreWindow^ sender, PointerEventArgs^ args) { - WINRT_ProcessPointerPressedEvent(m_sdlWindow, args); + WINRT_ProcessPointerPressedEvent(WINRT_GlobalSDLWindow, args); } void SDL_WinRTApp::OnPointerReleased(CoreWindow^ sender, PointerEventArgs^ args) { - WINRT_ProcessPointerReleasedEvent(m_sdlWindow, args); + WINRT_ProcessPointerReleasedEvent(WINRT_GlobalSDLWindow, args); } void SDL_WinRTApp::OnPointerWheelChanged(CoreWindow^ sender, PointerEventArgs^ args) { - WINRT_ProcessPointerWheelChangedEvent(m_sdlWindow, args); + WINRT_ProcessPointerWheelChangedEvent(WINRT_GlobalSDLWindow, args); } void SDL_WinRTApp::OnMouseMoved(MouseDevice^ mouseDevice, MouseEventArgs^ args) { - WINRT_ProcessMouseMovedEvent(m_sdlWindow, args); + WINRT_ProcessMouseMovedEvent(WINRT_GlobalSDLWindow, args); } void SDL_WinRTApp::OnPointerMoved(CoreWindow^ sender, PointerEventArgs^ args) { - WINRT_ProcessPointerMovedEvent(m_sdlWindow, args); + WINRT_ProcessPointerMovedEvent(WINRT_GlobalSDLWindow, args); } void SDL_WinRTApp::OnKeyDown(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::KeyEventArgs^ args) @@ -438,9 +439,9 @@ void SDL_WinRTApp::OnSuspending(Platform::Object^ sender, SuspendingEventArgs^ a // first via a callback passed to SDL_AddEventWatch, and second via // SDL's event queue, the event will be sent to SDL, then immediately // removed from the queue. - if (m_sdlWindow) + if (WINRT_GlobalSDLWindow) { - SDL_SendWindowEvent(m_sdlWindow, SDL_WINDOWEVENT_MINIMIZED, 0, 0); // TODO: see if SDL_WINDOWEVENT_SIZE_CHANGED should be getting triggered here (it is, currently) + SDL_SendWindowEvent(WINRT_GlobalSDLWindow, SDL_WINDOWEVENT_MINIMIZED, 0, 0); // TODO: see if SDL_WINDOWEVENT_SIZE_CHANGED should be getting triggered here (it is, currently) SDL_FilterEvents(RemoveAppSuspendAndResumeEvents, 0); } deferral->Complete(); @@ -452,9 +453,9 @@ void SDL_WinRTApp::OnResuming(Platform::Object^ sender, Platform::Object^ args) // Restore any data or state that was unloaded on suspend. By default, data // and state are persisted when resuming from suspend. Note that this event // does not occur if the app was previously terminated. - if (m_sdlWindow) + if (WINRT_GlobalSDLWindow) { - SDL_SendWindowEvent(m_sdlWindow, SDL_WINDOWEVENT_RESTORED, 0, 0); // TODO: see if SDL_WINDOWEVENT_SIZE_CHANGED should be getting triggered here (it is, currently) + SDL_SendWindowEvent(WINRT_GlobalSDLWindow, SDL_WINDOWEVENT_RESTORED, 0, 0); // TODO: see if SDL_WINDOWEVENT_SIZE_CHANGED should be getting triggered here (it is, currently) // Remove the app-resume event from the queue, as is done with the // app-suspend event. @@ -487,16 +488,6 @@ SDL_DisplayMode SDL_WinRTApp::CalcCurrentDisplayMode() return mode; } -SDL_Window * SDL_WinRTApp::GetSDLWindow() -{ - return m_sdlWindow; -} - -void SDL_WinRTApp::SetSDLWindow(SDL_Window * window) -{ - m_sdlWindow = window; -} - 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 ada19634c..a8b5bd343 100644 --- a/src/core/winrt/SDL_winrtapp.h +++ b/src/core/winrt/SDL_winrtapp.h @@ -16,8 +16,6 @@ internal: // SDL-specific methods SDL_DisplayMode CalcCurrentDisplayMode(); void PumpEvents(); - SDL_Window * GetSDLWindow(); - void SetSDLWindow(SDL_Window * window); void SetSDLVideoDevice(const SDL_VideoDevice * videoDevice); Windows::Foundation::Point TransformCursor(Windows::Foundation::Point rawPosition); @@ -42,6 +40,5 @@ protected: private: bool m_windowClosed; bool m_windowVisible; - SDL_Window* m_sdlWindow; const SDL_VideoDevice* m_sdlVideoDevice; }; diff --git a/src/video/winrt/SDL_winrtvideo.cpp b/src/video/winrt/SDL_winrtvideo.cpp index bc6dd1dc8..8d2f612df 100644 --- a/src/video/winrt/SDL_winrtvideo.cpp +++ b/src/video/winrt/SDL_winrtvideo.cpp @@ -72,6 +72,13 @@ struct SDL_WindowData }; +/* The global, WinRT, SDL Window. + For now, SDL/WinRT only supports one window (due to platform limitations of + WinRT. +*/ +SDL_Window * WINRT_GlobalSDLWindow = NULL; + + /* WinRT driver bootstrap functions */ static int @@ -164,7 +171,7 @@ WINRT_CreateWindow(_THIS, SDL_Window * window) { // Make sure that only one window gets created, at least until multimonitor // support is added. - if (SDL_WinRTGlobalApp->GetSDLWindow() != NULL) { + if (WINRT_GlobalSDLWindow != NULL) { SDL_SetError("WinRT only supports one window"); return -1; } @@ -202,7 +209,7 @@ WINRT_CreateWindow(_THIS, SDL_Window * window) /* Make sure the WinRT app's IFramworkView can post events on behalf of SDL: */ - SDL_WinRTGlobalApp->SetSDLWindow(window); + WINRT_GlobalSDLWindow = window; /* All done! */ return 0; @@ -213,8 +220,8 @@ WINRT_DestroyWindow(_THIS, SDL_Window * window) { SDL_WindowData * data = (SDL_WindowData *) window->driverdata; - if (SDL_WinRTGlobalApp->GetSDLWindow() == window) { - SDL_WinRTGlobalApp->SetSDLWindow(NULL); + if (WINRT_GlobalSDLWindow == window) { + WINRT_GlobalSDLWindow = NULL; } if (data) {