WinRT: file naming and placement cleanup
authorDavid Ludwig <dludwig@pobox.com>
Tue, 20 Aug 2013 21:22:32 -0400
changeset 8483 d403ded25942
parent 8482 eb0b00e7519e
child 8484 7258989352eb
WinRT: file naming and placement cleanup - moved SDL_WinRTApp.* from src/video/windowsrt/ to src/core/winrt/, and renamed them to SDL_winrtapp.* (to mimick case-sensitivity used elsewhere in SDL) - renamed all "windowsrt" directories (in src) to "winrt", as the shorthand name is used more often (and, IMO, "WinRT" != "Windows RT", not entirely at least)
VisualC-WinPhone/SDL/SDL_VS2012-WinPhone.vcxproj
VisualC-WinPhone/SDL/SDL_VS2012-WinPhone.vcxproj.filters
VisualC-WinRT/SDL/SDL_VS2012-WinRT.vcxproj
VisualC-WinRT/SDL/SDL_VS2012-WinRT.vcxproj.filters
src/core/windowsrt/SDL_winrtpaths.cpp
src/core/winrt/SDL_winrtapp.cpp
src/core/winrt/SDL_winrtapp.h
src/core/winrt/SDL_winrtpaths.cpp
src/video/windowsrt/SDL_WinRTApp.cpp
src/video/windowsrt/SDL_WinRTApp.h
src/video/windowsrt/SDL_winrtevents.cpp
src/video/windowsrt/SDL_winrtevents_c.h
src/video/windowsrt/SDL_winrtmouse.cpp
src/video/windowsrt/SDL_winrtmouse.h
src/video/windowsrt/SDL_winrtvideo.cpp
src/video/windowsrt/SDL_winrtvideo.h
src/video/winrt/SDL_winrtevents.cpp
src/video/winrt/SDL_winrtevents_c.h
src/video/winrt/SDL_winrtmouse.cpp
src/video/winrt/SDL_winrtmouse.h
src/video/winrt/SDL_winrtvideo.cpp
src/video/winrt/SDL_winrtvideo.h
--- a/VisualC-WinPhone/SDL/SDL_VS2012-WinPhone.vcxproj	Tue Aug 13 20:33:15 2013 -0400
+++ b/VisualC-WinPhone/SDL/SDL_VS2012-WinPhone.vcxproj	Tue Aug 20 21:22:32 2013 -0400
@@ -197,6 +197,7 @@
     <ClInclude Include="..\..\src\audio\SDL_wave.h" />
     <ClInclude Include="..\..\src\audio\xaudio2\SDL_xaudio2_winrthelpers.h" />
     <ClInclude Include="..\..\src\core\windows\SDL_windows.h" />
+    <ClInclude Include="..\..\src\core\winrt\SDL_winrtapp.h" />
     <ClInclude Include="..\..\src\events\blank_cursor.h" />
     <ClInclude Include="..\..\src\events\default_cursor.h" />
     <ClInclude Include="..\..\src\events\SDL_clipboardevents_c.h" />
@@ -244,10 +245,9 @@
     <ClInclude Include="..\..\src\video\SDL_RLEaccel_c.h" />
     <ClInclude Include="..\..\src\video\SDL_shape_internals.h" />
     <ClInclude Include="..\..\src\video\SDL_sysvideo.h" />
-    <ClInclude Include="..\..\src\video\windowsrt\SDL_WinRTApp.h" />
-    <ClInclude Include="..\..\src\video\windowsrt\SDL_winrtevents_c.h" />
-    <ClInclude Include="..\..\src\video\windowsrt\SDL_winrtmouse.h" />
-    <ClInclude Include="..\..\src\video\windowsrt\SDL_winrtvideo.h" />
+    <ClInclude Include="..\..\src\video\winrt\SDL_winrtevents_c.h" />
+    <ClInclude Include="..\..\src\video\winrt\SDL_winrtmouse.h" />
+    <ClInclude Include="..\..\src\video\winrt\SDL_winrtvideo.h" />
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\..\src\atomic\SDL_atomic.c" />
@@ -272,13 +272,19 @@
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</CompileAsWinRT>
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</CompileAsWinRT>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\windowsrt\SDL_winrtpaths.cpp">
+    <ClCompile Include="..\..\src\core\windows\SDL_windows.c" />
+    <ClCompile Include="..\..\src\core\winrt\SDL_winrtapp.cpp">
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</CompileAsWinRT>
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</CompileAsWinRT>
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</CompileAsWinRT>
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</CompileAsWinRT>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\windows\SDL_windows.c" />
+    <ClCompile Include="..\..\src\core\winrt\SDL_winrtpaths.cpp">
+      <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</CompileAsWinRT>
+      <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</CompileAsWinRT>
+      <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</CompileAsWinRT>
+      <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</CompileAsWinRT>
+    </ClCompile>
     <ClCompile Include="..\..\src\cpuinfo\SDL_cpuinfo.c" />
     <ClCompile Include="..\..\src\events\SDL_clipboardevents.c" />
     <ClCompile Include="..\..\src\events\SDL_dropevents.c" />
@@ -351,25 +357,19 @@
     <ClCompile Include="..\..\src\video\SDL_stretch.c" />
     <ClCompile Include="..\..\src\video\SDL_surface.c" />
     <ClCompile Include="..\..\src\video\SDL_video.c" />
-    <ClCompile Include="..\..\src\video\windowsrt\SDL_WinRTApp.cpp">
+    <ClCompile Include="..\..\src\video\winrt\SDL_winrtevents.cpp">
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</CompileAsWinRT>
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</CompileAsWinRT>
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</CompileAsWinRT>
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</CompileAsWinRT>
     </ClCompile>
-    <ClCompile Include="..\..\src\video\windowsrt\SDL_winrtevents.cpp">
+    <ClCompile Include="..\..\src\video\winrt\SDL_winrtmouse.cpp">
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</CompileAsWinRT>
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</CompileAsWinRT>
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</CompileAsWinRT>
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</CompileAsWinRT>
     </ClCompile>
-    <ClCompile Include="..\..\src\video\windowsrt\SDL_winrtmouse.cpp">
-      <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</CompileAsWinRT>
-      <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</CompileAsWinRT>
-      <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</CompileAsWinRT>
-      <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</CompileAsWinRT>
-    </ClCompile>
-    <ClCompile Include="..\..\src\video\windowsrt\SDL_winrtvideo.cpp">
+    <ClCompile Include="..\..\src\video\winrt\SDL_winrtvideo.cpp">
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</CompileAsWinRT>
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</CompileAsWinRT>
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</CompileAsWinRT>
--- a/VisualC-WinPhone/SDL/SDL_VS2012-WinPhone.vcxproj.filters	Tue Aug 13 20:33:15 2013 -0400
+++ b/VisualC-WinPhone/SDL/SDL_VS2012-WinPhone.vcxproj.filters	Tue Aug 20 21:22:32 2013 -0400
@@ -321,19 +321,19 @@
     <ClInclude Include="..\..\src\video\SDL_sysvideo.h">
       <Filter>Source Files</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\src\video\windowsrt\SDL_WinRTApp.h">
+    <ClInclude Include="..\..\src\render\direct3d11\SDL_render_d3d11_cpp.h">
       <Filter>Source Files</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\src\video\windowsrt\SDL_winrtevents_c.h">
+    <ClInclude Include="..\..\src\core\winrt\SDL_winrtapp.h">
       <Filter>Source Files</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\src\video\windowsrt\SDL_winrtmouse.h">
+    <ClInclude Include="..\..\src\video\winrt\SDL_winrtevents_c.h">
       <Filter>Source Files</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\src\video\windowsrt\SDL_winrtvideo.h">
+    <ClInclude Include="..\..\src\video\winrt\SDL_winrtmouse.h">
       <Filter>Source Files</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\src\render\direct3d11\SDL_render_d3d11_cpp.h">
+    <ClInclude Include="..\..\src\video\winrt\SDL_winrtvideo.h">
       <Filter>Source Files</Filter>
     </ClInclude>
   </ItemGroup>
@@ -374,9 +374,6 @@
     <ClCompile Include="..\..\src\audio\xaudio2\SDL_xaudio2_winrthelpers.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\windowsrt\SDL_winrtpaths.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\src\core\windows\SDL_windows.c">
       <Filter>Source Files</Filter>
     </ClCompile>
@@ -572,18 +569,6 @@
     <ClCompile Include="..\..\src\video\SDL_video.c">
       <Filter>Source Files</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\src\video\windowsrt\SDL_WinRTApp.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\src\video\windowsrt\SDL_winrtevents.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\src\video\windowsrt\SDL_winrtmouse.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\src\video\windowsrt\SDL_winrtvideo.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\src\render\direct3d11\SDL_render_d3d11.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
@@ -593,6 +578,21 @@
     <ClCompile Include="..\..\src\stdlib\SDL_malloc.c">
       <Filter>Source Files</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\core\winrt\SDL_winrtapp.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\core\winrt\SDL_winrtpaths.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\video\winrt\SDL_winrtevents.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\video\winrt\SDL_winrtmouse.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\video\winrt\SDL_winrtvideo.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <FxCompile Include="..\..\src\render\direct3d11\SDL_D3D11_PixelShader_FixedColor.hlsl">
--- a/VisualC-WinRT/SDL/SDL_VS2012-WinRT.vcxproj	Tue Aug 13 20:33:15 2013 -0400
+++ b/VisualC-WinRT/SDL/SDL_VS2012-WinRT.vcxproj	Tue Aug 20 21:22:32 2013 -0400
@@ -53,7 +53,8 @@
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</CompileAsWinRT>
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</CompileAsWinRT>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\windowsrt\SDL_winrtpaths.cpp">
+    <ClCompile Include="..\..\src\core\windows\SDL_windows.c" />
+    <ClCompile Include="..\..\src\core\winrt\SDL_winrtapp.cpp">
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</CompileAsWinRT>
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</CompileAsWinRT>
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</CompileAsWinRT>
@@ -61,7 +62,14 @@
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</CompileAsWinRT>
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</CompileAsWinRT>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\windows\SDL_windows.c" />
+    <ClCompile Include="..\..\src\core\winrt\SDL_winrtpaths.cpp">
+      <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</CompileAsWinRT>
+      <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</CompileAsWinRT>
+      <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</CompileAsWinRT>
+      <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</CompileAsWinRT>
+      <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</CompileAsWinRT>
+      <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</CompileAsWinRT>
+    </ClCompile>
     <ClCompile Include="..\..\src\cpuinfo\SDL_cpuinfo.c" />
     <ClCompile Include="..\..\src\events\SDL_clipboardevents.c" />
     <ClCompile Include="..\..\src\events\SDL_dropevents.c" />
@@ -136,7 +144,7 @@
     <ClCompile Include="..\..\src\video\SDL_stretch.c" />
     <ClCompile Include="..\..\src\video\SDL_surface.c" />
     <ClCompile Include="..\..\src\video\SDL_video.c" />
-    <ClCompile Include="..\..\src\video\windowsrt\SDL_WinRTApp.cpp">
+    <ClCompile Include="..\..\src\video\winrt\SDL_winrtevents.cpp">
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</CompileAsWinRT>
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</CompileAsWinRT>
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</CompileAsWinRT>
@@ -144,7 +152,7 @@
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</CompileAsWinRT>
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</CompileAsWinRT>
     </ClCompile>
-    <ClCompile Include="..\..\src\video\windowsrt\SDL_winrtevents.cpp">
+    <ClCompile Include="..\..\src\video\winrt\SDL_winrtmouse.cpp">
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</CompileAsWinRT>
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</CompileAsWinRT>
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</CompileAsWinRT>
@@ -152,15 +160,7 @@
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</CompileAsWinRT>
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</CompileAsWinRT>
     </ClCompile>
-    <ClCompile Include="..\..\src\video\windowsrt\SDL_winrtmouse.cpp">
-      <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</CompileAsWinRT>
-      <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</CompileAsWinRT>
-      <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</CompileAsWinRT>
-      <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</CompileAsWinRT>
-      <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</CompileAsWinRT>
-      <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</CompileAsWinRT>
-    </ClCompile>
-    <ClCompile Include="..\..\src\video\windowsrt\SDL_winrtvideo.cpp">
+    <ClCompile Include="..\..\src\video\winrt\SDL_winrtvideo.cpp">
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</CompileAsWinRT>
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</CompileAsWinRT>
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</CompileAsWinRT>
@@ -227,6 +227,7 @@
     <ClInclude Include="..\..\src\audio\SDL_wave.h" />
     <ClInclude Include="..\..\src\audio\xaudio2\SDL_xaudio2_winrthelpers.h" />
     <ClInclude Include="..\..\src\core\windows\SDL_windows.h" />
+    <ClInclude Include="..\..\src\core\winrt\SDL_winrtapp.h" />
     <ClInclude Include="..\..\src\events\blank_cursor.h" />
     <ClInclude Include="..\..\src\events\default_cursor.h" />
     <ClInclude Include="..\..\src\events\SDL_clipboardevents_c.h" />
@@ -275,10 +276,9 @@
     <ClInclude Include="..\..\src\video\SDL_RLEaccel_c.h" />
     <ClInclude Include="..\..\src\video\SDL_shape_internals.h" />
     <ClInclude Include="..\..\src\video\SDL_sysvideo.h" />
-    <ClInclude Include="..\..\src\video\windowsrt\SDL_WinRTApp.h" />
-    <ClInclude Include="..\..\src\video\windowsrt\SDL_winrtevents_c.h" />
-    <ClInclude Include="..\..\src\video\windowsrt\SDL_winrtmouse.h" />
-    <ClInclude Include="..\..\src\video\windowsrt\SDL_winrtvideo.h" />
+    <ClInclude Include="..\..\src\video\winrt\SDL_winrtevents_c.h" />
+    <ClInclude Include="..\..\src\video\winrt\SDL_winrtmouse.h" />
+    <ClInclude Include="..\..\src\video\winrt\SDL_winrtvideo.h" />
   </ItemGroup>
   <ItemGroup>
     <FxCompile Include="..\..\src\render\direct3d11\SDL_D3D11_PixelShader_FixedColor.hlsl">
--- a/VisualC-WinRT/SDL/SDL_VS2012-WinRT.vcxproj.filters	Tue Aug 13 20:33:15 2013 -0400
+++ b/VisualC-WinRT/SDL/SDL_VS2012-WinRT.vcxproj.filters	Tue Aug 20 21:22:32 2013 -0400
@@ -225,18 +225,6 @@
     <ClCompile Include="..\..\src\core\windows\SDL_windows.c">
       <Filter>Source Files</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\src\video\windowsrt\SDL_WinRTApp.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\src\video\windowsrt\SDL_winrtevents.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\src\video\windowsrt\SDL_winrtmouse.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\src\video\windowsrt\SDL_winrtvideo.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\src\audio\xaudio2\SDL_xaudio2.c">
       <Filter>Source Files</Filter>
     </ClCompile>
@@ -252,9 +240,6 @@
     <ClCompile Include="..\..\src\cpuinfo\SDL_cpuinfo.c">
       <Filter>Source Files</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\src\core\windowsrt\SDL_winrtpaths.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\src\render\direct3d11\SDL_render_d3d11.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
@@ -267,6 +252,21 @@
     <ClCompile Include="..\..\src\stdlib\SDL_malloc.c">
       <Filter>Source Files</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\video\winrt\SDL_winrtevents.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\video\winrt\SDL_winrtmouse.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\video\winrt\SDL_winrtvideo.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\core\winrt\SDL_winrtapp.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\core\winrt\SDL_winrtpaths.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\include\begin_code.h">
@@ -353,9 +353,6 @@
     <ClInclude Include="..\..\src\events\SDL_windowevents_c.h">
       <Filter>Source Files</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\src\video\windowsrt\SDL_winrtevents_c.h">
-      <Filter>Source Files</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\src\render\SDL_yuv_sw_c.h">
       <Filter>Source Files</Filter>
     </ClInclude>
@@ -569,15 +566,6 @@
     <ClInclude Include="..\..\src\core\windows\SDL_windows.h">
       <Filter>Source Files</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\src\video\windowsrt\SDL_WinRTApp.h">
-      <Filter>Source Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\src\video\windowsrt\SDL_winrtmouse.h">
-      <Filter>Source Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\src\video\windowsrt\SDL_winrtvideo.h">
-      <Filter>Source Files</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\src\audio\xaudio2\SDL_xaudio2_winrthelpers.h">
       <Filter>Source Files</Filter>
     </ClInclude>
@@ -596,6 +584,18 @@
     <ClInclude Include="..\..\src\joystick\SDL_gamecontrollerdb.h">
       <Filter>Header Files</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\src\video\winrt\SDL_winrtevents_c.h">
