WinRT: moved the pointer to the global SDL_Window to a separate variable This is a cleanup that is being done to help with WIP XAML support. It may be reverted in the future.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227
diff --git a/src/core/winrt/SDL_winrtapp.cpp b/src/core/winrt/SDL_winrtapp.cpp
index 7622314..2a97fc5 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 ada1963..a8b5bd3 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 bc6dd1d..8d2f612 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) {