+      <Filter>Source Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\video\winrt\SDL_winrtmouse.h">
+      <Filter>Source Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\video\winrt\SDL_winrtvideo.h">
+      <Filter>Source Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\core\winrt\SDL_winrtapp.h">
+      <Filter>Source Files</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <Filter Include="Header Files">
--- a/src/core/windowsrt/SDL_winrtpaths.cpp	Tue Aug 13 20:33:15 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,94 +0,0 @@
-/* TODO, WinRT: include copyright info in SDL_winrtpaths.cpp
-   TODO, WinRT: add note to SDL_winrtpaths.cpp mentioning that /ZW must be used when compiling the file
-*/
-
-#include "SDL_config.h"
-
-#ifdef __WINRT__
-
-extern "C" {
-#include "SDL_error.h"
-#include "SDL_stdinc.h"
-#include "SDL_system.h"
-#include "../windows/SDL_windows.h"
-}
-
-#include <string>
-#include <unordered_map>
-
-using namespace std;
-using namespace Windows::Storage;
-
-extern "C" const wchar_t *
-SDL_WinRTGetFSPathUNICODE(SDL_WinRT_Path pathType)
-{
-    switch (pathType) {
-        case SDL_WINRT_PATH_INSTALLED_LOCATION:
-        {
-            static wstring path;
-            if (path.empty()) {
-                path = Windows::ApplicationModel::Package::Current->InstalledLocation->Path->Data();
-            }
-            return path.c_str();
-        }
-
-        case SDL_WINRT_PATH_LOCAL_FOLDER:
-        {
-            static wstring path;
-            if (path.empty()) {
-                path = ApplicationData::Current->LocalFolder->Path->Data();
-            }
-            return path.c_str();
-        }
-
-#if WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP
-        case SDL_WINRT_PATH_ROAMING_FOLDER:
-        {
-            static wstring path;
-            if (path.empty()) {
-                path = ApplicationData::Current->RoamingFolder->Path->Data();
-            }
-            return path.c_str();
-        }
-
-        case SDL_WINRT_PATH_TEMP_FOLDER:
-        {
-            static wstring path;
-            if (path.empty()) {
-                path = ApplicationData::Current->TemporaryFolder->Path->Data();
-            }
-            return path.c_str();
-        }
-#endif
-
-        default:
-            break;
-    }
-
-    SDL_Unsupported();
-    return NULL;
-}
-
-extern "C" const char *
-SDL_WinRTGetFSPathUTF8(SDL_WinRT_Path pathType)
-{
-    typedef unordered_map<SDL_WinRT_Path, string> UTF8PathMap;
-    static UTF8PathMap utf8Paths;
-
-    UTF8PathMap::iterator searchResult = utf8Paths.find(pathType);
-    if (searchResult != utf8Paths.end()) {
-        return searchResult->second.c_str();
-    }
-
-    const wchar_t * ucs2Path = SDL_WinRTGetFSPathUNICODE(pathType);
-    if (!ucs2Path) {
-        return NULL;
-    }
-
-    char * utf8Path = WIN_StringToUTF8(ucs2Path);
-    utf8Paths[pathType] = utf8Path;
-    SDL_free(utf8Path);
-    return utf8Paths[pathType].c_str();
-}
-
-#endif /* __WINRT__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/core/winrt/SDL_winrtapp.cpp	Tue Aug 20 21:22:32 2013 -0400
@@ -0,0 +1,986 @@
+
+#include <string>
+#include <unordered_map>
+#include <sstream>
+
+#include "ppltasks.h"
+
+extern "C" {
+#include "SDL_assert.h"
+#include "SDL_events.h"
+#include "SDL_hints.h"
+#include "SDL_log.h"
+#include "SDL_main.h"
+#include "SDL_stdinc.h"
+#include "SDL_render.h"
+#include "../../video/SDL_sysvideo.h"
+//#include "../../SDL_hints_c.h"
+#include "../../events/scancodes_windows.h"
+#include "../../events/SDL_mouse_c.h"
+#include "../../events/SDL_keyboard_c.h"
+#include "../../events/SDL_windowevents_c.h"
+#include "../../render/SDL_sysrender.h"
+}
+
+#include "../../video/winrt/SDL_winrtvideo.h"
+#include "SDL_winrtapp.h"
+
+using namespace concurrency;
+using namespace std;
+using namespace Windows::ApplicationModel;
+using namespace Windows::ApplicationModel::Core;
+using namespace Windows::ApplicationModel::Activation;
+using namespace Windows::Devices::Input;
+using namespace Windows::Graphics::Display;
+using namespace Windows::Foundation;
+using namespace Windows::System;
+using namespace Windows::UI::Core;
+using namespace Windows::UI::Input;
+
+// Compile-time debugging options:
+// To enable, uncomment; to disable, comment them out.
+//#define LOG_POINTER_EVENTS 1
+//#define LOG_WINDOW_EVENTS 1
+//#define LOG_ORIENTATION_EVENTS 1
+
+
+// HACK, DLudwig: The C-style main() will get loaded via the app's
+// WinRT-styled main(), which is part of SDLmain_for_WinRT.cpp.
+// This seems wrong on some level, but does seem to work.
+typedef int (*SDL_WinRT_MainFunction)(int, char **);
+static SDL_WinRT_MainFunction SDL_WinRT_main = nullptr;
+
+// HACK, DLudwig: record a reference to the global, Windows RT 'app'/view.
+// SDL/WinRT will use this throughout its code.
+//
+// TODO, WinRT: consider replacing SDL_WinRTGlobalApp with something
+// non-global, such as something created inside
+// SDL_InitSubSystem(SDL_INIT_VIDEO), or something inside
+// SDL_CreateWindow().
+SDL_WinRTApp ^ SDL_WinRTGlobalApp = nullptr;
+
+ref class SDLApplicationSource sealed : Windows::ApplicationModel::Core::IFrameworkViewSource
+{
+public:
+    virtual Windows::ApplicationModel::Core::IFrameworkView^ CreateView();
+};
+
+IFrameworkView^ SDLApplicationSource::CreateView()
+{
+    // TODO, WinRT: see if this function (CreateView) can ever get called
+    // more than once.  For now, just prevent it from ever assigning
+    // SDL_WinRTGlobalApp more than once.
+    SDL_assert(!SDL_WinRTGlobalApp);
+    SDL_WinRTApp ^ app = ref new SDL_WinRTApp();
+    if (!SDL_WinRTGlobalApp)
+    {
+        SDL_WinRTGlobalApp = app;
+    }
+    return app;
+}
+
+__declspec(dllexport) int SDL_WinRT_RunApplication(SDL_WinRT_MainFunction mainFunction)
+{
+    SDL_WinRT_main = mainFunction;
+    auto direct3DApplicationSource = ref new SDLApplicationSource();
+    CoreApplication::Run(direct3DApplicationSource);
+    return 0;
+}
+
+static void WINRT_SetDisplayOrientationsPreference(void *userdata, const char *name, const char *oldValue, const char *newValue)
+{
+    SDL_assert(SDL_strcmp(name, SDL_HINT_ORIENTATIONS) == 0);
+
+    // Start with no orientation flags, then add each in as they're parsed
+    // from newValue.
+    unsigned int orientationFlags = 0;
+    if (newValue) {
+        std::istringstream tokenizer(newValue);
+        while (!tokenizer.eof()) {
+            std::string orientationName;
+            std::getline(tokenizer, orientationName, ' ');
+            if (orientationName == "LandscapeLeft") {
+                orientationFlags |= (unsigned int) DisplayOrientations::LandscapeFlipped;
+            } else if (orientationName == "LandscapeRight") {
+                orientationFlags |= (unsigned int) DisplayOrientations::Landscape;
+            } else if (orientationName == "Portrait") {
+                orientationFlags |= (unsigned int) DisplayOrientations::Portrait;
+            } else if (orientationName == "PortraitUpsideDown") {
+                orientationFlags |= (unsigned int) DisplayOrientations::PortraitFlipped;
+            }
+        }
+    }
+
+    // If no valid orientation flags were specified, use a reasonable set of defaults:
+    if (!orientationFlags) {
+        // TODO, WinRT: consider seeing if an app's default orientation flags can be found out via some API call(s).
+        orientationFlags = (unsigned int) ( \
+            DisplayOrientations::Landscape |
+            DisplayOrientations::LandscapeFlipped |
+            DisplayOrientations::Portrait |
+            DisplayOrientations::PortraitFlipped);
+    }
+
+    // Set the orientation/rotation preferences.  Please note that this does
+    // not constitute a 100%-certain lock of a given set of possible
+    // orientations.  According to Microsoft's documentation on Windows RT [1]
+    // when a device is not capable of being rotated, Windows may ignore
+    // the orientation preferences, and stick to what the device is capable of
+    // displaying.
+    //
+    // [1] Documentation on the 'InitialRotationPreference' setting for a
+    // Windows app's manifest file describes how some orientation/rotation
+    // preferences may be ignored.  See
+    // http://msdn.microsoft.com/en-us/library/windows/apps/hh700343.aspx
+    // for details.  Microsoft's "Display orientation sample" also gives an
+    // outline of how Windows treats device rotation
+    // (http://code.msdn.microsoft.com/Display-Orientation-Sample-19a58e93).
+    DisplayProperties::AutoRotationPreferences = (DisplayOrientations) orientationFlags;
+}
+
+SDL_WinRTApp::SDL_WinRTApp() :
+    m_windowClosed(false),
+    m_windowVisible(true),
+    m_sdlWindowData(NULL),
+    m_sdlVideoDevice(NULL),
+    m_useRelativeMouseMode(false)
+{
+}
+
+void SDL_WinRTApp::Initialize(CoreApplicationView^ applicationView)
+{
+    applicationView->Activated +=
+        ref new TypedEventHandler<CoreApplicationView^, IActivatedEventArgs^>(this, &SDL_WinRTApp::OnActivated);
+
+    CoreApplication::Suspending +=
+        ref new EventHandler<SuspendingEventArgs^>(this, &SDL_WinRTApp::OnSuspending);
+
+    CoreApplication::Resuming +=
+        ref new EventHandler<Platform::Object^>(this, &SDL_WinRTApp::OnResuming);
+
+    DisplayProperties::OrientationChanged +=
+        ref new DisplayPropertiesEventHandler(this, &SDL_WinRTApp::OnOrientationChanged);
+
+    // Register the hint, SDL_HINT_ORIENTATIONS, with SDL.  This needs to be
+    // done before the hint's callback is registered (as of Feb 22, 2013),
+    // otherwise the hint callback won't get registered.
+    //
+    // WinRT, TODO: see if an app's default orientation can be found out via WinRT API(s), then set the initial value of SDL_HINT_ORIENTATIONS accordingly.
+    //SDL_SetHint(SDL_HINT_ORIENTATIONS, "LandscapeLeft LandscapeRight Portrait PortraitUpsideDown");   // DavidL: this is no longer needed (for SDL_AddHintCallback)
+    SDL_AddHintCallback(SDL_HINT_ORIENTATIONS, WINRT_SetDisplayOrientationsPreference, NULL);
+}
+
+void SDL_WinRTApp::OnOrientationChanged(Object^ sender)
+{
+#if LOG_ORIENTATION_EVENTS==1
+    CoreWindow^ window = CoreWindow::GetForCurrentThread();
+    if (window) {
+        SDL_Log("%s, current orientation=%d, native orientation=%d, auto rot. pref=%d, CoreWindow Size={%f,%f}\n",
+            __FUNCTION__,
+            (int)DisplayProperties::CurrentOrientation,
+            (int)DisplayProperties::NativeOrientation,
+            (int)DisplayProperties::AutoRotationPreferences,
+            window->Bounds.Width,
+            window->Bounds.Height);
+    } else {
+        SDL_Log("%s, current orientation=%d, native orientation=%d, auto rot. pref=%d\n",
+            __FUNCTION__,
+            (int)DisplayProperties::CurrentOrientation,
+            (int)DisplayProperties::NativeOrientation,
+            (int)DisplayProperties::AutoRotationPreferences);
+    }
+#endif
+}
+
+void SDL_WinRTApp::SetWindow(CoreWindow^ window)
+{
+#if LOG_WINDOW_EVENTS==1
+    SDL_Log("%s, current orientation=%d, native orientation=%d, auto rot. pref=%d, window Size={%f,%f}\n",
+        __FUNCTION__,
+        (int)DisplayProperties::CurrentOrientation,
+        (int)DisplayProperties::NativeOrientation,
+        (int)DisplayProperties::AutoRotationPreferences,
+        window->Bounds.Width,
+        window->Bounds.Height);
+#endif
+
+    window->SizeChanged += 
+        ref new TypedEventHandler<CoreWindow^, WindowSizeChangedEventArgs^>(this, &SDL_WinRTApp::OnWindowSizeChanged);
+
+    window->VisibilityChanged +=
+        ref new TypedEventHandler<CoreWindow^, VisibilityChangedEventArgs^>(this, &SDL_WinRTApp::OnVisibilityChanged);
+
+    window->Closed += 
+        ref new TypedEventHandler<CoreWindow^, CoreWindowEventArgs^>(this, &SDL_WinRTApp::OnWindowClosed);
+
+#if WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP
+    window->PointerCursor = ref new CoreCursor(CoreCursorType::Arrow, 0);
+#endif
+
+    window->PointerPressed +=
+        ref new TypedEventHandler<CoreWindow^, PointerEventArgs^>(this, &SDL_WinRTApp::OnPointerPressed);
+
+    window->PointerReleased +=
+        ref new TypedEventHandler<CoreWindow^, PointerEventArgs^>(this, &SDL_WinRTApp::OnPointerReleased);
+
+    window->PointerWheelChanged +=
+        ref new TypedEventHandler<CoreWindow^, PointerEventArgs^>(this, &SDL_WinRTApp::OnPointerWheelChanged);
+
+    window->PointerMoved +=
+        ref new TypedEventHandler<CoreWindow^, PointerEventArgs^>(this, &SDL_WinRTApp::OnPointerMoved);
+
+#if WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP
+    // Retrieves relative-only mouse movements:
+    Windows::Devices::Input::MouseDevice::GetForCurrentView()->MouseMoved +=
+        ref new TypedEventHandler<MouseDevice^, MouseEventArgs^>(this, &SDL_WinRTApp::OnMouseMoved);
+#endif
+
+    window->KeyDown +=
+        ref new TypedEventHandler<CoreWindow^, KeyEventArgs^>(this, &SDL_WinRTApp::OnKeyDown);
+
+    window->KeyUp +=
+        ref new TypedEventHandler<CoreWindow^, KeyEventArgs^>(this, &SDL_WinRTApp::OnKeyUp);
+}
+
+void SDL_WinRTApp::Load(Platform::String^ entryPoint)
+{
+}
+
+void SDL_WinRTApp::Run()
+{
+    SDL_SetMainReady();
+    if (SDL_WinRT_main)
+    {
+        // TODO, WinRT: pass the C-style main() a reasonably realistic
+        // representation of command line arguments.
+        int argc = 0;
+        char **argv = NULL;
+        SDL_WinRT_main(argc, argv);
+    }
+}
+
+void SDL_WinRTApp::PumpEvents()
+{
+    if (!m_windowClosed)
+    {
+        if (m_windowVisible)
+        {
+            CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessAllIfPresent);
+        }
+        else
+        {
+            CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessOneAndAllPending);
+        }
+    }
+}
+
+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_sdlWindowData?=%s\n",
+        __FUNCTION__,
+        args->Size.Width, args->Size.Height,
+        (int)DisplayProperties::CurrentOrientation,
+        (int)DisplayProperties::NativeOrientation,
+        (int)DisplayProperties::AutoRotationPreferences,
+        (m_sdlWindowData ? "yes" : "no"));
+#endif
+
+    if (m_sdlWindowData) {
+        // Make the new window size be the one true fullscreen mode.
+        // This change was done, in part, to allow the Direct3D 11.1 renderer
+        // to receive window-resize events as a device rotates.
+        // Before, rotating a device from landscape, to portrait, and then
+        // back to landscape would cause the Direct3D 11.1 swap buffer to
+        // not get resized appropriately.  SDL would, on the rotation from
+        // landscape to portrait, re-resize the SDL window to it's initial
+        // size (landscape).  On the subsequent rotation, SDL would drop the
+        // 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 = SDL_WinRTGlobalApp->GetMainDisplayMode();
+        SDL_AddDisplayMode(&m_sdlVideoDevice->displays[0], &m_sdlWindowData->sdlWindow->fullscreen_mode);
+
+        // HACK, Feb 19, 2013: SDL_WINDOWEVENT_RESIZED events, when sent,
+        // will attempt to fix the values of the main window's renderer's
+        // viewport.  While this can be good, it does appear to be buggy,
+        // and can cause a fullscreen viewport to become corrupted.  This
+        // behavior was noticed on a Surface RT while rotating the device
+        // from landscape to portrait.  Oddly enough, this did not occur
+        // in the Windows Simulator.
+        //
+        // Backing up, then restoring, the main renderer's 'resized' flag
+        // seems to fix fullscreen viewport problems when rotating a
+        // Windows device.
+        //
+        // Commencing hack in 3... 2... 1...
+        //
+        // UPDATE, SDL 2.0.0 update: the 'resized' flag is now gone.  This
+        // hack might not be necessary any more.
+        //
+        //SDL_Renderer * rendererForMainWindow = SDL_GetRenderer(m_sdlWindowData->sdlWindow);
+        // For now, limit the hack to when the Direct3D 11.1 is getting used:
+        //const bool usingD3D11Renderer = \
+        //    (rendererForMainWindow != NULL) &&
+        //    (SDL_strcmp(rendererForMainWindow->info.name, "direct3d 11.1") == 0);
+        //SDL_bool wasD3D11RendererResized = SDL_FALSE;
+        //if (usingD3D11Renderer) {
+        //    wasD3D11RendererResized = rendererForMainWindow->resized;
+        //}
+
+        // Send the window-resize event to the rest of SDL, and to apps:
+        const int windowWidth = (int) ceil(args->Size.Width);
+        const int windowHeight = (int) ceil(args->Size.Height);
+        SDL_SendWindowEvent(
+            m_sdlWindowData->sdlWindow,
+            SDL_WINDOWEVENT_RESIZED,
+            windowWidth,
+            windowHeight);
+
+        //// Viewport hack, part two:
+        //if (usingD3D11Renderer) {
+        //    rendererForMainWindow->resized = wasD3D11RendererResized;
+        //}
+    }
+}
+
+void SDL_WinRTApp::OnVisibilityChanged(CoreWindow^ sender, VisibilityChangedEventArgs^ args)
+{
+#if LOG_WINDOW_EVENTS==1
+    SDL_Log("%s, visible?=%s, m_sdlWindowData?=%s\n",
+        __FUNCTION__,
+        (args->Visible ? "yes" : "no"),
+        (m_sdlWindowData ? "yes" : "no"));
+#endif
+
+    m_windowVisible = args->Visible;
+    if (m_sdlWindowData) {
+        SDL_bool wasSDLWindowSurfaceValid = m_sdlWindowData->sdlWindow->surface_valid;
+
+        if (args->Visible) {
+            SDL_SendWindowEvent(m_sdlWindowData->sdlWindow, SDL_WINDOWEVENT_SHOWN, 0, 0);
+        } else {
+            SDL_SendWindowEvent(m_sdlWindowData->sdlWindow, SDL_WINDOWEVENT_HIDDEN, 0, 0);
+        }
+
+        // HACK: Prevent SDL's window-hide handling code, which currently
+        // triggers a fake window resize (possibly erronously), from
+        // marking the SDL window's surface as invalid.
+        //
+        // A better solution to this probably involves figuring out if the
+        // fake window resize can be prevented.
+        m_sdlWindowData->sdlWindow->surface_valid = wasSDLWindowSurfaceValid;
+    }
+}
+
+void SDL_WinRTApp::OnWindowClosed(CoreWindow^ sender, CoreWindowEventArgs^ args)
+{
+#if LOG_WINDOW_EVENTS==1
+    SDL_Log("%s\n", __FUNCTION__);
+#endif
+    m_windowClosed = true;
+}
+
+static Uint8
+WINRT_GetSDLButtonForPointerPoint(PointerPoint ^ pt)
+{
+    switch (pt->Properties->PointerUpdateKind)
+    {
+        case PointerUpdateKind::LeftButtonPressed:
+        case PointerUpdateKind::LeftButtonReleased:
+            return SDL_BUTTON_LEFT;
+
+        case PointerUpdateKind::RightButtonPressed:
+        case PointerUpdateKind::RightButtonReleased:
+            return SDL_BUTTON_RIGHT;
+
+        case PointerUpdateKind::MiddleButtonPressed:
+        case PointerUpdateKind::MiddleButtonReleased:
+            return SDL_BUTTON_MIDDLE;
+
+        case PointerUpdateKind::XButton1Pressed:
+        case PointerUpdateKind::XButton1Released:
+            return SDL_BUTTON_X1;
+
+        case PointerUpdateKind::XButton2Pressed:
+        case PointerUpdateKind::XButton2Released:
+            return SDL_BUTTON_X2;
+
+        default:
+            break;
+    }
+
+    return 0;
+}
+
+static const char *
+WINRT_ConvertPointerUpdateKindToString(PointerUpdateKind kind)
+{
+    switch (kind)
+    {
+        case PointerUpdateKind::Other:
+            return "Other";
+        case PointerUpdateKind::LeftButtonPressed:
+            return "LeftButtonPressed";
+        case PointerUpdateKind::LeftButtonReleased:
+            return "LeftButtonReleased";
+        case PointerUpdateKind::RightButtonPressed:
+            return "RightButtonPressed";
+        case PointerUpdateKind::RightButtonReleased:
+            return "RightButtonReleased";
+        case PointerUpdateKind::MiddleButtonPressed:
+            return "MiddleButtonPressed";
+        case PointerUpdateKind::MiddleButtonReleased:
+            return "MiddleButtonReleased";
+        case PointerUpdateKind::XButton1Pressed:
+            return "XButton1Pressed";
+        case PointerUpdateKind::XButton1Released:
+            return "XButton1Released";
+        case PointerUpdateKind::XButton2Pressed:
+            return "XButton2Pressed";
+        case PointerUpdateKind::XButton2Released:
+            return "XButton2Released";
+    }
+
+    return "";
+}
+
+static void
+WINRT_LogPointerEvent(const string & header, PointerEventArgs ^ args, Point transformedPoint)
+{
+    PointerPoint ^ pt = args->CurrentPoint;
+    SDL_Log("%s: Position={%f,%f}, Transformed Pos={%f, %f}, MouseWheelDelta=%d, FrameId=%d, PointerId=%d, PointerUpdateKind=%s\n",
+        header.c_str(),
+        pt->Position.X, pt->Position.Y,
+        transformedPoint.X, transformedPoint.Y,
+        pt->Properties->MouseWheelDelta,
+        pt->FrameId,
+        pt->PointerId,
+        WINRT_ConvertPointerUpdateKindToString(args->CurrentPoint->Properties->PointerUpdateKind));
+}
+
+void SDL_WinRTApp::OnPointerPressed(CoreWindow^ sender, PointerEventArgs^ args)
+{
+#if LOG_POINTER_EVENTS
+    WINRT_LogPointerEvent("mouse down", args, TransformCursor(args->CurrentPoint->Position));
+#endif
+
+    if (m_sdlWindowData) {
+        Uint8 button = WINRT_GetSDLButtonForPointerPoint(args->CurrentPoint);
+        if (button) {
+            SDL_SendMouseButton(m_sdlWindowData->sdlWindow, 0, SDL_PRESSED, button);
+        }
+    }
+}
+
+void SDL_WinRTApp::OnPointerReleased(CoreWindow^ sender, PointerEventArgs^ args)
+{
+#if LOG_POINTER_EVENTS
+    WINRT_LogPointerEvent("mouse up", args, TransformCursor(args->CurrentPoint->Position));
+#endif
+
+    if (m_sdlWindowData) {
+        Uint8 button = WINRT_GetSDLButtonForPointerPoint(args->CurrentPoint);
+        if (button) {
+            SDL_SendMouseButton(m_sdlWindowData->sdlWindow, 0, SDL_RELEASED, button);
+        }
+    }
+}
+
+void SDL_WinRTApp::OnPointerWheelChanged(CoreWindow^ sender, PointerEventArgs^ args)
+{
+#if LOG_POINTER_EVENTS
+    WINRT_LogPointerEvent("wheel changed", args, TransformCursor(args->CurrentPoint->Position));
+#endif
+
+    if (m_sdlWindowData) {
+        // FIXME: This may need to accumulate deltas up to WHEEL_DELTA
+        short motion = args->CurrentPoint->Properties->MouseWheelDelta / WHEEL_DELTA;
+        SDL_SendMouseWheel(m_sdlWindowData->sdlWindow, 0, 0, motion);
+    }
+}
+
+static inline int _lround(float arg) {
+    if (arg >= 0.0f) {
+        return (int)floor(arg + 0.5f);
+    } else {
+        return (int)ceil(arg - 0.5f);
+    }
+}
+
+void SDL_WinRTApp::OnMouseMoved(MouseDevice^ mouseDevice, MouseEventArgs^ args)
+{
+    if (m_sdlWindowData && m_useRelativeMouseMode) {
+        // DLudwig, 2012-12-28: On some systems, namely Visual Studio's Windows
+        // Simulator, as well as Windows 8 in a Parallels 8 VM, MouseEventArgs'
+        // MouseDelta field often reports very large values.  More information
+        // on this can be found at the following pages on MSDN:
+        //  - http://social.msdn.microsoft.com/Forums/en-US/winappswithnativecode/thread/a3c789fa-f1c5-49c4-9c0a-7db88d0f90f8
+        //  - https://connect.microsoft.com/VisualStudio/Feedback/details/756515
+        //
+        // The values do not appear to be as large when running on some systems,
+        // most notably a Surface RT.  Furthermore, the values returned by
+        // CoreWindow's PointerMoved event, and sent to this class' OnPointerMoved
+        // method, do not ever appear to be large, even when MouseEventArgs'
+        // MouseDelta is reporting to the contrary.
+        //
+        // On systems with the large-values behavior, it appears that the values
+        // get reported as if the screen's size is 65536 units in both the X and Y
+        // dimensions.  This can be viewed by using Windows' now-private, "Raw Input"
+        // APIs.  (GetRawInputData, RegisterRawInputDevices, WM_INPUT, etc.)
+        //
+        // MSDN's documentation on MouseEventArgs' MouseDelta field (at
+        // http://msdn.microsoft.com/en-us/library/windows/apps/windows.devices.input.mouseeventargs.mousedelta ),
+        // does not seem to indicate (to me) that its values should be so large.  It
+        // says that its values should be a "change in screen location".  I could
+        // be misinterpreting this, however a post on MSDN from a Microsoft engineer (see: 
+        // http://social.msdn.microsoft.com/Forums/en-US/winappswithnativecode/thread/09a9868e-95bb-4858-ba1a-cb4d2c298d62 ),
+        // indicates that these values are in DIPs, which is the same unit used
+        // by CoreWindow's PointerMoved events (via the Position field in its CurrentPoint
+        // property.  See http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.input.pointerpoint.position.aspx
+        // for details.)
+        //
+        // To note, PointerMoved events are sent a 'RawPosition' value (via the
+        // CurrentPoint property in MouseEventArgs), however these do not seem
+        // to exhibit the same large-value behavior.
+        //
+        // The values passed via PointerMoved events can't always be used for relative
+        // mouse motion, unfortunately.  Its values are bound to the cursor's position,
+        // which stops when it hits one of the screen's edges.  This can be a problem in
+        // first person shooters, whereby it is normal for mouse motion to travel far
+        // along any one axis for a period of time.  MouseMoved events do not have the
+        // screen-bounding limitation, and can be used regardless of where the system's
+        // cursor is.
+        //
+        // One possible workaround would be to programmatically set the cursor's
+        // position to the screen's center (when SDL's relative mouse mode is enabled),
+        // however Windows RT does not yet seem to have the ability to set the cursor's
+        // position via a public API.  Win32 did this via an API call, SetCursorPos,
+        // however WinRT makes this function be private.  Apps that use it won't get
+        // approved for distribution in the Windows Store.  I've yet to be able to find
+        // a suitable, store-friendly counterpart for WinRT.
+        //
+        // There may be some room for a workaround whereby OnPointerMoved's values
+        // are compared to the values from OnMouseMoved in order to detect
+        // when this bug is active.  A suitable transformation could then be made to
+        // OnMouseMoved's values.  For now, however, the system-reported values are sent
+        // to SDL with minimal transformation: from native screen coordinates (in DIPs)
+        // to SDL window coordinates.
+        //
+        const Point mouseDeltaInDIPs((float)args->MouseDelta.X, (float)args->MouseDelta.Y);
+        const Point mouseDeltaInSDLWindowCoords = TransformCursor(mouseDeltaInDIPs);
+        SDL_SendMouseMotion(
+            m_sdlWindowData->sdlWindow,
+            0,
+            1,
+            _lround(mouseDeltaInSDLWindowCoords.X),
+            _lround(mouseDeltaInSDLWindowCoords.Y));
+    }
+}
+
+// Applies necessary geometric transformations to raw cursor positions:
+Point SDL_WinRTApp::TransformCursor(Point rawPosition)
+{
+    if ( ! m_sdlWindowData || ! m_sdlWindowData->sdlWindow ) {
+        return rawPosition;
+    }
+    CoreWindow ^ nativeWindow = CoreWindow::GetForCurrentThread();
+    Point outputPosition;
+    outputPosition.X = rawPosition.X * (((float32)m_sdlWindowData->sdlWindow->w) / nativeWindow->Bounds.Width);
+    outputPosition.Y = rawPosition.Y * (((float32)m_sdlWindowData->sdlWindow->h) / nativeWindow->Bounds.Height);
+    return outputPosition;
+}
+
+void SDL_WinRTApp::OnPointerMoved(CoreWindow^ sender, PointerEventArgs^ args)
+{
+#if LOG_POINTER_EVENTS
+    WINRT_LogPointerEvent("pointer moved", args, TransformCursor(args->CurrentPoint->Position));
+#endif
+
+    if (m_sdlWindowData && ! m_useRelativeMouseMode)
+    {
+        Point transformedPoint = TransformCursor(args->CurrentPoint->Position);
+        SDL_SendMouseMotion(m_sdlWindowData->sdlWindow, 0, 0, (int)transformedPoint.X, (int)transformedPoint.Y);
+    }
+}
+
+static SDL_Scancode WinRT_Official_Keycodes[] = {
+    SDL_SCANCODE_UNKNOWN, // VirtualKey.None -- 0
+    SDL_SCANCODE_UNKNOWN, // VirtualKey.LeftButton -- 1
+    SDL_SCANCODE_UNKNOWN, // VirtualKey.RightButton -- 2
+    SDL_SCANCODE_CANCEL, // VirtualKey.Cancel -- 3
+    SDL_SCANCODE_UNKNOWN, // VirtualKey.MiddleButton -- 4
+    SDL_SCANCODE_UNKNOWN, // VirtualKey.XButton1 -- 5
+    SDL_SCANCODE_UNKNOWN, // VirtualKey.XButton2 -- 6
+    SDL_SCANCODE_UNKNOWN, // -- 7
+    SDL_SCANCODE_BACKSPACE, // VirtualKey.Back -- 8
+    SDL_SCANCODE_TAB, // VirtualKey.Tab -- 9
+    SDL_SCANCODE_UNKNOWN, // -- 10
+    SDL_SCANCODE_UNKNOWN, // -- 11
+    SDL_SCANCODE_CLEAR, // VirtualKey.Clear -- 12
+    SDL_SCANCODE_RETURN, // VirtualKey.Enter -- 13
+    SDL_SCANCODE_UNKNOWN, // -- 14
+    SDL_SCANCODE_UNKNOWN, // -- 15
+    SDL_SCANCODE_LSHIFT, // VirtualKey.Shift -- 16
+    SDL_SCANCODE_LCTRL, // VirtualKey.Control -- 17
+    SDL_SCANCODE_MENU, // VirtualKey.Menu -- 18
+    SDL_SCANCODE_PAUSE, // VirtualKey.Pause -- 19
+    SDL_SCANCODE_CAPSLOCK, // VirtualKey.CapitalLock -- 20
+    SDL_SCANCODE_UNKNOWN, // VirtualKey.Kana or VirtualKey.Hangul -- 21
+    SDL_SCANCODE_UNKNOWN, // -- 22
+    SDL_SCANCODE_UNKNOWN, // VirtualKey.Junja -- 23
+    SDL_SCANCODE_UNKNOWN, // VirtualKey.Final -- 24
+    SDL_SCANCODE_UNKNOWN, // VirtualKey.Hanja or VirtualKey.Kanji -- 25
+    SDL_SCANCODE_UNKNOWN, // -- 26
+    SDL_SCANCODE_ESCAPE, // VirtualKey.Escape -- 27
+    SDL_SCANCODE_UNKNOWN, // VirtualKey.Convert -- 28
+    SDL_SCANCODE_UNKNOWN, // VirtualKey.NonConvert -- 29
+    SDL_SCANCODE_UNKNOWN, // VirtualKey.Accept -- 30
+    SDL_SCANCODE_UNKNOWN, // VirtualKey.ModeChange -- 31  (maybe SDL_SCANCODE_MODE ?)
+    SDL_SCANCODE_SPACE, // VirtualKey.Space -- 32
+    SDL_SCANCODE_PAGEUP, // VirtualKey.PageUp -- 33
+    SDL_SCANCODE_PAGEDOWN, // VirtualKey.PageDown -- 34
+    SDL_SCANCODE_END, // VirtualKey.End -- 35
+    SDL_SCANCODE_HOME, // VirtualKey.Home -- 36
+    SDL_SCANCODE_LEFT, // VirtualKey.Left -- 37
+    SDL_SCANCODE_UP, // VirtualKey.Up -- 38
+    SDL_SCANCODE_RIGHT, // VirtualKey.Right -- 39
+    SDL_SCANCODE_DOWN, // VirtualKey.Down -- 40
+    SDL_SCANCODE_SELECT, // VirtualKey.Select -- 41
+    SDL_SCANCODE_UNKNOWN, // VirtualKey.Print -- 42  (maybe SDL_SCANCODE_PRINTSCREEN ?)
+    SDL_SCANCODE_EXECUTE, // VirtualKey.Execute -- 43
+    SDL_SCANCODE_UNKNOWN, // VirtualKey.Snapshot -- 44
+    SDL_SCANCODE_INSERT, // VirtualKey.Insert -- 45
+    SDL_SCANCODE_DELETE, // VirtualKey.Delete -- 46
+    SDL_SCANCODE_HELP, // VirtualKey.Help -- 47
+    SDL_SCANCODE_0, // VirtualKey.Number0 -- 48
+    SDL_SCANCODE_1, // VirtualKey.Number1 -- 49
+    SDL_SCANCODE_2, // VirtualKey.Number2 -- 50
+    SDL_SCANCODE_3, // VirtualKey.Number3 -- 51
+    SDL_SCANCODE_4, // VirtualKey.Number4 -- 52
+    SDL_SCANCODE_5, // VirtualKey.Number5 -- 53
+    SDL_SCANCODE_6, // VirtualKey.Number6 -- 54
+    SDL_SCANCODE_7, // VirtualKey.Number7 -- 55
+    SDL_SCANCODE_8, // VirtualKey.Number8 -- 56
+    SDL_SCANCODE_9, // VirtualKey.Number9 -- 57
+    SDL_SCANCODE_UNKNOWN, // -- 58
+    SDL_SCANCODE_UNKNOWN, // -- 59
+    SDL_SCANCODE_UNKNOWN, // -- 60
+    SDL_SCANCODE_UNKNOWN, // -- 61
+    SDL_SCANCODE_UNKNOWN, // -- 62
+    SDL_SCANCODE_UNKNOWN, // -- 63
+    SDL_SCANCODE_UNKNOWN, // -- 64
+    SDL_SCANCODE_A, // VirtualKey.A -- 65
+    SDL_SCANCODE_B, // VirtualKey.B -- 66
+    SDL_SCANCODE_C, // VirtualKey.C -- 67
+    SDL_SCANCODE_D, // VirtualKey.D -- 68
+    SDL_SCANCODE_E, // VirtualKey.E -- 69
+    SDL_SCANCODE_F, // VirtualKey.F -- 70
+    SDL_SCANCODE_G, // VirtualKey.G -- 71
+    SDL_SCANCODE_H, // VirtualKey.H -- 72
+    SDL_SCANCODE_I, // VirtualKey.I -- 73
+    SDL_SCANCODE_J, // VirtualKey.J -- 74
+    SDL_SCANCODE_K, // VirtualKey.K -- 75
+    SDL_SCANCODE_L, // VirtualKey.L -- 76
+    SDL_SCANCODE_M, // VirtualKey.M -- 77
+    SDL_SCANCODE_N, // VirtualKey.N -- 78
+    SDL_SCANCODE_O, // VirtualKey.O -- 79
+    SDL_SCANCODE_P, // VirtualKey.P -- 80
+    SDL_SCANCODE_Q, // VirtualKey.Q -- 81
+    SDL_SCANCODE_R, // VirtualKey.R -- 82
+    SDL_SCANCODE_S, // VirtualKey.S -- 83
+    SDL_SCANCODE_T, // VirtualKey.T -- 84
+    SDL_SCANCODE_U, // VirtualKey.U -- 85
+    SDL_SCANCODE_V, // VirtualKey.V -- 86
+    SDL_SCANCODE_W, // VirtualKey.W -- 87
+    SDL_SCANCODE_X, // VirtualKey.X -- 88
+    SDL_SCANCODE_Y, // VirtualKey.Y -- 89
+    SDL_SCANCODE_Z, // VirtualKey.Z -- 90
+    SDL_SCANCODE_UNKNOWN, // VirtualKey.LeftWindows -- 91  (maybe SDL_SCANCODE_APPLICATION or SDL_SCANCODE_LGUI ?)
+    SDL_SCANCODE_UNKNOWN, // VirtualKey.RightWindows -- 92  (maybe SDL_SCANCODE_APPLICATION or SDL_SCANCODE_RGUI ?)
+    SDL_SCANCODE_APPLICATION, // VirtualKey.Application -- 93
+    SDL_SCANCODE_UNKNOWN, // -- 94
+    SDL_SCANCODE_SLEEP, // VirtualKey.Sleep -- 95
+    SDL_SCANCODE_KP_0, // VirtualKey.NumberPad0 -- 96
+    SDL_SCANCODE_KP_1, // VirtualKey.NumberPad1 -- 97
+    SDL_SCANCODE_KP_2, // VirtualKey.NumberPad2 -- 98
+    SDL_SCANCODE_KP_3, // VirtualKey.NumberPad3 -- 99
+    SDL_SCANCODE_KP_4, // VirtualKey.NumberPad4 -- 100
+    SDL_SCANCODE_KP_5, // VirtualKey.NumberPad5 -- 101
+    SDL_SCANCODE_KP_6, // VirtualKey.NumberPad6 -- 102
+    SDL_SCANCODE_KP_7, // VirtualKey.NumberPad7 -- 103
+    SDL_SCANCODE_KP_8, // VirtualKey.NumberPad8 -- 104
+    SDL_SCANCODE_KP_9, // VirtualKey.NumberPad9 -- 105
+    SDL_SCANCODE_KP_MULTIPLY, // VirtualKey.Multiply -- 106
+    SDL_SCANCODE_KP_PLUS, // VirtualKey.Add -- 107
+    SDL_SCANCODE_UNKNOWN, // VirtualKey.Separator -- 108
+    SDL_SCANCODE_KP_MINUS, // VirtualKey.Subtract -- 109
+    SDL_SCANCODE_UNKNOWN, // VirtualKey.Decimal -- 110  (maybe SDL_SCANCODE_DECIMALSEPARATOR, SDL_SCANCODE_KP_DECIMAL, or SDL_SCANCODE_KP_PERIOD ?)
+    SDL_SCANCODE_KP_DIVIDE, // VirtualKey.Divide -- 111
+    SDL_SCANCODE_F1, // VirtualKey.F1 -- 112
+    SDL_SCANCODE_F2, // VirtualKey.F2 -- 113
+    SDL_SCANCODE_F3, // VirtualKey.F3 -- 114
+    SDL_SCANCODE_F4, // VirtualKey.F4 -- 115
+    SDL_SCANCODE_F5, // VirtualKey.F5 -- 116
+    SDL_SCANCODE_F6, // VirtualKey.F6 -- 117
+    SDL_SCANCODE_F7, // VirtualKey.F7 -- 118
+    SDL_SCANCODE_F8, // VirtualKey.F8 -- 119
+    SDL_SCANCODE_F9, // VirtualKey.F9 -- 120
+    SDL_SCANCODE_F10, // VirtualKey.F10 -- 121
+    SDL_SCANCODE_F11, // VirtualKey.F11 -- 122
+    SDL_SCANCODE_F12, // VirtualKey.F12 -- 123
+    SDL_SCANCODE_F13, // VirtualKey.F13 -- 124
+    SDL_SCANCODE_F14, // VirtualKey.F14 -- 125
+    SDL_SCANCODE_F15, // VirtualKey.F15 -- 126
+    SDL_SCANCODE_F16, // VirtualKey.F16 -- 127
+    SDL_SCANCODE_F17, // VirtualKey.F17 -- 128
+    SDL_SCANCODE_F18, // VirtualKey.F18 -- 129
+    SDL_SCANCODE_F19, // VirtualKey.F19 -- 130
+    SDL_SCANCODE_F20, // VirtualKey.F20 -- 131
+    SDL_SCANCODE_F21, // VirtualKey.F21 -- 132
+    SDL_SCANCODE_F22, // VirtualKey.F22 -- 133
+    SDL_SCANCODE_F23, // VirtualKey.F23 -- 134
+    SDL_SCANCODE_F24, // VirtualKey.F24 -- 135
+    SDL_SCANCODE_UNKNOWN, // -- 136
+    SDL_SCANCODE_UNKNOWN, // -- 137
+    SDL_SCANCODE_UNKNOWN, // -- 138
+    SDL_SCANCODE_UNKNOWN, // -- 139
+    SDL_SCANCODE_UNKNOWN, // -- 140
+    SDL_SCANCODE_UNKNOWN, // -- 141
+    SDL_SCANCODE_UNKNOWN, // -- 142
+    SDL_SCANCODE_UNKNOWN, // -- 143
+    SDL_SCANCODE_NUMLOCKCLEAR, // VirtualKey.NumberKeyLock -- 144
+    SDL_SCANCODE_SCROLLLOCK, // VirtualKey.Scroll -- 145
+    SDL_SCANCODE_UNKNOWN, // -- 146
+    SDL_SCANCODE_UNKNOWN, // -- 147
+    SDL_SCANCODE_UNKNOWN, // -- 148
+    SDL_SCANCODE_UNKNOWN, // -- 149
+    SDL_SCANCODE_UNKNOWN, // -- 150
+    SDL_SCANCODE_UNKNOWN, // -- 151
+    SDL_SCANCODE_UNKNOWN, // -- 152
+    SDL_SCANCODE_UNKNOWN, // -- 153
+    SDL_SCANCODE_UNKNOWN, // -- 154
+    SDL_SCANCODE_UNKNOWN, // -- 155
+    SDL_SCANCODE_UNKNOWN, // -- 156
+    SDL_SCANCODE_UNKNOWN, // -- 157
+    SDL_SCANCODE_UNKNOWN, // -- 158
+    SDL_SCANCODE_UNKNOWN, // -- 159
+    SDL_SCANCODE_LSHIFT, // VirtualKey.LeftShift -- 160
+    SDL_SCANCODE_RSHIFT, // VirtualKey.RightShift -- 161
+    SDL_SCANCODE_LCTRL, // VirtualKey.LeftControl -- 162
+    SDL_SCANCODE_RCTRL, // VirtualKey.RightControl -- 163
+    SDL_SCANCODE_MENU, // VirtualKey.LeftMenu -- 164
+    SDL_SCANCODE_MENU, // VirtualKey.RightMenu -- 165
+};
+
+static std::unordered_map<int, SDL_Scancode> WinRT_Unofficial_Keycodes;
+
+static SDL_Scancode
+TranslateKeycode(int keycode)
+{
+    if (WinRT_Unofficial_Keycodes.empty()) {
+        /* Set up a table of undocumented (by Microsoft), WinRT-specific,
+           key codes: */
+        // TODO, WinRT: move content declarations of WinRT_Unofficial_Keycodes into a C++11 initializer list, when possible
+        WinRT_Unofficial_Keycodes[220] = SDL_SCANCODE_GRAVE;
+        WinRT_Unofficial_Keycodes[222] = SDL_SCANCODE_BACKSLASH;
+    }
+
+    /* Try to get a documented, WinRT, 'VirtualKey' first (as documented at
+       http://msdn.microsoft.com/en-us/library/windows/apps/windows.system.virtualkey.aspx ).
+       If that fails, fall back to a Win32 virtual key.
+    */
+    // TODO, WinRT: try filling out the WinRT keycode table as much as possible, using the Win32 table for interpretation hints
+    //SDL_Log("WinRT TranslateKeycode, keycode=%d\n", (int)keycode);
+    SDL_Scancode scancode = SDL_SCANCODE_UNKNOWN;
+    if (keycode < SDL_arraysize(WinRT_Official_Keycodes)) {
+        scancode = WinRT_Official_Keycodes[keycode];
+    }
+    if (scancode == SDL_SCANCODE_UNKNOWN) {
+        if (WinRT_Unofficial_Keycodes.find(keycode) != WinRT_Unofficial_Keycodes.end()) {
+            scancode = WinRT_Unofficial_Keycodes[keycode];
+        }
+    }
+    if (scancode == SDL_SCANCODE_UNKNOWN) {
+        if (keycode < SDL_arraysize(windows_scancode_table)) {
+            scancode = windows_scancode_table[keycode];
+        }
+    }
+    if (scancode == SDL_SCANCODE_UNKNOWN) {
+        SDL_Log("WinRT TranslateKeycode, unknown keycode=%d\n", (int)keycode);
+    }
+    return scancode;
+}
+
+void SDL_WinRTApp::OnKeyDown(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::KeyEventArgs^ args)
+{
+    SDL_Scancode sdlScancode = TranslateKeycode((int)args->VirtualKey);
+#if 0
+    SDL_Keycode keycode = SDL_GetKeyFromScancode(sdlScancode);
+    SDL_Log("key down, handled=%s, ext?=%s, released?=%s, menu key down?=%s, repeat count=%d, native scan code=%d, was down?=%s, vkey=%d, sdl scan code=%d (%s), sdl key code=%d (%s)\n",
+        (args->Handled ? "1" : "0"),
+        (args->KeyStatus.IsExtendedKey ? "1" : "0"),
+        (args->KeyStatus.IsKeyReleased ? "1" : "0"),
+        (args->KeyStatus.IsMenuKeyDown ? "1" : "0"),
+        args->KeyStatus.RepeatCount,
+        args->KeyStatus.ScanCode,
+        (args->KeyStatus.WasKeyDown ? "1" : "0"),
+        args->VirtualKey,
+        sdlScancode,
+        SDL_GetScancodeName(sdlScancode),
+        keycode,
+        SDL_GetKeyName(keycode));
+    //args->Handled = true;
+    //VirtualKey vkey = args->VirtualKey;
+#endif
+    SDL_SendKeyboardKey(SDL_PRESSED, sdlScancode);
+}
+
+void SDL_WinRTApp::OnKeyUp(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::KeyEventArgs^ args)
+{
+    SDL_Scancode sdlScancode = TranslateKeycode((int)args->VirtualKey);
+#if 0
+    SDL_Keycode keycode = SDL_GetKeyFromScancode(sdlScancode);
+    SDL_Log("key up, handled=%s, ext?=%s, released?=%s, menu key down?=%s, repeat count=%d, native scan code=%d, was down?=%s, vkey=%d, sdl scan code=%d (%s), sdl key code=%d (%s)\n",
+        (args->Handled ? "1" : "0"),
+        (args->KeyStatus.IsExtendedKey ? "1" : "0"),
+        (args->KeyStatus.IsKeyReleased ? "1" : "0"),
+        (args->KeyStatus.IsMenuKeyDown ? "1" : "0"),
+        args->KeyStatus.RepeatCount,
+        args->KeyStatus.ScanCode,
+        (args->KeyStatus.WasKeyDown ? "1" : "0"),
+        args->VirtualKey,
+        sdlScancode,
+        SDL_GetScancodeName(sdlScancode),
+        keycode,
+        SDL_GetKeyName(keycode));
+    //args->Handled = true;
+#endif
+    SDL_SendKeyboardKey(SDL_RELEASED, sdlScancode);
+}
+
+void SDL_WinRTApp::OnActivated(CoreApplicationView^ applicationView, IActivatedEventArgs^ args)
+{
+    CoreWindow::GetForCurrentThread()->Activate();
+}
+
+static int SDLCALL RemoveAppSuspendAndResumeEvents(void * userdata, SDL_Event * event)
+{
+    if (event->type == SDL_WINDOWEVENT)
+    {
+        switch (event->window.event)
+        {
+            case SDL_WINDOWEVENT_MINIMIZED:
+            case SDL_WINDOWEVENT_RESTORED:
+                // Return 0 to indicate that the event should be removed from the
+                // event queue:
+                return 0;
+            default:
+                break;
+        }
+    }
+
+    // Return 1 to indicate that the event should stay in the event queue:
+    return 1;
+}
+
+void SDL_WinRTApp::OnSuspending(Platform::Object^ sender, SuspendingEventArgs^ args)
+{
+    // Save app state asynchronously after requesting a deferral. Holding a deferral
+    // indicates that the application is busy performing suspending operations. Be
+    // aware that a deferral may not be held indefinitely. After about five seconds,
+    // the app will be forced to exit.
+    SuspendingDeferral^ deferral = args->SuspendingOperation->GetDeferral();
+    create_task([this, deferral]()
+    {
+        // Send a window-minimized event immediately to observers.
+        // CoreDispatcher::ProcessEvents, which is the backbone on which
+        // SDL_WinRTApp::PumpEvents is built, will not return to its caller
+        // once it sends out a suspend event.  Any events posted to SDL's
+        // event queue won't get received until the WinRT app is resumed.
+        // SDL_AddEventWatch() may be used to receive app-suspend events on
+        // WinRT.
+        //
+        // In order to prevent app-suspend events from being received twice:
+        // 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_sdlWindowData)
+        {
+            SDL_SendWindowEvent(m_sdlWindowData->sdlWindow, 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();
+    });
+}
+
+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_sdlWindowData)
+    {
+        SDL_SendWindowEvent(m_sdlWindowData->sdlWindow, 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.
+        //
+        // TODO, WinRT: consider posting this event to the queue even though
+        // its counterpart, the app-suspend event, effectively has to be
+        // processed immediately.
+        SDL_FilterEvents(RemoveAppSuspendAndResumeEvents, 0);
+    }
+}
+
+SDL_DisplayMode SDL_WinRTApp::GetMainDisplayMode()
+{
+    // Create an empty, zeroed-out display mode:
+    SDL_DisplayMode mode;
+    SDL_zero(mode);
+
+    // Fill in most fields:
+    mode.format = SDL_PIXELFORMAT_RGB888;
+    mode.refresh_rate = 0;  // TODO, WinRT: see if refresh rate data is available, or relevant (for WinRT apps)
+    mode.driverdata = NULL;
+
+    // Calculate the display size given the window size, taking into account
+    // the current display's DPI:
+    const float currentDPI = Windows::Graphics::Display::DisplayProperties::LogicalDpi; 
+    const float dipsPerInch = 96.0f;
+    mode.w = (int) ((CoreWindow::GetForCurrentThread()->Bounds.Width * currentDPI) / dipsPerInch);
+    mode.h = (int) ((CoreWindow::GetForCurrentThread()->Bounds.Height * currentDPI) / dipsPerInch);
+
+    return mode;
+}
+
+const SDL_WindowData * SDL_WinRTApp::GetSDLWindowData() const
+{
+    return m_sdlWindowData;
+}
+
+bool SDL_WinRTApp::HasSDLWindowData() const
+{
+    return (m_sdlWindowData != NULL);
+}
+
+void SDL_WinRTApp::SetRelativeMouseMode(bool enable)
+{
+    m_useRelativeMouseMode = enable;
+}
+
+void SDL_WinRTApp::SetSDLWindowData(const SDL_WindowData * windowData)
+{
+    m_sdlWindowData = windowData;
+}
+
+void SDL_WinRTApp::SetSDLVideoDevice(const SDL_VideoDevice * videoDevice)
+{
+    m_sdlVideoDevice = videoDevice;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/core/winrt/SDL_winrtapp.h	Tue Aug 20 21:22:32 2013 -0400
@@ -0,0 +1,52 @@
+#pragma once
+
+struct SDL_WindowData;
+
+ref class SDL_WinRTApp sealed : public Windows::ApplicationModel::Core::IFrameworkView
+{
+public:
+    SDL_WinRTApp();
+    
+    // IFrameworkView Methods.
+    virtual void Initialize(Windows::ApplicationModel::Core::CoreApplicationView^ applicationView);
+    virtual void SetWindow(Windows::UI::Core::CoreWindow^ window);
+    virtual void Load(Platform::String^ entryPoint);
+    virtual void Run();
+    virtual void Uninitialize();
+
+internal:
+    // SDL-specific methods
+    SDL_DisplayMode GetMainDisplayMode();
+    void PumpEvents();
+    const SDL_WindowData * GetSDLWindowData() const;
+    bool HasSDLWindowData() const;
+    void SetRelativeMouseMode(bool enable);
+    void SetSDLWindowData(const SDL_WindowData * windowData);
+    void SetSDLVideoDevice(const SDL_VideoDevice * videoDevice);
+    Windows::Foundation::Point TransformCursor(Windows::Foundation::Point rawPosition);
+
+protected:
+    // Event Handlers.
+    void OnOrientationChanged(Platform::Object^ sender);
+    void OnWindowSizeChanged(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::WindowSizeChangedEventArgs^ args);
+    void OnLogicalDpiChanged(Platform::Object^ sender);
+    void OnActivated(Windows::ApplicationModel::Core::CoreApplicationView^ applicationView, Windows::ApplicationModel::Activation::IActivatedEventArgs^ args);
+    void OnSuspending(Platform::Object^ sender, Windows::ApplicationModel::SuspendingEventArgs^ args);
+    void OnResuming(Platform::Object^ sender, Platform::Object^ args);
+    void OnWindowClosed(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::CoreWindowEventArgs^ args);
+    void OnVisibilityChanged(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::VisibilityChangedEventArgs^ args);
+    void OnPointerPressed(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args);
+    void OnPointerReleased(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args);
+    void OnPointerWheelChanged(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args);
+    void OnPointerMoved(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args);
+    void OnMouseMoved(Windows::Devices::Input::MouseDevice^ mouseDevice, Windows::Devices::Input::MouseEventArgs^ args);
+    void OnKeyDown(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::KeyEventArgs^ args);
+    void OnKeyUp(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::KeyEventArgs^ args);
+
+private:
+    bool m_windowClosed;
+    bool m_windowVisible;
+    const SDL_WindowData* m_sdlWindowData;
+    const SDL_VideoDevice* m_sdlVideoDevice;
+    bool m_useRelativeMouseMode;
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/core/winrt/SDL_winrtpaths.cpp	Tue Aug 20 21:22:32 2013 -0400
@@ -0,0 +1,94 @@
+/* TODO, WinRT: include copyright info in SDL_winrtpaths.cpp
+   TODO, WinRT: add note to SDL_winrtpaths.cpp mentioning that /ZW must be used when compiling the file
+*/
+
+#include "SDL_config.h"
+
+#ifdef __WINRT__
+
+extern "C" {
+#include "SDL_error.h"
+#include "SDL_stdinc.h"
+#include "SDL_system.h"
+#include "../windows/SDL_windows.h"
+}
+
+#include <string>
+#include <unordered_map>
+
+using namespace std;
+using namespace Windows::Storage;
+
+extern "C" const wchar_t *
+SDL_WinRTGetFSPathUNICODE(SDL_WinRT_Path pathType)
+{
+    switch (pathType) {
+        case SDL_WINRT_PATH_INSTALLED_LOCATION:
+        {
+            static wstring path;
+            if (path.empty()) {
+                path = Windows::ApplicationModel::Package::Current->InstalledLocation->Path->Data();
+            }
+            return path.c_str();
+        }
+
+        case SDL_WINRT_PATH_LOCAL_FOLDER:
+        {
+            static wstring path;
+            if (path.empty()) {
+                path = ApplicationData::Current->LocalFolder->Path->Data();
+            }
+            return path.c_str();
+        }
+
+#if WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP
+        case SDL_WINRT_PATH_ROAMING_FOLDER:
+        {
+            static wstring path;
+            if (path.empty()) {
+                path = ApplicationData::Current->RoamingFolder->Path->Data();
+            }
+            return path.c_str();
+        }
+
+        case SDL_WINRT_PATH_TEMP_FOLDER:
+        {
+            static wstring path;
+            if (path.empty()) {
+                path = ApplicationData::Current->TemporaryFolder->Path->Data();
+            }
+            return path.c_str();
+        }
+#endif
+
+        default:
+            break;
+    }
+
+    SDL_Unsupported();
+    return NULL;
+}
+
+extern "C" const char *
+SDL_WinRTGetFSPathUTF8(SDL_WinRT_Path pathType)
+{
+    typedef unordered_map<SDL_WinRT_Path, string> UTF8PathMap;
+    static UTF8PathMap utf8Paths;
+
+    UTF8PathMap::iterator searchResult = utf8Paths.find(pathType);
+    if (searchResult != utf8Paths.end()) {
+        return searchResult->second.c_str();
+    }
+
+    const wchar_t * ucs2Path = SDL_WinRTGetFSPathUNICODE(pathType);
+    if (!ucs2Path) {
+        return NULL;
+    }
+
+    char * utf8Path = WIN_StringToUTF8(ucs2Path);
+    utf8Paths[pathType] = utf8Path;
+    SDL_free(utf8Path);
+    return utf8Paths[pathType].c_str();
+}
+
+#endif /* __WINRT__ */
--- a/src/video/windowsrt/SDL_WinRTApp.cpp	Tue Aug 13 20:33:15 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,986 +0,0 @@
-
-#include <string>
-#include <unordered_map>
-#include <sstream>
-
-#include "ppltasks.h"
-
-extern "C" {
-#include "SDL_assert.h"
-#include "SDL_events.h"
-#include "SDL_hints.h"
-#include "SDL_log.h"
-#include "SDL_main.h"
-#include "SDL_stdinc.h"
-#include "SDL_render.h"
-#include "../SDL_sysvideo.h"
-//#include "../../SDL_hints_c.h"
-#include "../../events/scancodes_windows.h"
-#include "../../events/SDL_mouse_c.h"
-#include "../../events/SDL_keyboard_c.h"
-#include "../../events/SDL_windowevents_c.h"
-#include "../../render/SDL_sysrender.h"
-}
-
-#include "SDL_winrtvideo.h"
-#include "SDL_WinRTApp.h"
-
-using namespace concurrency;
-using namespace std;
-using namespace Windows::ApplicationModel;
-using namespace Windows::ApplicationModel::Core;
-using namespace Windows::ApplicationModel::Activation;
-using namespace Windows::Devices::Input;
-using namespace Windows::Graphics::Display;
-using namespace Windows::Foundation;
-using namespace Windows::System;
-using namespace Windows::UI::Core;
-using namespace Windows::UI::Input;
-
-// Compile-time debugging options:
-// To enable, uncomment; to disable, comment them out.
-//#define LOG_POINTER_EVENTS 1
-//#define LOG_WINDOW_EVENTS 1
-//#define LOG_ORIENTATION_EVENTS 1
-
-
-// HACK, DLudwig: The C-style main() will get loaded via the app's
-// WinRT-styled main(), which is part of SDLmain_for_WinRT.cpp.
-// This seems wrong on some level, but does seem to work.
-typedef int (*SDL_WinRT_MainFunction)(int, char **);
-static SDL_WinRT_MainFunction SDL_WinRT_main = nullptr;
-
-// HACK, DLudwig: record a reference to the global, Windows RT 'app'/view.
-// SDL/WinRT will use this throughout its code.
-//
-// TODO, WinRT: consider replacing SDL_WinRTGlobalApp with something
-// non-global, such as something created inside
-// SDL_InitSubSystem(SDL_INIT_VIDEO), or something inside
-// SDL_CreateWindow().
-SDL_WinRTApp ^ SDL_WinRTGlobalApp = nullptr;
-
-ref class SDLApplicationSource sealed : Windows::ApplicationModel::Core::IFrameworkViewSource
-{
-public:
-    virtual Windows::ApplicationModel::Core::IFrameworkView^ CreateView();
-};
-
-IFrameworkView^ SDLApplicationSource::CreateView()
-{
-    // TODO, WinRT: see if this function (CreateView) can ever get called
-    // more than once.  For now, just prevent it from ever assigning
-    // SDL_WinRTGlobalApp more than once.
-    SDL_assert(!SDL_WinRTGlobalApp);
-    SDL_WinRTApp ^ app = ref new SDL_WinRTApp();
-    if (!SDL_WinRTGlobalApp)
-    {
-        SDL_WinRTGlobalApp = app;
-    }
-    return app;
-}
-
-__declspec(dllexport) int SDL_WinRT_RunApplication(SDL_WinRT_MainFunction mainFunction)
-{
-    SDL_WinRT_main = mainFunction;
-    auto direct3DApplicationSource = ref new SDLApplicationSource();
-    CoreApplication::Run(direct3DApplicationSource);
-    return 0;
-}
-
-static void WINRT_SetDisplayOrientationsPreference(void *userdata, const char *name, const char *oldValue, const char *newValue)
-{
-    SDL_assert(SDL_strcmp(name, SDL_HINT_ORIENTATIONS) == 0);
-
-    // Start with no orientation flags, then add each in as they're parsed
-    // from newValue.
-    unsigned int orientationFlags = 0;
-    if (newValue) {
-        std::istringstream tokenizer(newValue);
-        while (!tokenizer.eof()) {
-            std::string orientationName;
-            std::getline(tokenizer, orientationName, ' ');
-            if (orientationName == "LandscapeLeft") {
-                orientationFlags |= (unsigned int) DisplayOrientations::LandscapeFlipped;
-            } else if (orientationName == "LandscapeRight") {
-                orientationFlags |= (unsigned int) DisplayOrientations::Landscape;
-            } else if (orientationName == "Portrait") {
-                orientationFlags |= (unsigned int) DisplayOrientations::Portrait;
-            } else if (orientationName == "PortraitUpsideDown") {
-                orientationFlags |= (unsigned int) DisplayOrientations::PortraitFlipped;
-            }
-        }
-    }
-
-    // If no valid orientation flags were specified, use a reasonable set of defaults:
-    if (!orientationFlags) {
-        // TODO, WinRT: consider seeing if an app's default orientation flags can be found out via some API call(s).
-        orientationFlags = (unsigned int) ( \
-            DisplayOrientations::Landscape |
-            DisplayOrientations::LandscapeFlipped |
-            DisplayOrientations::Portrait |
-            DisplayOrientations::PortraitFlipped);
-    }
-
-    // Set the orientation/rotation preferences.  Please note that this does
-    // not constitute a 100%-certain lock of a given set of possible
-    // orientations.  According to Microsoft's documentation on Windows RT [1]
-    // when a device is not capable of being rotated, Windows may ignore
-    // the orientation preferences, and stick to what the device is capable of
-    // displaying.
-    //
-    // [1] Documentation on the 'InitialRotationPreference' setting for a
-    // Windows app's manifest file describes how some orientation/rotation
-    // preferences may be ignored.  See
-    // http://msdn.microsoft.com/en-us/library/windows/apps/hh700343.aspx
-    // for details.  Microsoft's "Display orientation sample" also gives an
-    // outline of how Windows treats device rotation
-    // (http://code.msdn.microsoft.com/Display-Orientation-Sample-19a58e93).
-    DisplayProperties::AutoRotationPreferences = (DisplayOrientations) orientationFlags;
-}
-
-SDL_WinRTApp::SDL_WinRTApp() :
-    m_windowClosed(false),
-    m_windowVisible(true),
-    m_sdlWindowData(NULL),
-    m_sdlVideoDevice(NULL),
-    m_useRelativeMouseMode(false)
-{
-}
-
-void SDL_WinRTApp::Initialize(CoreApplicationView^ applicationView)
-{
-    applicationView->Activated +=
-        ref new TypedEventHandler<CoreApplicationView^, IActivatedEventArgs^>(this, &SDL_WinRTApp::OnActivated);
-
-    CoreApplication::Suspending +=
-        ref new EventHandler<SuspendingEventArgs^>(this, &SDL_WinRTApp::OnSuspending);
-
-    CoreApplication::Resuming +=
-        ref new EventHandler<Platform::Object^>(this, &SDL_WinRTApp::OnResuming);
-
-    DisplayProperties::OrientationChanged +=
-        ref new DisplayPropertiesEventHandler(this, &SDL_WinRTApp::OnOrientationChanged);
-
-    // Register the hint, SDL_HINT_ORIENTATIONS, with SDL.  This needs to be
-    // done before the hint's callback is registered (as of Feb 22, 2013),
-    // otherwise the hint callback won't get registered.
-    //
-    // WinRT, TODO: see if an app's default orientation can be found out via WinRT API(s), then set the initial value of SDL_HINT_ORIENTATIONS accordingly.
-    //SDL_SetHint(SDL_HINT_ORIENTATIONS, "LandscapeLeft LandscapeRight Portrait PortraitUpsideDown");   // DavidL: this is no longer needed (for SDL_AddHintCallback)
-    SDL_AddHintCallback(SDL_HINT_ORIENTATIONS, WINRT_SetDisplayOrientationsPreference, NULL);
-}
-
-void SDL_WinRTApp::OnOrientationChanged(Object^ sender)
-{
-#if LOG_ORIENTATION_EVENTS==1
-    CoreWindow^ window = CoreWindow::GetForCurrentThread();
-    if (window) {
-        SDL_Log("%s, current orientation=%d, native orientation=%d, auto rot. pref=%d, CoreWindow Size={%f,%f}\n",
-            __FUNCTION__,
-            (int)DisplayProperties::CurrentOrientation,
-            (int)DisplayProperties::NativeOrientation,
-            (int)DisplayProperties::AutoRotationPreferences,
-            window->Bounds.Width,
-            window->Bounds.Height);
-    } else {
-        SDL_Log("%s, current orientation=%d, native orientation=%d, auto rot. pref=%d\n",
-            __FUNCTION__,
-            (int)DisplayProperties::CurrentOrientation,
-            (int)DisplayProperties::NativeOrientation,
-            (int)DisplayProperties::AutoRotationPreferences);
-    }
-#endif
-}
-
-void SDL_WinRTApp::SetWindow(CoreWindow^ window)
-{
-#if LOG_WINDOW_EVENTS==1
-    SDL_Log("%s, current orientation=%d, native orientation=%d, auto rot. pref=%d, window Size={%f,%f}\n",
-        __FUNCTION__,
-        (int)DisplayProperties::CurrentOrientation,
-        (int)DisplayProperties::NativeOrientation,
-        (int)DisplayProperties::AutoRotationPreferences,
-        window->Bounds.Width,
-        window->Bounds.Height);
-#endif
-
-    window->SizeChanged += 
-        ref new TypedEventHandler<CoreWindow^, WindowSizeChangedEventArgs^>(this, &SDL_WinRTApp::OnWindowSizeChanged);
-
-    window->VisibilityChanged +=
-        ref new TypedEventHandler<CoreWindow^, VisibilityChangedEventArgs^>(this, &SDL_WinRTApp::OnVisibilityChanged);
-
-    window->Closed += 
-        ref new TypedEventHandler<CoreWindow^, CoreWindowEventArgs^>(this, &SDL_WinRTApp::OnWindowClosed);
-
-#if WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP
-    window->PointerCursor = ref new CoreCursor(CoreCursorType::Arrow, 0);
-#endif
-
-    window->PointerPressed +=
-        ref new TypedEventHandler<CoreWindow^, PointerEventArgs^>(this, &SDL_WinRTApp::OnPointerPressed);
-
-    window->PointerReleased +=
-        ref new TypedEventHandler<CoreWindow^, PointerEventArgs^>(this, &SDL_WinRTApp::OnPointerReleased);
-
-    window->PointerWheelChanged +=
-        ref new TypedEventHandler<CoreWindow^, PointerEventArgs^>(this, &SDL_WinRTApp::OnPointerWheelChanged);
-
-    window->PointerMoved +=
-        ref new TypedEventHandler<CoreWindow^, PointerEventArgs^>(this, &SDL_WinRTApp::OnPointerMoved);
-
-#if WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP
-    // Retrieves relative-only mouse movements:
-    Windows::Devices::Input::MouseDevice::GetForCurrentView()->MouseMoved +=
-        ref new TypedEventHandler<MouseDevice^, MouseEventArgs^>(this, &SDL_WinRTApp::OnMouseMoved);
-#endif
-
-    window->KeyDown +=
-        ref new TypedEventHandler<CoreWindow^, KeyEventArgs^>(this, &SDL_WinRTApp::OnKeyDown);
-
-    window->KeyUp +=
-        ref new TypedEventHandler<CoreWindow^, KeyEventArgs^>(this, &SDL_WinRTApp::OnKeyUp);
-}
-
-void SDL_WinRTApp::Load(Platform::String^ entryPoint)
-{
-}
-
-void SDL_WinRTApp::Run()
-{
-    SDL_SetMainReady();
-    if (SDL_WinRT_main)
-    {
-        // TODO, WinRT: pass the C-style main() a reasonably realistic
-        // representation of command line arguments.
-        int argc = 0;
-        char **argv = NULL;
-        SDL_WinRT_main(argc, argv);
-    }
-}
-
-void SDL_WinRTApp::PumpEvents()
-{
-    if (!m_windowClosed)
-    {
-        if (m_windowVisible)
-        {
-            CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessAllIfPresent);
-        }
-        else
-        {
-            CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessOneAndAllPending);
-        }
-    }
-}
-
-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_sdlWindowData?=%s\n",
-        __FUNCTION__,
-        args->Size.Width, args->Size.Height,
-        (int)DisplayProperties::CurrentOrientation,
-        (int)DisplayProperties::NativeOrientation,
-        (int)DisplayProperties::AutoRotationPreferences,
-        (m_sdlWindowData ? "yes" : "no"));
-#endif
-
-    if (m_sdlWindowData) {
-        // Make the new window size be the one true fullscreen mode.
-        // This change was done, in part, to allow the Direct3D 11.1 renderer
-        // to receive window-resize events as a device rotates.
-        // Before, rotating a device from landscape, to portrait, and then
-        // back to landscape would cause the Direct3D 11.1 swap buffer to
-        // not get resized appropriately.  SDL would, on the rotation from
-        // landscape to portrait, re-resize the SDL window to it's initial
-        // size (landscape).  On the subsequent rotation, SDL would drop the
-        // 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 = SDL_WinRTGlobalApp->GetMainDisplayMode();
-        SDL_AddDisplayMode(&m_sdlVideoDevice->displays[0], &m_sdlWindowData->sdlWindow->fullscreen_mode);
-
-        // HACK, Feb 19, 2013: SDL_WINDOWEVENT_RESIZED events, when sent,
-        // will attempt to fix the values of the main window's renderer's
-        // viewport.  While this can be good, it does appear to be buggy,
-        // and can cause a fullscreen viewport to become corrupted.  This
-        // behavior was noticed on a Surface RT while rotating the device
-        // from landscape to portrait.  Oddly enough, this did not occur
-        // in the Windows Simulator.
-        //
-        // Backing up, then restoring, the main renderer's 'resized' flag
-        // seems to fix fullscreen viewport problems when rotating a
-        // Windows device.
-        //
-        // Commencing hack in 3... 2... 1...
-        //
-        // UPDATE, SDL 2.0.0 update: the 'resized' flag is now gone.  This
-        // hack might not be necessary any more.
-        //
-        //SDL_Renderer * rendererForMainWindow = SDL_GetRenderer(m_sdlWindowData->sdlWindow);
-        // For now, limit the hack to when the Direct3D 11.1 is getting used:
-        //const bool usingD3D11Renderer = \
-        //    (rendererForMainWindow != NULL) &&
-        //    (SDL_strcmp(rendererForMainWindow->info.name, "direct3d 11.1") == 0);
-        //SDL_bool wasD3D11RendererResized = SDL_FALSE;
-        //if (usingD3D11Renderer) {
-        //    wasD3D11RendererResized = rendererForMainWindow->resized;
-        //}
-
-        // Send the window-resize event to the rest of SDL, and to apps:
-        const int windowWidth = (int) ceil(args->Size.Width);
-        const int windowHeight = (int) ceil(args->Size.Height);
-        SDL_SendWindowEvent(
-            m_sdlWindowData->sdlWindow,
-            SDL_WINDOWEVENT_RESIZED,
-            windowWidth,
-            windowHeight);
-
-        //// Viewport hack, part two:
-        //if (usingD3D11Renderer) {
-        //    rendererForMainWindow->resized = wasD3D11RendererResized;
-        //}
-    }
-}
-
-void SDL_WinRTApp::OnVisibilityChanged(CoreWindow^ sender, VisibilityChangedEventArgs^ args)
-{
-#if LOG_WINDOW_EVENTS==1
-    SDL_Log("%s, visible?=%s, m_sdlWindowData?=%s\n",
-        __FUNCTION__,
-        (args->Visible ? "yes" : "no"),
-        (m_sdlWindowData ? "yes" : "no"));
-#endif
-
-    m_windowVisible = args->Visible;
-    if (m_sdlWindowData) {
-        SDL_bool wasSDLWindowSurfaceValid = m_sdlWindowData->sdlWindow->surface_valid;
-
-        if (args->Visible) {
-            SDL_SendWindowEvent(m_sdlWindowData->sdlWindow, SDL_WINDOWEVENT_SHOWN, 0, 0);
-        } else {
-            SDL_SendWindowEvent(m_sdlWindowData->sdlWindow, SDL_WINDOWEVENT_HIDDEN, 0, 0);
-        }
-
-        // HACK: Prevent SDL's window-hide handling code, which currently
-        // triggers a fake window resize (possibly erronously), from
-        // marking the SDL window's surface as invalid.
-        //
-        // A better solution to this probably involves figuring out if the
-        // fake window resize can be prevented.
-        m_sdlWindowData->sdlWindow->surface_valid = wasSDLWindowSurfaceValid;
-    }
-}
-
-void SDL_WinRTApp::OnWindowClosed(CoreWindow^ sender, CoreWindowEventArgs^ args)
-{
-#if LOG_WINDOW_EVENTS==1
-    SDL_Log("%s\n", __FUNCTION__);
-#endif
-    m_windowClosed = true;
-}
-
-static Uint8
-WINRT_GetSDLButtonForPointerPoint(PointerPoint ^ pt)
-{
-    switch (pt->Properties->PointerUpdateKind)
-    {
-        case PointerUpdateKind::LeftButtonPressed:
-        case PointerUpdateKind::LeftButtonReleased:
-            return SDL_BUTTON_LEFT;
-
-        case PointerUpdateKind::RightButtonPressed:
-        case PointerUpdateKind::RightButtonReleased:
-            return SDL_BUTTON_RIGHT;
-
-        case PointerUpdateKind::MiddleButtonPressed:
-        case PointerUpdateKind::MiddleButtonReleased:
-            return SDL_BUTTON_MIDDLE;
-
-        case PointerUpdateKind::XButton1Pressed:
-        case PointerUpdateKind::XButton1Released:
-            return SDL_BUTTON_X1;
-
-        case PointerUpdateKind::XButton2Pressed:
-        case PointerUpdateKind::XButton2Released:
-            return SDL_BUTTON_X2;
-
-        default:
-            break;
-    }
-
-    return 0;
-}
-
-static const char *
-WINRT_ConvertPointerUpdateKindToString(PointerUpdateKind kind)
-{
-    switch (kind)
-    {
-        case PointerUpdateKind::Other:
-            return "Other";
-        case PointerUpdateKind::LeftButtonPressed:
-            return "LeftButtonPressed";
-        case PointerUpdateKind::LeftButtonReleased:
-            return "LeftButtonReleased";
-        case PointerUpdateKind::RightButtonPressed:
-            return "RightButtonPressed";
-        case PointerUpdateKind::RightButtonReleased:
-            return "RightButtonReleased";
-        case PointerUpdateKind::MiddleButtonPressed:
-            return "MiddleButtonPressed";
-        case PointerUpdateKind::MiddleButtonReleased:
-            return "MiddleButtonReleased";
-        case PointerUpdateKind::XButton1Pressed:
-            return "XButton1Pressed";
-        case PointerUpdateKind::XButton1Released:
-            return "XButton1Released";
-        case PointerUpdateKind::XButton2Pressed:
-            return "XButton2Pressed";
-        case PointerUpdateKind::XButton2Released:
-            return "XButton2Released";
-    }
-
-    return "";
-}
-
-static void
-WINRT_LogPointerEvent(const string & header, PointerEventArgs ^ args, Point transformedPoint)
-{
-    PointerPoint ^ pt = args->CurrentPoint;
-    SDL_Log("%s: Position={%f,%f}, Transformed Pos={%f, %f}, MouseWheelDelta=%d, FrameId=%d, PointerId=%d, PointerUpdateKind=%s\n",
-        header.c_str(),
-        pt->Position.X, pt->Position.Y,
-        transformedPoint.X, transformedPoint.Y,
-        pt->Properties->MouseWheelDelta,
-        pt->FrameId,
-        pt->PointerId,
-        WINRT_ConvertPointerUpdateKindToString(args->CurrentPoint->Properties->PointerUpdateKind));
-}
-
-void SDL_WinRTApp::OnPointerPressed(CoreWindow^ sender, PointerEventArgs^ args)
-{
-#if LOG_POINTER_EVENTS
-    WINRT_LogPointerEvent("mouse down", args, TransformCursor(args->CurrentPoint->Position));
-#endif
-
-    if (m_sdlWindowData) {
-        Uint8 button = WINRT_GetSDLButtonForPointerPoint(args->CurrentPoint);
-        if (button) {
-            SDL_SendMouseButton(m_sdlWindowData->sdlWindow, 0, SDL_PRESSED, button);
-        }
-    }
-}
-
-void SDL_WinRTApp::OnPointerReleased(CoreWindow^ sender, PointerEventArgs^ args)
-{
-#if LOG_POINTER_EVENTS
-    WINRT_LogPointerEvent("mouse up", args, TransformCursor(args->CurrentPoint->Position));
-#endif
-
-    if (m_sdlWindowData) {
-        Uint8 button = WINRT_GetSDLButtonForPointerPoint(args->CurrentPoint);
-        if (button) {
-            SDL_SendMouseButton(m_sdlWindowData->sdlWindow, 0, SDL_RELEASED, button);
-        }
-    }
-}
-
-void SDL_WinRTApp::OnPointerWheelChanged(CoreWindow^ sender, PointerEventArgs^ args)
-{
-#if LOG_POINTER_EVENTS
-    WINRT_LogPointerEvent("wheel changed", args, TransformCursor(args->CurrentPoint->Position));
-#endif
-
-    if (m_sdlWindowData) {
-        // FIXME: This may need to accumulate deltas up to WHEEL_DELTA
-        short motion = args->CurrentPoint->Properties->MouseWheelDelta / WHEEL_DELTA;
-        SDL_SendMouseWheel(m_sdlWindowData->sdlWindow, 0, 0, motion);
-    }
-}
-
-static inline int _lround(float arg) {
-    if (arg >= 0.0f) {
-        return (int)floor(arg + 0.5f);
-    } else {
-        return (int)ceil(arg - 0.5f);
-    }
-}
-
-void SDL_WinRTApp::OnMouseMoved(MouseDevice^ mouseDevice, MouseEventArgs^ args)
-{
-    if (m_sdlWindowData && m_useRelativeMouseMode) {
-        // DLudwig, 2012-12-28: On some systems, namely Visual Studio's Windows
-        // Simulator, as well as Windows 8 in a Parallels 8 VM, MouseEventArgs'
-        // MouseDelta field often reports very large values.  More information
-        // on this can be found at the following pages on MSDN:
-        //  - http://social.msdn.microsoft.com/Forums/en-US/winappswithnativecode/thread/a3c789fa-f1c5-49c4-9c0a-7db88d0f90f8
-        //  - https://connect.microsoft.com/VisualStudio/Feedback/details/756515
-        //
-        // The values do not appear to be as large when running on some systems,
-        // most notably a Surface RT.  Furthermore, the values returned by
-        // CoreWindow's PointerMoved event, and sent to this class' OnPointerMoved
-        // method, do not ever appear to be large, even when MouseEventArgs'
-        // MouseDelta is reporting to the contrary.
-        //
-        // On systems with the large-values behavior, it appears that the values
-        // get reported as if the screen's size is 65536 units in both the X and Y
-        // dimensions.  This can be viewed by using Windows' now-private, "Raw Input"
-        // APIs.  (GetRawInputData, RegisterRawInputDevices, WM_INPUT, etc.)
-        //
-        // MSDN's documentation on MouseEventArgs' MouseDelta field (at
-        // http://msdn.microsoft.com/en-us/library/windows/apps/windows.devices.input.mouseeventargs.mousedelta ),
-        // does not seem to indicate (to me) that its values should be so large.  It
-        // says that its values should be a "change in screen location".  I could
-        // be misinterpreting this, however a post on MSDN from a Microsoft engineer (see: 
-        // http://social.msdn.microsoft.com/Forums/en-US/winappswithnativecode/thread/09a9868e-95bb-4858-ba1a-cb4d2c298d62 ),
-        // indicates that these values are in DIPs, which is the same unit used
-        // by CoreWindow's PointerMoved events (via the Position field in its CurrentPoint
-        // property.  See http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.input.pointerpoint.position.aspx
-        // for details.)
-        //
-        // To note, PointerMoved events are sent a 'RawPosition' value (via the
-        // CurrentPoint property in MouseEventArgs), however these do not seem
-        // to exhibit the same large-value behavior.
-        //
-        // The values passed via PointerMoved events can't always be used for relative
-        // mouse motion, unfortunately.  Its values are bound to the cursor's position,
-        // which stops when it hits one of the screen's edges.  This can be a problem in
-        // first person shooters, whereby it is normal for mouse motion to travel far
-        // along any one axis for a period of time.  MouseMoved events do not have the
-        // screen-bounding limitation, and can be used regardless of where the system's
-        // cursor is.
-        //
-        // One possible workaround would be to programmatically set the cursor's
-        // position to the screen's center (when SDL's relative mouse mode is enabled),
-        // however Windows RT does not yet seem to have the ability to set the cursor's
-        // position via a public API.  Win32 did this via an API call, SetCursorPos,
-        // however WinRT makes this function be private.  Apps that use it won't get
-        // approved for distribution in the Windows Store.  I've yet to be able to find
-        // a suitable, store-friendly counterpart for WinRT.
-        //
-        // There may be some room for a workaround whereby OnPointerMoved's values
-        // are compared to the values from OnMouseMoved in order to detect
-        // when this bug is active.  A suitable transformation could then be made to
-        // OnMouseMoved's values.  For now, however, the system-reported values are sent
-        // to SDL with minimal transformation: from native screen coordinates (in DIPs)
-        // to SDL window coordinates.
-        //
-        const Point mouseDeltaInDIPs((float)args->MouseDelta.X, (float)args->MouseDelta.Y);
-        const Point mouseDeltaInSDLWindowCoords = TransformCursor(mouseDeltaInDIPs);
-        SDL_SendMouseMotion(
-            m_sdlWindowData->sdlWindow,
-            0,
-            1,
-            _lround(mouseDeltaInSDLWindowCoords.X),
-            _lround(mouseDeltaInSDLWindowCoords.Y));
-    }
-}
-
-// Applies necessary geometric transformations to raw cursor positions:
-Point SDL_WinRTApp::TransformCursor(Point rawPosition)
-{
-    if ( ! m_sdlWindowData || ! m_sdlWindowData->sdlWindow ) {
-        return rawPosition;
-    }
-    CoreWindow ^ nativeWindow = CoreWindow::GetForCurrentThread();
-    Point outputPosition;
-    outputPosition.X = rawPosition.X * (((float32)m_sdlWindowData->sdlWindow->w) / nativeWindow->Bounds.Width);
-    outputPosition.Y = rawPosition.Y * (((float32)m_sdlWindowData->sdlWindow->h) / nativeWindow->Bounds.Height);
-    return outputPosition;
-}
-
-void SDL_WinRTApp::OnPointerMoved(CoreWindow^ sender, PointerEventArgs^ args)
-{
-#if LOG_POINTER_EVENTS
-    WINRT_LogPointerEvent("pointer moved", args, TransformCursor(args->CurrentPoint->Position));
-#endif
-
-    if (m_sdlWindowData && ! m_useRelativeMouseMode)
-    {
-        Point transformedPoint = TransformCursor(args->CurrentPoint->Position);
-        SDL_SendMouseMotion(m_sdlWindowData->sdlWindow, 0, 0, (int)transformedPoint.X, (int)transformedPoint.Y);
-    }
-}
-
-static SDL_Scancode WinRT_Official_Keycodes[] = {
-    SDL_SCANCODE_UNKNOWN, // VirtualKey.None -- 0
-    SDL_SCANCODE_UNKNOWN, // VirtualKey.LeftButton -- 1
-    SDL_SCANCODE_UNKNOWN, // VirtualKey.RightButton -- 2
-    SDL_SCANCODE_CANCEL, // VirtualKey.Cancel -- 3
-    SDL_SCANCODE_UNKNOWN, // VirtualKey.MiddleButton -- 4
-    SDL_SCANCODE_UNKNOWN, // VirtualKey.XButton1 -- 5
-    SDL_SCANCODE_UNKNOWN, // VirtualKey.XButton2 -- 6
-    SDL_SCANCODE_UNKNOWN, // -- 7
-    SDL_SCANCODE_BACKSPACE, // VirtualKey.Back -- 8
-    SDL_SCANCODE_TAB, // VirtualKey.Tab -- 9
-    SDL_SCANCODE_UNKNOWN, // -- 10
-    SDL_SCANCODE_UNKNOWN, // -- 11
-    SDL_SCANCODE_CLEAR, // VirtualKey.Clear -- 12
-    SDL_SCANCODE_RETURN, // VirtualKey.Enter -- 13
-    SDL_SCANCODE_UNKNOWN, // -- 14
-    SDL_SCANCODE_UNKNOWN, // -- 15
-    SDL_SCANCODE_LSHIFT, // VirtualKey.Shift -- 16
-    SDL_SCANCODE_LCTRL, // VirtualKey.Control -- 17
-    SDL_SCANCODE_MENU, // VirtualKey.Menu -- 18
-    SDL_SCANCODE_PAUSE, // VirtualKey.Pause -- 19
-    SDL_SCANCODE_CAPSLOCK, // VirtualKey.CapitalLock -- 20
-    SDL_SCANCODE_UNKNOWN, // VirtualKey.Kana or VirtualKey.Hangul -- 21
-    SDL_SCANCODE_UNKNOWN, // -- 22
-    SDL_SCANCODE_UNKNOWN, // VirtualKey.Junja -- 23
-    SDL_SCANCODE_UNKNOWN, // VirtualKey.Final -- 24
-    SDL_SCANCODE_UNKNOWN, // VirtualKey.Hanja or VirtualKey.Kanji -- 25
-    SDL_SCANCODE_UNKNOWN, // -- 26
-    SDL_SCANCODE_ESCAPE, // VirtualKey.Escape -- 27
-    SDL_SCANCODE_UNKNOWN, // VirtualKey.Convert -- 28
-    SDL_SCANCODE_UNKNOWN, // VirtualKey.NonConvert -- 29
-    SDL_SCANCODE_UNKNOWN, // VirtualKey.Accept -- 30
-    SDL_SCANCODE_UNKNOWN, // VirtualKey.ModeChange -- 31  (maybe SDL_SCANCODE_MODE ?)
-    SDL_SCANCODE_SPACE, // VirtualKey.Space -- 32
-    SDL_SCANCODE_PAGEUP, // VirtualKey.PageUp -- 33
-    SDL_SCANCODE_PAGEDOWN, // VirtualKey.PageDown -- 34
-    SDL_SCANCODE_END, // VirtualKey.End -- 35
-    SDL_SCANCODE_HOME, // VirtualKey.Home -- 36
-    SDL_SCANCODE_LEFT, // VirtualKey.Left -- 37
-    SDL_SCANCODE_UP, // VirtualKey.Up -- 38
-    SDL_SCANCODE_RIGHT, // VirtualKey.Right -- 39
-    SDL_SCANCODE_DOWN, // VirtualKey.Down -- 40
-    SDL_SCANCODE_SELECT, // VirtualKey.Select -- 41
-    SDL_SCANCODE_UNKNOWN, // VirtualKey.Print -- 42  (maybe SDL_SCANCODE_PRINTSCREEN ?)
-    SDL_SCANCODE_EXECUTE, // VirtualKey.Execute -- 43
-    SDL_SCANCODE_UNKNOWN, // VirtualKey.Snapshot -- 44
-    SDL_SCANCODE_INSERT, // VirtualKey.Insert -- 45
-    SDL_SCANCODE_DELETE, // VirtualKey.Delete -- 46
-    SDL_SCANCODE_HELP, // VirtualKey.Help -- 47
-    SDL_SCANCODE_0, // VirtualKey.Number0 -- 48
-    SDL_SCANCODE_1, // VirtualKey.Number1 -- 49
-    SDL_SCANCODE_2, // VirtualKey.Number2 -- 50
-    SDL_SCANCODE_3, // VirtualKey.Number3 -- 51
-    SDL_SCANCODE_4, // VirtualKey.Number4 -- 52
-    SDL_SCANCODE_5, // VirtualKey.Number5 -- 53
-    SDL_SCANCODE_6, // VirtualKey.Number6 -- 54
-    SDL_SCANCODE_7, // VirtualKey.Number7 -- 55
-    SDL_SCANCODE_8, // VirtualKey.Number8 -- 56
-    SDL_SCANCODE_9, // VirtualKey.Number9 -- 57
-    SDL_SCANCODE_UNKNOWN, // -- 58
-    SDL_SCANCODE_UNKNOWN, // -- 59
-    SDL_SCANCODE_UNKNOWN, // -- 60
-    SDL_SCANCODE_UNKNOWN, // -- 61
-    SDL_SCANCODE_UNKNOWN, // -- 62
-    SDL_SCANCODE_UNKNOWN, // -- 63
-    SDL_SCANCODE_UNKNOWN, // -- 64
-    SDL_SCANCODE_A, // VirtualKey.A -- 65
-    SDL_SCANCODE_B, // VirtualKey.B -- 66
-    SDL_SCANCODE_C, // VirtualKey.C -- 67
-    SDL_SCANCODE_D, // VirtualKey.D -- 68
-    SDL_SCANCODE_E, // VirtualKey.E -- 69
-    SDL_SCANCODE_F, // VirtualKey.F -- 70
-    SDL_SCANCODE_G, // VirtualKey.G -- 71
-    SDL_SCANCODE_H, // VirtualKey.H -- 72
-    SDL_SCANCODE_I, // VirtualKey.I -- 73
-    SDL_SCANCODE_J, // VirtualKey.J -- 74
-    SDL_SCANCODE_K, // VirtualKey.K -- 75
-    SDL_SCANCODE_L, // VirtualKey.L -- 76
-    SDL_SCANCODE_M, // VirtualKey.M -- 77
-    SDL_SCANCODE_N, // VirtualKey.N -- 78
-    SDL_SCANCODE_O, // VirtualKey.O -- 79
-    SDL_SCANCODE_P, // VirtualKey.P -- 80
-    SDL_SCANCODE_Q, // VirtualKey.Q -- 81
-    SDL_SCANCODE_R, // VirtualKey.R -- 82
-    SDL_SCANCODE_S, // VirtualKey.S -- 83
-    SDL_SCANCODE_T, // VirtualKey.T -- 84
-    SDL_SCANCODE_U, // VirtualKey.U -- 85
-    SDL_SCANCODE_V, // VirtualKey.V -- 86
-    SDL_SCANCODE_W, // VirtualKey.W -- 87
-    SDL_SCANCODE_X, // VirtualKey.X -- 88
-    SDL_SCANCODE_Y, // VirtualKey.Y -- 89
-    SDL_SCANCODE_Z, // VirtualKey.Z -- 90
-    SDL_SCANCODE_UNKNOWN, // VirtualKey.LeftWindows -- 91  (maybe SDL_SCANCODE_APPLICATION or SDL_SCANCODE_LGUI ?)
-    SDL_SCANCODE_UNKNOWN, // VirtualKey.RightWindows -- 92  (maybe SDL_SCANCODE_APPLICATION or SDL_SCANCODE_RGUI ?)
-    SDL_SCANCODE_APPLICATION, // VirtualKey.Application -- 93
-    SDL_SCANCODE_UNKNOWN, // -- 94
-    SDL_SCANCODE_SLEEP, // VirtualKey.Sleep -- 95
-    SDL_SCANCODE_KP_0, // VirtualKey.NumberPad0 -- 96
-    SDL_SCANCODE_KP_1, // VirtualKey.NumberPad1 -- 97
-    SDL_SCANCODE_KP_2, // VirtualKey.NumberPad2 -- 98
-    SDL_SCANCODE_KP_3, // VirtualKey.NumberPad3 -- 99
-    SDL_SCANCODE_KP_4, // VirtualKey.NumberPad4 -- 100
-    SDL_SCANCODE_KP_5, // VirtualKey.NumberPad5 -- 101
-    SDL_SCANCODE_KP_6, // VirtualKey.NumberPad6 -- 102
-    SDL_SCANCODE_KP_7, // VirtualKey.NumberPad7 -- 103
-    SDL_SCANCODE_KP_8, // VirtualKey.NumberPad8 -- 104
-    SDL_SCANCODE_KP_9, // VirtualKey.NumberPad9 -- 105
-    SDL_SCANCODE_KP_MULTIPLY, // VirtualKey.Multiply -- 106
-    SDL_SCANCODE_KP_PLUS, // VirtualKey.Add -- 107
-    SDL_SCANCODE_UNKNOWN, // VirtualKey.Separator -- 108
-    SDL_SCANCODE_KP_MINUS, // VirtualKey.Subtract -- 109
-    SDL_SCANCODE_UNKNOWN, // VirtualKey.Decimal -- 110  (maybe SDL_SCANCODE_DECIMALSEPARATOR, SDL_SCANCODE_KP_DECIMAL, or SDL_SCANCODE_KP_PERIOD ?)
-    SDL_SCANCODE_KP_DIVIDE, // VirtualKey.Divide -- 111
-    SDL_SCANCODE_F1, // VirtualKey.F1 -- 112
-    SDL_SCANCODE_F2, // VirtualKey.F2 -- 113
-    SDL_SCANCODE_F3, // VirtualKey.F3 -- 114
-    SDL_SCANCODE_F4, // VirtualKey.F4 -- 115
-    SDL_SCANCODE_F5, // VirtualKey.F5 -- 116
-    SDL_SCANCODE_F6, // VirtualKey.F6 -- 117
-    SDL_SCANCODE_F7, // VirtualKey.F7 -- 118
-    SDL_SCANCODE_F8, // VirtualKey.F8 -- 119
-    SDL_SCANCODE_F9, // VirtualKey.F9 -- 120
-    SDL_SCANCODE_F10, // VirtualKey.F10 -- 121
-    SDL_SCANCODE_F11, // VirtualKey.F11 -- 122
-    SDL_SCANCODE_F12, // VirtualKey.F12 -- 123
-    SDL_SCANCODE_F13, // VirtualKey.F13 -- 124
-    SDL_SCANCODE_F14, // VirtualKey.F14 -- 125
-    SDL_SCANCODE_F15, // VirtualKey.F15 -- 126
-    SDL_SCANCODE_F16, // VirtualKey.F16 -- 127
-    SDL_SCANCODE_F17, // VirtualKey.F17 -- 128
-    SDL_SCANCODE_F18, // VirtualKey.F18 -- 129
-    SDL_SCANCODE_F19, // VirtualKey.F19 -- 130
-    SDL_SCANCODE_F20, // VirtualKey.F20 -- 131
-    SDL_SCANCODE_F21, // VirtualKey.F21 -- 132
-    SDL_SCANCODE_F22, // VirtualKey.F22 -- 133
-    SDL_SCANCODE_F23, // VirtualKey.F23 -- 134
-    SDL_SCANCODE_F24, // VirtualKey.F24 -- 135
-    SDL_SCANCODE_UNKNOWN, // -- 136
-    SDL_SCANCODE_UNKNOWN, // -- 137
-    SDL_SCANCODE_UNKNOWN, // -- 138
-    SDL_SCANCODE_UNKNOWN, // -- 139
-    SDL_SCANCODE_UNKNOWN, // -- 140
-    SDL_SCANCODE_UNKNOWN, // -- 141
-    SDL_SCANCODE_UNKNOWN, // -- 142
-    SDL_SCANCODE_UNKNOWN, // -- 143
-    SDL_SCANCODE_NUMLOCKCLEAR, // VirtualKey.NumberKeyLock -- 144
-    SDL_SCANCODE_SCROLLLOCK, // VirtualKey.Scroll -- 145
-    SDL_SCANCODE_UNKNOWN, // -- 146
-    SDL_SCANCODE_UNKNOWN, // -- 147
-    SDL_SCANCODE_UNKNOWN, // -- 148
-    SDL_SCANCODE_UNKNOWN, // -- 149
-    SDL_SCANCODE_UNKNOWN, // -- 150
-    SDL_SCANCODE_UNKNOWN, // -- 151
-    SDL_SCANCODE_UNKNOWN, // -- 152
-    SDL_SCANCODE_UNKNOWN, // -- 153
-    SDL_SCANCODE_UNKNOWN, // -- 154
-    SDL_SCANCODE_UNKNOWN, // -- 155
-    SDL_SCANCODE_UNKNOWN, // -- 156
-    SDL_SCANCODE_UNKNOWN, // -- 157
-    SDL_SCANCODE_UNKNOWN, // -- 158
-    SDL_SCANCODE_UNKNOWN, // -- 159
-    SDL_SCANCODE_LSHIFT, // VirtualKey.LeftShift -- 160
-    SDL_SCANCODE_RSHIFT, // VirtualKey.RightShift -- 161
-    SDL_SCANCODE_LCTRL, // VirtualKey.LeftControl -- 162
-    SDL_SCANCODE_RCTRL, // VirtualKey.RightControl -- 163
-    SDL_SCANCODE_MENU, // VirtualKey.LeftMenu -- 164
-    SDL_SCANCODE_MENU, // VirtualKey.RightMenu -- 165
-};
-
-static std::unordered_map<int, SDL_Scancode> WinRT_Unofficial_Keycodes;
-
-static SDL_Scancode
-TranslateKeycode(int keycode)
-{
-    if (WinRT_Unofficial_Keycodes.empty()) {
-        /* Set up a table of undocumented (by Microsoft), WinRT-specific,
-           key codes: */
-        // TODO, WinRT: move content declarations of WinRT_Unofficial_Keycodes into a C++11 initializer list, when possible
-        WinRT_Unofficial_Keycodes[220] = SDL_SCANCODE_GRAVE;
-        WinRT_Unofficial_Keycodes[222] = SDL_SCANCODE_BACKSLASH;
-    }
-
-    /* Try to get a documented, WinRT, 'VirtualKey' first (as documented at
-       http://msdn.microsoft.com/en-us/library/windows/apps/windows.system.virtualkey.aspx ).
-       If that fails, fall back to a Win32 virtual key.
-    */
-    // TODO, WinRT: try filling out the WinRT keycode table as much as possible, using the Win32 table for interpretation hints
-    //SDL_Log("WinRT TranslateKeycode, keycode=%d\n", (int)keycode);
-    SDL_Scancode scancode = SDL_SCANCODE_UNKNOWN;
-    if (keycode < SDL_arraysize(WinRT_Official_Keycodes)) {
-        scancode = WinRT_Official_Keycodes[keycode];
-    }
-    if (scancode == SDL_SCANCODE_UNKNOWN) {
-        if (WinRT_Unofficial_Keycodes.find(keycode) != WinRT_Unofficial_Keycodes.end()) {
-            scancode = WinRT_Unofficial_Keycodes[keycode];
-        }
-    }
-    if (scancode == SDL_SCANCODE_UNKNOWN) {
-        if (keycode < SDL_arraysize(windows_scancode_table)) {
-            scancode = windows_scancode_table[keycode];
-        }
-    }
-    if (scancode == SDL_SCANCODE_UNKNOWN) {
-        SDL_Log("WinRT TranslateKeycode, unknown keycode=%d\n", (int)keycode);
-    }
-    return scancode;
-}
-
-void SDL_WinRTApp::OnKeyDown(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::KeyEventArgs^ args)
-{
-    SDL_Scancode sdlScancode = TranslateKeycode((int)args->VirtualKey);
-#if 0
-    SDL_Keycode keycode = SDL_GetKeyFromScancode(sdlScancode);
-    SDL_Log("key down, handled=%s, ext?=%s, released?=%s, menu key down?=%s, repeat count=%d, native scan code=%d, was down?=%s, vkey=%d, sdl scan code=%d (%s), sdl key code=%d (%s)\n",
-        (args->Handled ? "1" : "0"),
-        (args->KeyStatus.IsExtendedKey ? "1" : "0"),
-        (args->KeyStatus.IsKeyReleased ? "1" : "0"),
-        (args->KeyStatus.IsMenuKeyDown ? "1" : "0"),
-        args->KeyStatus.RepeatCount,
-        args->KeyStatus.ScanCode,
-        (args->KeyStatus.WasKeyDown ? "1" : "0"),
-        args->VirtualKey,
-        sdlScancode,
-        SDL_GetScancodeName(sdlScancode),
-        keycode,
-        SDL_GetKeyName(keycode));
-    //args->Handled = true;
-    //VirtualKey vkey = args->VirtualKey;
-#endif
-    SDL_SendKeyboardKey(SDL_PRESSED, sdlScancode);
-}
-
-void SDL_WinRTApp::OnKeyUp(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::KeyEventArgs^ args)
-{
-    SDL_Scancode sdlScancode = TranslateKeycode((int)args->VirtualKey);
-#if 0
-    SDL_Keycode keycode = SDL_GetKeyFromScancode(sdlScancode);
-    SDL_Log("key up, handled=%s, ext?=%s, released?=%s, menu key down?=%s, repeat count=%d, native scan code=%d, was down?=%s, vkey=%d, sdl scan code=%d (%s), sdl key code=%d (%s)\n",
-        (args->Handled ? "1" : "0"),
-        (args->KeyStatus.IsExtendedKey ? "1" : "0"),
-        (args->KeyStatus.IsKeyReleased ? "1" : "0"),
-        (args->KeyStatus.IsMenuKeyDown ? "1" : "0"),
-        args->KeyStatus.RepeatCount,
-        args->KeyStatus.ScanCode,
-        (args->KeyStatus.WasKeyDown ? "1" : "0"),
-        args->VirtualKey,
-        sdlScancode,
-        SDL_GetScancodeName(sdlScancode),
-        keycode,
-        SDL_GetKeyName(keycode));
-    //args->Handled = true;
-#endif
-    SDL_SendKeyboardKey(SDL_RELEASED, sdlScancode);
-}
-
-void SDL_WinRTApp::OnActivated(CoreApplicationView^ applicationView, IActivatedEventArgs^ args)
-{
-    CoreWindow::GetForCurrentThread()->Activate();
-}
-
-static int SDLCALL RemoveAppSuspendAndResumeEvents(void * userdata, SDL_Event * event)
-{
-    if (event->type == SDL_WINDOWEVENT)
-    {
-        switch (event->window.event)
-        {
-            case SDL_WINDOWEVENT_MINIMIZED:
-            case SDL_WINDOWEVENT_RESTORED:
-                // Return 0 to indicate that the event should be removed from the
-                // event queue:
-                return 0;
-            default:
-                break;
-        }
-    }
-
-    // Return 1 to indicate that the event should stay in the event queue:
-    return 1;
-}
-
-void SDL_WinRTApp::OnSuspending(Platform::Object^ sender, SuspendingEventArgs^ args)
-{
-    // Save app state asynchronously after requesting a deferral. Holding a deferral
-    // indicates that the application is busy performing suspending operations. Be
-    // aware that a deferral may not be held indefinitely. After about five seconds,
-    // the app will be forced to exit.
-    SuspendingDeferral^ deferral = args->SuspendingOperation->GetDeferral();
-    create_task([this, deferral]()
-    {
-        // Send a window-minimized event immediately to observers.
-        // CoreDispatcher::ProcessEvents, which is the backbone on which
-        // SDL_WinRTApp::PumpEvents is built, will not return to its caller
-        // once it sends out a suspend event.  Any events posted to SDL's
-        // event queue won't get received until the WinRT app is resumed.
-        // SDL_AddEventWatch() may be used to receive app-suspend events on
-        // WinRT.
-        //
-        // In order to prevent app-suspend events from being received twice:
-        // 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_sdlWindowData)
-        {
-            SDL_SendWindowEvent(m_sdlWindowData->sdlWindow, 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();
-    });
-}
-
-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_sdlWindowData)
-    {
-        SDL_SendWindowEvent(m_sdlWindowData->sdlWindow, 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.
-        //
-        // TODO, WinRT: consider posting this event to the queue even though
-        // its counterpart, the app-suspend event, effectively has to be
-        // processed immediately.
-        SDL_FilterEvents(RemoveAppSuspendAndResumeEvents, 0);
-    }
-}
-
-SDL_DisplayMode SDL_WinRTApp::GetMainDisplayMode()
-{
-    // Create an empty, zeroed-out display mode:
-    SDL_DisplayMode mode;
-    SDL_zero(mode);
-
-    // Fill in most fields:
-    mode.format = SDL_PIXELFORMAT_RGB888;
-    mode.refresh_rate = 0;  // TODO, WinRT: see if refresh rate data is available, or relevant (for WinRT apps)
-    mode.driverdata = NULL;
-
-    // Calculate the display size given the window size, taking into account
-    // the current display's DPI:
-    const float currentDPI = Windows::Graphics::Display::DisplayProperties::LogicalDpi; 
-    const float dipsPerInch = 96.0f;
-    mode.w = (int) ((CoreWindow::GetForCurrentThread()->Bounds.Width * currentDPI) / dipsPerInch);
-    mode.h = (int) ((CoreWindow::GetForCurrentThread()->Bounds.Height * currentDPI) / dipsPerInch);
-
-    return mode;
-}
-
-const SDL_WindowData * SDL_WinRTApp::GetSDLWindowData() const
-{
-    return m_sdlWindowData;
-}
-
-bool SDL_WinRTApp::HasSDLWindowData() const
-{
-    return (m_sdlWindowData != NULL);
-}
-
-void SDL_WinRTApp::SetRelativeMouseMode(bool enable)
-{
-    m_useRelativeMouseMode = enable;
-}
-
-void SDL_WinRTApp::SetSDLWindowData(const SDL_WindowData * windowData)
-{
-    m_sdlWindowData = windowData;
-}
-
-void SDL_WinRTApp::SetSDLVideoDevice(const SDL_VideoDevice * videoDevice)
-{
-    m_sdlVideoDevice = videoDevice;
-}
--- a/src/video/windowsrt/SDL_WinRTApp.h	Tue Aug 13 20:33:15 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-#pragma once
-
-struct SDL_WindowData;
-
-ref class SDL_WinRTApp sealed : public Windows::ApplicationModel::Core::IFrameworkView
-{
-public:
-    SDL_WinRTApp();
-    
-    // IFrameworkView Methods.
-    virtual void Initialize(Windows::ApplicationModel::Core::CoreApplicationView^ applicationView);
-    virtual void SetWindow(Windows::UI::Core::CoreWindow^ window);
-    virtual void Load(Platform::String^ entryPoint);
-    virtual void Run();
-    virtual void Uninitialize();
-
-internal:
-    // SDL-specific methods
-    SDL_DisplayMode GetMainDisplayMode();
-    void PumpEvents();
-    const SDL_WindowData * GetSDLWindowData() const;
-    bool HasSDLWindowData() const;
-    void SetRelativeMouseMode(bool enable);
-    void SetSDLWindowData(const SDL_WindowData * windowData);
-    void SetSDLVideoDevice(const SDL_VideoDevice * videoDevice);
-    Windows::Foundation::Point TransformCursor(Windows::Foundation::Point rawPosition);
-
-protected:
-    // Event Handlers.
-    void OnOrientationChanged(Platform::Object^ sender);
-    void OnWindowSizeChanged(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::WindowSizeChangedEventArgs^ args);
-    void OnLogicalDpiChanged(Platform::Object^ sender);
-    void OnActivated(Windows::ApplicationModel::Core::CoreApplicationView^ applicationView, Windows::ApplicationModel::Activation::IActivatedEventArgs^ args);
-    void OnSuspending(Platform::Object^ sender, Windows::ApplicationModel::SuspendingEventArgs^ args);
-    void OnResuming(Platform::Object^ sender, Platform::Object^ args);
-    void OnWindowClosed(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::CoreWindowEventArgs^ args);
-    void OnVisibilityChanged(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::VisibilityChangedEventArgs^ args);
-    void OnPointerPressed(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args);
-    void OnPointerReleased(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args);
-    void OnPointerWheelChanged(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args);
-    void OnPointerMoved(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args);
-    void OnMouseMoved(Windows::Devices::Input::MouseDevice^ mouseDevice, Windows::Devices::Input::MouseEventArgs^ args);
-    void OnKeyDown(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::KeyEventArgs^ args);
-    void OnKeyUp(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::KeyEventArgs^ args);
-
-private:
-    bool m_windowClosed;
-    bool m_windowVisible;
-    const SDL_WindowData* m_sdlWindowData;
-    const SDL_VideoDevice* m_sdlVideoDevice;
-    bool m_useRelativeMouseMode;
-};
--- a/src/video/windowsrt/SDL_winrtevents.cpp	Tue Aug 13 20:33:15 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-/*
-  Simple DirectMedia Layer
-  Copyright (C) 1997-2012 Sam Lantinga <slouken@libsdl.org>
-
-  This software is provided 'as-is', without any express or implied
-  warranty.  In no event will the authors be held liable for any damages
-  arising from the use of this software.
-
-  Permission is granted to anyone to use this software for any purpose,
-  including commercial applications, and to alter it and redistribute it
-  freely, subject to the following restrictions:
-
-  1. The origin of this software must not be misrepresented; you must not
-     claim that you wrote the original software. If you use this software
-     in a product, an acknowledgment in the product documentation would be
-     appreciated but is not required.
-  2. Altered source versions must be plainly marked as such, and must not be
-     misrepresented as being the original software.
-  3. This notice may not be removed or altered from any source distribution.
-*/
-#include "SDL_config.h"
-
-#if SDL_VIDEO_DRIVER_WINRT
-
-#include "../../events/SDL_events_c.h"
-
-#include "SDL_winrtvideo.h"
-#include "SDL_winrtevents_c.h"
-#include "SDL_WinRTApp.h"
-
-extern SDL_WinRTApp ^ SDL_WinRTGlobalApp;
-
-void
-WINRT_PumpEvents(_THIS)
-{
-    SDL_WinRTGlobalApp->PumpEvents();
-}
-
-#endif /* SDL_VIDEO_DRIVER_WINRT */
-
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/windowsrt/SDL_winrtevents_c.h	Tue Aug 13 20:33:15 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-/*
-  Simple DirectMedia Layer
-  Copyright (C) 1997-2012 Sam Lantinga <slouken@libsdl.org>
-
-  This software is provided 'as-is', without any express or implied
-  warranty.  In no event will the authors be held liable for any damages
-  arising from the use of this software.
-
-  Permission is granted to anyone to use this software for any purpose,
-  including commercial applications, and to alter it and redistribute it
-  freely, subject to the following restrictions:
-
-  1. The origin of this software must not be misrepresented; you must not
-     claim that you wrote the original software. If you use this software
-     in a product, an acknowledgment in the product documentation would be
-     appreciated but is not required.
-  2. Altered source versions must be plainly marked as such, and must not be
-     misrepresented as being the original software.
-  3. This notice may not be removed or altered from any source distribution.
-*/
-#include "SDL_config.h"
-
-#include "SDL_winrtvideo.h"
-
-extern void WINRT_PumpEvents(_THIS);
-
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/windowsrt/SDL_winrtmouse.cpp	Tue Aug 13 20:33:15 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,149 +0,0 @@
-/*
-  Simple DirectMedia Layer
-  Copyright (C) 1997-2012 Sam Lantinga <slouken@libsdl.org>
-
-  This software is provided 'as-is', without any express or implied
-  warranty.  In no event will the authors be held liable for any damages
-  arising from the use of this software.
-
-  Permission is granted to anyone to use this software for any purpose,
-  including commercial applications, and to alter it and redistribute it
-  freely, subject to the following restrictions:
-
-  1. The origin of this software must not be misrepresented; you must not
-     claim that you wrote the original software. If you use this software
-     in a product, an acknowledgment in the product documentation would be
-     appreciated but is not required.
-  2. Altered source versions must be plainly marked as such, and must not be
-     misrepresented as being the original software.
-  3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "SDL_config.h"
-
-#if SDL_VIDEO_DRIVER_WINRT
-
-extern "C" {
-#include "SDL_assert.h"
-#include "../../events/SDL_mouse_c.h"
-#include "../SDL_sysvideo.h"
-}
-
-#include "SDL_WinRTApp.h"
-#include "SDL_winrtmouse.h"
-
-using namespace Windows::UI::Core;
-using Windows::UI::Core::CoreCursor;
-
-extern SDL_WinRTApp ^ SDL_WinRTGlobalApp;
-
-
-static SDL_Cursor *
-WINRT_CreateSystemCursor(SDL_SystemCursor id)
-{
-    SDL_Cursor *cursor;
-    CoreCursorType cursorType = CoreCursorType::Arrow;
-
-    switch(id)
-    {
-    default:
-        SDL_assert(0);
-        return NULL;
-    case SDL_SYSTEM_CURSOR_ARROW:     cursorType = CoreCursorType::Arrow; break;
-    case SDL_SYSTEM_CURSOR_IBEAM:     cursorType = CoreCursorType::IBeam; break;
-    case SDL_SYSTEM_CURSOR_WAIT:      cursorType = CoreCursorType::Wait; break;
-    case SDL_SYSTEM_CURSOR_CROSSHAIR: cursorType = CoreCursorType::Cross; break;
-    case SDL_SYSTEM_CURSOR_WAITARROW: cursorType = CoreCursorType::Wait; break;
-    case SDL_SYSTEM_CURSOR_SIZENWSE:  cursorType = CoreCursorType::SizeNorthwestSoutheast; break;
-    case SDL_SYSTEM_CURSOR_SIZENESW:  cursorType = CoreCursorType::SizeNortheastSouthwest; break;
-    case SDL_SYSTEM_CURSOR_SIZEWE:    cursorType = CoreCursorType::SizeWestEast; break;
-    case SDL_SYSTEM_CURSOR_SIZENS:    cursorType = CoreCursorType::SizeNorthSouth; break;
-    case SDL_SYSTEM_CURSOR_SIZEALL:   cursorType = CoreCursorType::SizeAll; break;
-    case SDL_SYSTEM_CURSOR_NO:        cursorType = CoreCursorType::UniversalNo; break;
-    case SDL_SYSTEM_CURSOR_HAND:      cursorType = CoreCursorType::Hand; break;
-    }
-
-    cursor = (SDL_Cursor *) SDL_calloc(1, sizeof(*cursor));
-    if (cursor) {
-        /* Create a pointer to a COM reference to a cursor.  The extra
-           pointer is used (on top of the COM reference) to allow the cursor
-           to be referenced by the SDL_cursor's driverdata field, which is
-           a void pointer.
-        */
-        CoreCursor ^* theCursor = new CoreCursor^(nullptr);
-        *theCursor = ref new CoreCursor(cursorType, 0);
-        cursor->driverdata = (void *) theCursor;
-    } else {
-        SDL_OutOfMemory();
-    }
-
-    return cursor;
-}
-
-static SDL_Cursor *
-WINRT_CreateDefaultCursor()
-{
-    return WINRT_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW);
-}
-
-static void
-WINRT_FreeCursor(SDL_Cursor * cursor)
-{
-    if (cursor->driverdata) {
-        CoreCursor ^* theCursor = (CoreCursor ^*) cursor->driverdata;
-        *theCursor = nullptr;       // Release the COM reference to the CoreCursor
-        delete theCursor;           // Delete the pointer to the COM reference
-    }
-    SDL_free(cursor);
-}
-
-static int
-WINRT_ShowCursor(SDL_Cursor * cursor)
-{
-    if (cursor) {
-        CoreCursor ^* theCursor = (CoreCursor ^*) cursor->driverdata;
-        CoreWindow::GetForCurrentThread()->PointerCursor = *theCursor;
-    } else {
-        CoreWindow::GetForCurrentThread()->PointerCursor = nullptr;
-    }
-    return 0;
-}
-
-static int
-WINRT_SetRelativeMouseMode(SDL_bool enabled)
-{
-    SDL_WinRTGlobalApp->SetRelativeMouseMode(enabled ? true : false);
-    return 0;
-}
-
-void
-WINRT_InitMouse(_THIS)
-{
-    SDL_Mouse *mouse = SDL_GetMouse();
-
-    /* DLudwig, Dec 3, 2012: Windows RT does not currently provide APIs for
-       the following features, AFAIK:
-        - custom cursors  (multiple system cursors are, however, available)
-        - programmatically moveable cursors
-    */
-
-#if WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP
-    //mouse->CreateCursor = WINRT_CreateCursor;
-    mouse->CreateSystemCursor = WINRT_CreateSystemCursor;
-    mouse->ShowCursor = WINRT_ShowCursor;
-    mouse->FreeCursor = WINRT_FreeCursor;
-    //mouse->WarpMouse = WINRT_WarpMouse;
-    mouse->SetRelativeMouseMode = WINRT_SetRelativeMouseMode;
-
-    SDL_SetDefaultCursor(WINRT_CreateDefaultCursor());
-#endif
-}
-
-void
-WINRT_QuitMouse(_THIS)
-{
-}
-
-#endif /* SDL_VIDEO_DRIVER_WINRT */
-
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/windowsrt/SDL_winrtmouse.h	Tue Aug 13 20:33:15 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-/*
-  Simple DirectMedia Layer
-  Copyright (C) 1997-2012 Sam Lantinga <slouken@libsdl.org>
-
-  This software is provided 'as-is', without any express or implied
-  warranty.  In no event will the authors be held liable for any damages
-  arising from the use of this software.
-
-  Permission is granted to anyone to use this software for any purpose,
-  including commercial applications, and to alter it and redistribute it
-  freely, subject to the following restrictions:
-
-  1. The origin of this software must not be misrepresented; you must not
-     claim that you wrote the original software. If you use this software
-     in a product, an acknowledgment in the product documentation would be
-     appreciated but is not required.
-  2. Altered source versions must be plainly marked as such, and must not be
-     misrepresented as being the original software.
-  3. This notice may not be removed or altered from any source distribution.
-*/
-#include "SDL_config.h"
-
-#ifndef _SDL_windowsmouse_h
-#define _SDL_windowsmouse_h
-
-extern void WINRT_InitMouse(_THIS);
-extern void WINRT_QuitMouse(_THIS);
-
-#endif /* _SDL_windowsmouse_h */
-
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/windowsrt/SDL_winrtvideo.cpp	Tue Aug 13 20:33:15 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,262 +0,0 @@
-/*
-  Simple DirectMedia Layer
-  Copyright (C) 1997-2012 Sam Lantinga <slouken@libsdl.org>
-
-  This software is provided 'as-is', without any express or implied
-  warranty.  In no event will the authors be held liable for any damages
-  arising from the use of this software.
-
-  Permission is granted to anyone to use this software for any purpose,
-  including commercial applications, and to alter it and redistribute it
-  freely, subject to the following restrictions:
-
-  1. The origin of this software must not be misrepresented; you must not
-     claim that you wrote the original software. If you use this software
-     in a product, an acknowledgment in the product documentation would be
-     appreciated but is not required.
-  2. Altered source versions must be plainly marked as such, and must not be
-     misrepresented as being the original software.
-  3. This notice may not be removed or altered from any source distribution.
-*/
-#include "SDL_config.h"
-
-#if SDL_VIDEO_DRIVER_WINRT
-
-/* WinRT SDL video driver implementation
-
-   Initial work on this was done by David Ludwig (dludwig@pobox.com), and
-   was based off of SDL's "dummy" video driver.
- */
-
-extern "C" {
-#include "SDL_video.h"
-#include "SDL_mouse.h"
-#include "../SDL_sysvideo.h"
-#include "../SDL_pixels_c.h"
-#include "../../events/SDL_events_c.h"
-#include "../../render/SDL_sysrender.h"
-#include "SDL_syswm.h"
-}
-
-#include "SDL_WinRTApp.h"
-#include "SDL_winrtvideo.h"
-#include "SDL_winrtevents_c.h"
-#include "SDL_winrtmouse.h"
-
-using namespace Windows::UI::Core;
-
-/* On Windows, windows.h defines CreateWindow */
-#ifdef CreateWindow
-#undef CreateWindow
-#endif
-
-extern SDL_WinRTApp ^ SDL_WinRTGlobalApp;
-
-#define WINRTVID_DRIVER_NAME "winrt"
-
-/* Initialization/Query functions */
-static int WINRT_VideoInit(_THIS);
-static int WINRT_InitModes(_THIS);
-static int WINRT_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode);
-static void WINRT_VideoQuit(_THIS);
-
-/* Window functions */
-static int WINRT_CreateWindow(_THIS, SDL_Window * window);
-static void WINRT_DestroyWindow(_THIS, SDL_Window * window);
-static SDL_bool WINRT_GetWindowWMInfo(_THIS, SDL_Window * window, SDL_SysWMinfo * info);
-
-/* WinRT driver bootstrap functions */
-
-static int
-WINRT_Available(void)
-{
-    return (1);
-}
-
-static void
-WINRT_DeleteDevice(SDL_VideoDevice * device)
-{
-    SDL_WinRTGlobalApp->SetSDLVideoDevice(NULL);
-    SDL_free(device);
-}
-
-static SDL_VideoDevice *
-WINRT_CreateDevice(int devindex)
-{
-    SDL_VideoDevice *device;
-
-    /* Initialize all variables that we clean on shutdown */
-    device = (SDL_VideoDevice *) SDL_calloc(1, sizeof(SDL_VideoDevice));
-    if (!device) {
-        SDL_OutOfMemory();
-        if (device) {
-            SDL_free(device);
-        }
-        return (0);
-    }
-
-    /* Set the function pointers */
-    device->VideoInit = WINRT_VideoInit;
-    device->VideoQuit = WINRT_VideoQuit;
-    device->CreateWindow = WINRT_CreateWindow;
-    device->DestroyWindow = WINRT_DestroyWindow;
-    device->SetDisplayMode = WINRT_SetDisplayMode;
-    device->PumpEvents = WINRT_PumpEvents;
-    //device->CreateWindowFramebuffer = SDL_WINRT_CreateWindowFramebuffer;
-    //device->UpdateWindowFramebuffer = SDL_WINRT_UpdateWindowFramebuffer;
-    //device->DestroyWindowFramebuffer = SDL_WINRT_DestroyWindowFramebuffer;
-    device->GetWindowWMInfo = WINRT_GetWindowWMInfo;
-    device->free = WINRT_DeleteDevice;
-
-    SDL_WinRTGlobalApp->SetSDLVideoDevice(device);
-
-    return device;
-}
-
-VideoBootStrap WINRT_bootstrap = {
-    WINRTVID_DRIVER_NAME, "SDL Windows RT video driver",
-    WINRT_Available, WINRT_CreateDevice
-};
-
-int
-WINRT_VideoInit(_THIS)
-{
-    // TODO, WinRT: consider adding a hack to wait (here) for the app's orientation to finish getting set (before the initial display mode is set up)
-
-    if (WINRT_InitModes(_this) < 0) {
-        return -1;
-    }
-    WINRT_InitMouse(_this);
-
-    return 0;
-}
-
-static int
-WINRT_InitModes(_THIS)
-{
-    SDL_DisplayMode mode = SDL_WinRTGlobalApp->GetMainDisplayMode();
-    if (SDL_AddBasicVideoDisplay(&mode) < 0) {
-        return -1;
-    }
-
-    SDL_AddDisplayMode(&_this->displays[0], &mode);
-    return 0;
-}
-
-static int
-WINRT_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode)
-{
-    return 0;
-}
-
-void
-WINRT_VideoQuit(_THIS)
-{
-    WINRT_QuitMouse(_this);
-}
-
-int
-WINRT_CreateWindow(_THIS, SDL_Window * window)
-{
-    // Make sure that only one window gets created, at least until multimonitor
-    // support is added.
-    if (SDL_WinRTGlobalApp->HasSDLWindowData())
-    {
-        SDL_SetError("WinRT only supports one window");
-        return -1;
-    }
-
-    SDL_WindowData *data = new SDL_WindowData;
-    if (!data) {
-        SDL_OutOfMemory();
-        return -1;
-    }
-    window->driverdata = data;
-    data->sdlWindow = window;
-    data->coreWindow = CoreWindow::GetForCurrentThread();
-
-    /* Make sure the window is considered to be positioned at {0,0},
-       and is considered fullscreen, shown, and the like.
-    */
-    window->x = 0;
-    window->y = 0;
-    window->flags =
-        SDL_WINDOW_FULLSCREEN |
-        SDL_WINDOW_SHOWN |
-        SDL_WINDOW_BORDERLESS |
-        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;
-
-    /* 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. */
- 
-    /* Make sure the WinRT app's IFramworkView can post events on
-       behalf of SDL:
-    */
-    SDL_WinRTGlobalApp->SetSDLWindowData(data);
-
-    /* All done! */
-    return 0;
-}
-
-void
-WINRT_DestroyWindow(_THIS, SDL_Window * window)
-{
-    SDL_WindowData * data = (SDL_WindowData *) window->driverdata;
-
-    if (SDL_WinRTGlobalApp->HasSDLWindowData() &&
-        SDL_WinRTGlobalApp->GetSDLWindowData()->sdlWindow == window)
-    {
-        SDL_WinRTGlobalApp->SetSDLWindowData(NULL);
-    }
-
-    if (data) {
-        // Delete the internal window data:
-        delete data;
-        data = NULL;
-    }
-}
-
-SDL_bool
-WINRT_GetWindowWMInfo(_THIS, SDL_Window * window, SDL_SysWMinfo * info)
-{
-    SDL_WindowData * data = (SDL_WindowData *) window->driverdata;
-
-    if (info->version.major <= SDL_MAJOR_VERSION) {
-        info->subsystem = SDL_SYSWM_WINDOWSRT;
-        info->info.winrt.window = reinterpret_cast<IUnknown *>(data->coreWindow.Get());
-        return SDL_TRUE;
-    } else {
-        SDL_SetError("Application not compiled with SDL %d.%d\n",
-                     SDL_MAJOR_VERSION, SDL_MINOR_VERSION);
-        return SDL_FALSE;
-    }
-    return SDL_FALSE;
-}
-
-#endif /* SDL_VIDEO_DRIVER_WINRT */
-
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/windowsrt/SDL_winrtvideo.h	Tue Aug 13 20:33:15 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-/*
-  Simple DirectMedia Layer
-  Copyright (C) 1997-2012 Sam Lantinga <slouken@libsdl.org>
-
-  This software is provided 'as-is', without any express or implied
-  warranty.  In no event will the authors be held liable for any damages
-  arising from the use of this software.
-
-  Permission is granted to anyone to use this software for any purpose,
-  including commercial applications, and to alter it and redistribute it
-  freely, subject to the following restrictions:
-
-  1. The origin of this software must not be misrepresented; you must not
-     claim that you wrote the original software. If you use this software
-     in a product, an acknowledgment in the product documentation would be
-     appreciated but is not required.
-  2. Altered source versions must be plainly marked as such, and must not be
-     misrepresented as being the original software.
-  3. This notice may not be removed or altered from any source distribution.
-*/
-#include "SDL_config.h"
-
-#ifndef _SDL_winrtvideo_h
-#define _SDL_winrtvideo_h
-
-extern "C" {
-#include "../SDL_sysvideo.h"
-}
-
-#include <agile.h>
-
-struct SDL_WindowData
-{
-    SDL_Window *sdlWindow;
-    Platform::Agile<Windows::UI::Core::CoreWindow> coreWindow;
-};
-
-#endif /* _SDL_winrtvideo_h */
-
-/* vi: set ts=4 sw=4 expandtab: */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/video/winrt/SDL_winrtevents.cpp	Tue Aug 20 21:22:32 2013 -0400
@@ -0,0 +1,41 @@
+/*
+  Simple DirectMedia Layer
+  Copyright (C) 1997-2012 Sam Lantinga <slouken@libsdl.org>
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+*/
+#include "SDL_config.h"
+
+#if SDL_VIDEO_DRIVER_WINRT
+
+#include "../../events/SDL_events_c.h"
+
+#include "SDL_winrtvideo.h"
+#include "SDL_winrtevents_c.h"
+#include "../../core/winrt/SDL_winrtapp.h"
+
+extern SDL_WinRTApp ^ SDL_WinRTGlobalApp;
+
+void
+WINRT_PumpEvents(_THIS)
+{
+    SDL_WinRTGlobalApp->PumpEvents();
+}
+
+#endif /* SDL_VIDEO_DRIVER_WINRT */
+
+/* vi: set ts=4 sw=4 expandtab: */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/video/winrt/SDL_winrtevents_c.h	Tue Aug 20 21:22:32 2013 -0400
@@ -0,0 +1,27 @@
+/*
+  Simple DirectMedia Layer
+  Copyright (C) 1997-2012 Sam Lantinga <slouken@libsdl.org>
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+*/
+#include "SDL_config.h"
+
+#include "SDL_winrtvideo.h"
+
+extern void WINRT_PumpEvents(_THIS);
+
+/* vi: set ts=4 sw=4 expandtab: */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/video/winrt/SDL_winrtmouse.cpp	Tue Aug 20 21:22:32 2013 -0400
@@ -0,0 +1,149 @@
+/*
+  Simple DirectMedia Layer
+  Copyright (C) 1997-2012 Sam Lantinga <slouken@libsdl.org>
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+*/
+
+#include "SDL_config.h"
+
+#if SDL_VIDEO_DRIVER_WINRT
+
+extern "C" {
+#include "SDL_assert.h"
+#include "../../events/SDL_mouse_c.h"
+#include "../SDL_sysvideo.h"
+}
+
+#include "../../core/winrt/SDL_winrtapp.h"
+#include "SDL_winrtmouse.h"
+
+using namespace Windows::UI::Core;
+using Windows::UI::Core::CoreCursor;
+
+extern SDL_WinRTApp ^ SDL_WinRTGlobalApp;
+
+
+static SDL_Cursor *
+WINRT_CreateSystemCursor(SDL_SystemCursor id)
+{
+    SDL_Cursor *cursor;
+    CoreCursorType cursorType = CoreCursorType::Arrow;
+
+    switch(id)
+    {
+    default:
+        SDL_assert(0);
+        return NULL;
+    case SDL_SYSTEM_CURSOR_ARROW:     cursorType = CoreCursorType::Arrow; break;
+    case SDL_SYSTEM_CURSOR_IBEAM:     cursorType = CoreCursorType::IBeam; break;
+    case SDL_SYSTEM_CURSOR_WAIT:      cursorType = CoreCursorType::Wait; break;
+    case SDL_SYSTEM_CURSOR_CROSSHAIR: cursorType = CoreCursorType::Cross; break;
+    case SDL_SYSTEM_CURSOR_WAITARROW: cursorType = CoreCursorType::Wait; break;
+    case SDL_SYSTEM_CURSOR_SIZENWSE:  cursorType = CoreCursorType::SizeNorthwestSoutheast; break;
+    case SDL_SYSTEM_CURSOR_SIZENESW:  cursorType = CoreCursorType::SizeNortheastSouthwest; break;
+    case SDL_SYSTEM_CURSOR_SIZEWE:    cursorType = CoreCursorType::SizeWestEast; break;
+    case SDL_SYSTEM_CURSOR_SIZENS:    cursorType = CoreCursorType::SizeNorthSouth; break;
+    case SDL_SYSTEM_CURSOR_SIZEALL:   cursorType = CoreCursorType::SizeAll; break;
+    case SDL_SYSTEM_CURSOR_NO:        cursorType = CoreCursorType::UniversalNo; break;
+    case SDL_SYSTEM_CURSOR_HAND:      cursorType = CoreCursorType::Hand; break;
+    }
+
+    cursor = (SDL_Cursor *) SDL_calloc(1, sizeof(*cursor));
+    if (cursor) {
+        /* Create a pointer to a COM reference to a cursor.  The extra
+           pointer is used (on top of the COM reference) to allow the cursor
+           to be referenced by the SDL_cursor's driverdata field, which is
+           a void pointer.
+        */
+        CoreCursor ^* theCursor = new CoreCursor^(nullptr);
+        *theCursor = ref new CoreCursor(cursorType, 0);
+        cursor->driverdata = (void *) theCursor;
+    } else {
+        SDL_OutOfMemory();
+    }
+
+    return cursor;
+}
+
+static SDL_Cursor *
+WINRT_CreateDefaultCursor()
+{
+    return WINRT_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW);
+}
+
+static void
+WINRT_FreeCursor(SDL_Cursor * cursor)
+{
+    if (cursor->driverdata) {
+        CoreCursor ^* theCursor = (CoreCursor ^*) cursor->driverdata;
+        *theCursor = nullptr;       // Release the COM reference to the CoreCursor
+        delete theCursor;           // Delete the pointer to the COM reference
+    }
+    SDL_free(cursor);
+}
+
+static int
+WINRT_ShowCursor(SDL_Cursor * cursor)
+{
+    if (cursor) {
+        CoreCursor ^* theCursor = (CoreCursor ^*) cursor->driverdata;
+        CoreWindow::GetForCurrentThread()->PointerCursor = *theCursor;
+    } else {
+        CoreWindow::GetForCurrentThread()->PointerCursor = nullptr;
+    }
+    return 0;
+}
+
+static int
+WINRT_SetRelativeMouseMode(SDL_bool enabled)
+{
+    SDL_WinRTGlobalApp->SetRelativeMouseMode(enabled ? true : false);
+    return 0;
+}
+
+void
+WINRT_InitMouse(_THIS)
+{
+    SDL_Mouse *mouse = SDL_GetMouse();
+
+    /* DLudwig, Dec 3, 2012: Windows RT does not currently provide APIs for
+       the following features, AFAIK:
+        - custom cursors  (multiple system cursors are, however, available)
+        - programmatically moveable cursors
+    */
+
+#if WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP
+    //mouse->CreateCursor = WINRT_CreateCursor;
+    mouse->CreateSystemCursor = WINRT_CreateSystemCursor;
+    mouse->ShowCursor = WINRT_ShowCursor;
+    mouse->FreeCursor = WINRT_FreeCursor;
+    //mouse->WarpMouse = WINRT_WarpMouse;
+    mouse->SetRelativeMouseMode = WINRT_SetRelativeMouseMode;
+
+    SDL_SetDefaultCursor(WINRT_CreateDefaultCursor());
+#endif
+}
+
+void
+WINRT_QuitMouse(_THIS)
+{
+}
+
+#endif /* SDL_VIDEO_DRIVER_WINRT */
+
+/* vi: set ts=4 sw=4 expandtab: */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/video/winrt/SDL_winrtmouse.h	Tue Aug 20 21:22:32 2013 -0400
@@ -0,0 +1,31 @@
+/*
+  Simple DirectMedia Layer
+  Copyright (C) 1997-2012 Sam Lantinga <slouken@libsdl.org>
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+*/
+#include "SDL_config.h"
+
+#ifndef _SDL_windowsmouse_h
+#define _SDL_windowsmouse_h
+
+extern void WINRT_InitMouse(_THIS);
+extern void WINRT_QuitMouse(_THIS);
+
+#endif /* _SDL_windowsmouse_h */
+
+/* vi: set ts=4 sw=4 expandtab: */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/video/winrt/SDL_winrtvideo.cpp	Tue Aug 20 21:22:32 2013 -0400
@@ -0,0 +1,262 @@
+/*
+  Simple DirectMedia Layer
+  Copyright (C) 1997-2012 Sam Lantinga <slouken@libsdl.org>
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+*/
+#include "SDL_config.h"
+
+#if SDL_VIDEO_DRIVER_WINRT
+
+/* WinRT SDL video driver implementation
+
+   Initial work on this was done by David Ludwig (dludwig@pobox.com), and
+   was based off of SDL's "dummy" video driver.
+ */
+
+extern "C" {
+#include "SDL_video.h"
+#include "SDL_mouse.h"
+#include "../SDL_sysvideo.h"
+#include "../SDL_pixels_c.h"
+#include "../../events/SDL_events_c.h"
+#include "../../render/SDL_sysrender.h"
+#include "SDL_syswm.h"
+}
+
+#include "../../core/winrt/SDL_winrtapp.h"
+#include "SDL_winrtvideo.h"
+#include "SDL_winrtevents_c.h"
+#include "SDL_winrtmouse.h"
+
+using namespace Windows::UI::Core;
+
+/* On Windows, windows.h defines CreateWindow */
+#ifdef CreateWindow
+#undef CreateWindow
+#endif
+
+extern SDL_WinRTApp ^ SDL_WinRTGlobalApp;
+
+#define WINRTVID_DRIVER_NAME "winrt"
+
+/* Initialization/Query functions */
+static int WINRT_VideoInit(_THIS);
+static int WINRT_InitModes(_THIS);
+static int WINRT_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode);
+static void WINRT_VideoQuit(_THIS);
+
+/* Window functions */
+static int WINRT_CreateWindow(_THIS, SDL_Window * window);
+static void WINRT_DestroyWindow(_THIS, SDL_Window * window);
+static SDL_bool WINRT_GetWindowWMInfo(_THIS, SDL_Window * window, SDL_SysWMinfo * info);
+
+/* WinRT driver bootstrap functions */
+
+static int
+WINRT_Available(void)
+{
+    return (1);
+}
+
+static void
+WINRT_DeleteDevice(SDL_VideoDevice * device)
+{
+    SDL_WinRTGlobalApp->SetSDLVideoDevice(NULL);
+    SDL_free(device);
+}
+
+static SDL_VideoDevice *
+WINRT_CreateDevice(int devindex)
+{
+    SDL_VideoDevice *device;
+
+    /* Initialize all variables that we clean on shutdown */
+    device = (SDL_VideoDevice *) SDL_calloc(1, sizeof(SDL_VideoDevice));
+    if (!device) {
+        SDL_OutOfMemory();
+        if (device) {
+            SDL_free(device);
+        }
+        return (0);
+    }
+
+    /* Set the function pointers */
+    device->VideoInit = WINRT_VideoInit;
+    device->VideoQuit = WINRT_VideoQuit;
+    device->CreateWindow = WINRT_CreateWindow;
+    device->DestroyWindow = WINRT_DestroyWindow;
+    device->SetDisplayMode = WINRT_SetDisplayMode;
+    device->PumpEvents = WINRT_PumpEvents;
+    //device->CreateWindowFramebuffer = SDL_WINRT_CreateWindowFramebuffer;
+    //device->UpdateWindowFramebuffer = SDL_WINRT_UpdateWindowFramebuffer;
+    //device->DestroyWindowFramebuffer = SDL_WINRT_DestroyWindowFramebuffer;
+    device->GetWindowWMInfo = WINRT_GetWindowWMInfo;
+    device->free = WINRT_DeleteDevice;
+
+    SDL_WinRTGlobalApp->SetSDLVideoDevice(device);
+
+    return device;
+}
+
+VideoBootStrap WINRT_bootstrap = {
+    WINRTVID_DRIVER_NAME, "SDL Windows RT video driver",
+    WINRT_Available, WINRT_CreateDevice
+};
+
+int
+WINRT_VideoInit(_THIS)
+{
+    // TODO, WinRT: consider adding a hack to wait (here) for the app's orientation to finish getting set (before the initial display mode is set up)
+
+    if (WINRT_InitModes(_this) < 0) {
+        return -1;
+    }
+    WINRT_InitMouse(_this);
+
+    return 0;
+}
+
+static int
+WINRT_InitModes(_THIS)
+{
+    SDL_DisplayMode mode = SDL_WinRTGlobalApp->GetMainDisplayMode();
+    if (SDL_AddBasicVideoDisplay(&mode) < 0) {
+        return -1;
+    }
+
+    SDL_AddDisplayMode(&_this->displays[0], &mode);
+    return 0;
+}
+
+static int
+WINRT_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode)
+{
+    return 0;
+}
+
+void
+WINRT_VideoQuit(_THIS)
+{
+    WINRT_QuitMouse(_this);
+}
+
+int
+WINRT_CreateWindow(_THIS, SDL_Window * window)
+{
+    // Make sure that only one window gets created, at least until multimonitor
+    // support is added.
+    if (SDL_WinRTGlobalApp->HasSDLWindowData())
+    {
+        SDL_SetError("WinRT only supports one window");
+        return -1;
+    }
+
+    SDL_WindowData *data = new SDL_WindowData;
+    if (!data) {
+        SDL_OutOfMemory();
+        return -1;
+    }
+    window->driverdata = data;
+    data->sdlWindow = window;
+    data->coreWindow = CoreWindow::GetForCurrentThread();
+
+    /* Make sure the window is considered to be positioned at {0,0},
+       and is considered fullscreen, shown, and the like.
+    */
+    window->x = 0;
+    window->y = 0;
+    window->flags =
+        SDL_WINDOW_FULLSCREEN |
+        SDL_WINDOW_SHOWN |
+        SDL_WINDOW_BORDERLESS |
+        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;
+
+    /* 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. */
+ 
+    /* Make sure the WinRT app's IFramworkView can post events on
+       behalf of SDL:
+    */
+    SDL_WinRTGlobalApp->SetSDLWindowData(data);
+
+    /* All done! */
+    return 0;
+}
+
+void
+WINRT_DestroyWindow(_THIS, SDL_Window * window)
+{
+    SDL_WindowData * data = (SDL_WindowData *) window->driverdata;
+
+    if (SDL_WinRTGlobalApp->HasSDLWindowData() &&
+        SDL_WinRTGlobalApp->GetSDLWindowData()->sdlWindow == window)
+    {
+        SDL_WinRTGlobalApp->SetSDLWindowData(NULL);
+    }
+
+    if (data) {
+        // Delete the internal window data:
+        delete data;
+        data = NULL;
+    }
+}
+
+SDL_bool
+WINRT_GetWindowWMInfo(_THIS, SDL_Window * window, SDL_SysWMinfo * info)
+{
+    SDL_WindowData * data = (SDL_WindowData *) window->driverdata;
+
+    if (info->version.major <= SDL_MAJOR_VERSION) {
+        info->subsystem = SDL_SYSWM_WINDOWSRT;
+        info->info.winrt.window = reinterpret_cast<IUnknown *>(data->coreWindow.Get());
+        return SDL_TRUE;
+    } else {
+        SDL_SetError("Application not compiled with SDL %d.%d\n",
+                     SDL_MAJOR_VERSION, SDL_MINOR_VERSION);
+        return SDL_FALSE;
+    }
+    return SDL_FALSE;
+}
+
+#endif /* SDL_VIDEO_DRIVER_WINRT */
+
+/* vi: set ts=4 sw=4 expandtab: */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/video/winrt/SDL_winrtvideo.h	Tue Aug 20 21:22:32 2013 -0400
@@ -0,0 +1,40 @@
+/*
+  Simple DirectMedia Layer
+  Copyright (C) 1997-2012 Sam Lantinga <slouken@libsdl.org>
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+*/
+#include "SDL_config.h"
+
+#ifndef _SDL_winrtvideo_h
+#define _SDL_winrtvideo_h
+
+extern "C" {
+#include "../SDL_sysvideo.h"
+}
+
+#include <agile.h>
+
+struct SDL_WindowData
+{
+    SDL_Window *sdlWindow;
+    Platform::Agile<Windows::UI::Core::CoreWindow> coreWindow;
+};
+
+#endif /* _SDL_winrtvideo_h */
+
+/* vi: set ts=4 sw=4 expandtab: */