From 3e83fd784ca47964bab95c125c239ac21c08d07d Mon Sep 17 00:00:00 2001 From: David Ludwig Date: Tue, 27 Aug 2013 11:39:44 -0400 Subject: [PATCH] WinRT: misc code cleanups --- VisualC-WinRT/SDL/SDL_VS2012-WinRT.vcxproj | 1 - .../SDL/SDL_VS2012-WinRT.vcxproj.filters | 3 - src/core/winrt/SDL_winrtapp.cpp | 88 +++++++++---------- src/core/winrt/SDL_winrtapp.h | 9 +- src/video/winrt/SDL_winrtevents.cpp | 12 ++- src/video/winrt/SDL_winrtevents_c.h | 5 +- src/video/winrt/SDL_winrtkeyboard.cpp | 7 +- src/video/winrt/SDL_winrtvideo.cpp | 41 ++++----- src/video/winrt/SDL_winrtvideo.h | 40 --------- 9 files changed, 82 insertions(+), 124 deletions(-) delete mode 100644 src/video/winrt/SDL_winrtvideo.h diff --git a/VisualC-WinRT/SDL/SDL_VS2012-WinRT.vcxproj b/VisualC-WinRT/SDL/SDL_VS2012-WinRT.vcxproj index 200b6d58b..1e8291494 100644 --- a/VisualC-WinRT/SDL/SDL_VS2012-WinRT.vcxproj +++ b/VisualC-WinRT/SDL/SDL_VS2012-WinRT.vcxproj @@ -286,7 +286,6 @@ - diff --git a/VisualC-WinRT/SDL/SDL_VS2012-WinRT.vcxproj.filters b/VisualC-WinRT/SDL/SDL_VS2012-WinRT.vcxproj.filters index 9a0961341..d28d017d4 100644 --- a/VisualC-WinRT/SDL/SDL_VS2012-WinRT.vcxproj.filters +++ b/VisualC-WinRT/SDL/SDL_VS2012-WinRT.vcxproj.filters @@ -593,9 +593,6 @@ Source Files - - Source Files - Source Files diff --git a/src/core/winrt/SDL_winrtapp.cpp b/src/core/winrt/SDL_winrtapp.cpp index 2ce66b5d1..7622314fd 100644 --- a/src/core/winrt/SDL_winrtapp.cpp +++ b/src/core/winrt/SDL_winrtapp.cpp @@ -1,10 +1,26 @@  +/* Standard C++11 includes */ #include #include #include +using namespace std; + +/* Windows includes */ #include "ppltasks.h" +using namespace concurrency; +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; + +/* SDL includes */ extern "C" { #include "SDL_assert.h" #include "SDL_events.h" @@ -21,20 +37,8 @@ extern "C" { } #include "../../video/winrt/SDL_winrtevents_c.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. @@ -140,7 +144,7 @@ static void WINRT_SetDisplayOrientationsPreference(void *userdata, const char *n SDL_WinRTApp::SDL_WinRTApp() : m_windowClosed(false), m_windowVisible(true), - m_sdlWindowData(NULL), + m_sdlWindow(NULL), m_sdlVideoDevice(NULL) { } @@ -279,16 +283,16 @@ void SDL_WinRTApp::Uninitialize() void SDL_WinRTApp::OnWindowSizeChanged(CoreWindow^ sender, WindowSizeChangedEventArgs^ args) { #if LOG_WINDOW_EVENTS==1 - SDL_Log("%s, size={%f,%f}, current orientation=%d, native orientation=%d, auto rot. pref=%d, m_sdlWindowData?=%s\n", + SDL_Log("%s, size={%f,%f}, current orientation=%d, native orientation=%d, auto rot. pref=%d, m_sdlWindow?=%s\n", __FUNCTION__, args->Size.Width, args->Size.Height, (int)DisplayProperties::CurrentOrientation, (int)DisplayProperties::NativeOrientation, (int)DisplayProperties::AutoRotationPreferences, - (m_sdlWindowData ? "yes" : "no")); + (m_sdlWindow ? "yes" : "no")); #endif - if (m_sdlWindowData) { + if (m_sdlWindow) { // Make the new window size be the one true fullscreen mode. // This change was initially done, in part, to allow the Direct3D 11.1 // renderer to receive window-resize events as a device rotates. @@ -309,7 +313,7 @@ void SDL_WinRTApp::OnWindowSizeChanged(CoreWindow^ sender, WindowSizeChangedEven const int windowWidth = (int) ceil(args->Size.Width); const int windowHeight = (int) ceil(args->Size.Height); SDL_SendWindowEvent( - m_sdlWindowData->sdlWindow, + m_sdlWindow, SDL_WINDOWEVENT_RESIZED, windowWidth, windowHeight); @@ -319,20 +323,20 @@ void SDL_WinRTApp::OnWindowSizeChanged(CoreWindow^ sender, WindowSizeChangedEven void SDL_WinRTApp::OnVisibilityChanged(CoreWindow^ sender, VisibilityChangedEventArgs^ args) { #if LOG_WINDOW_EVENTS==1 - SDL_Log("%s, visible?=%s, m_sdlWindowData?=%s\n", + SDL_Log("%s, visible?=%s, m_sdlWindow?=%s\n", __FUNCTION__, (args->Visible ? "yes" : "no"), - (m_sdlWindowData ? "yes" : "no")); + (m_sdlWindow ? "yes" : "no")); #endif m_windowVisible = args->Visible; - if (m_sdlWindowData) { - SDL_bool wasSDLWindowSurfaceValid = m_sdlWindowData->sdlWindow->surface_valid; + if (m_sdlWindow) { + SDL_bool wasSDLWindowSurfaceValid = m_sdlWindow->surface_valid; if (args->Visible) { - SDL_SendWindowEvent(m_sdlWindowData->sdlWindow, SDL_WINDOWEVENT_SHOWN, 0, 0); + SDL_SendWindowEvent(m_sdlWindow, SDL_WINDOWEVENT_SHOWN, 0, 0); } else { - SDL_SendWindowEvent(m_sdlWindowData->sdlWindow, SDL_WINDOWEVENT_HIDDEN, 0, 0); + SDL_SendWindowEvent(m_sdlWindow, SDL_WINDOWEVENT_HIDDEN, 0, 0); } // HACK: Prevent SDL's window-hide handling code, which currently @@ -341,7 +345,7 @@ void SDL_WinRTApp::OnVisibilityChanged(CoreWindow^ sender, VisibilityChangedEven // // A better solution to this probably involves figuring out if the // fake window resize can be prevented. - m_sdlWindowData->sdlWindow->surface_valid = wasSDLWindowSurfaceValid; + m_sdlWindow->surface_valid = wasSDLWindowSurfaceValid; } } @@ -355,32 +359,27 @@ void SDL_WinRTApp::OnWindowClosed(CoreWindow^ sender, CoreWindowEventArgs^ args) void SDL_WinRTApp::OnPointerPressed(CoreWindow^ sender, PointerEventArgs^ args) { - SDL_Window * window = (m_sdlWindowData ? m_sdlWindowData->sdlWindow : nullptr); - WINRT_ProcessPointerPressedEvent(window, args); + WINRT_ProcessPointerPressedEvent(m_sdlWindow, args); } void SDL_WinRTApp::OnPointerReleased(CoreWindow^ sender, PointerEventArgs^ args) { - SDL_Window * window = (m_sdlWindowData ? m_sdlWindowData->sdlWindow : nullptr); - WINRT_ProcessPointerReleasedEvent(window, args); + WINRT_ProcessPointerReleasedEvent(m_sdlWindow, args); } void SDL_WinRTApp::OnPointerWheelChanged(CoreWindow^ sender, PointerEventArgs^ args) { - SDL_Window * window = (m_sdlWindowData ? m_sdlWindowData->sdlWindow : nullptr); - WINRT_ProcessPointerWheelChangedEvent(window, args); + WINRT_ProcessPointerWheelChangedEvent(m_sdlWindow, args); } void SDL_WinRTApp::OnMouseMoved(MouseDevice^ mouseDevice, MouseEventArgs^ args) { - SDL_Window * window = (m_sdlWindowData ? m_sdlWindowData->sdlWindow : nullptr); - WINRT_ProcessMouseMovedEvent(window, args); + WINRT_ProcessMouseMovedEvent(m_sdlWindow, args); } void SDL_WinRTApp::OnPointerMoved(CoreWindow^ sender, PointerEventArgs^ args) { - SDL_Window * window = (m_sdlWindowData ? m_sdlWindowData->sdlWindow : nullptr); - WINRT_ProcessPointerMovedEvent(window, args); + WINRT_ProcessPointerMovedEvent(m_sdlWindow, args); } void SDL_WinRTApp::OnKeyDown(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::KeyEventArgs^ args) @@ -439,9 +438,9 @@ void SDL_WinRTApp::OnSuspending(Platform::Object^ sender, SuspendingEventArgs^ a // first via a callback passed to SDL_AddEventWatch, and second via // SDL's event queue, the event will be sent to SDL, then immediately // removed from the queue. - if (m_sdlWindowData) + if (m_sdlWindow) { - 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_SendWindowEvent(m_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(); @@ -453,9 +452,9 @@ void SDL_WinRTApp::OnResuming(Platform::Object^ sender, Platform::Object^ args) // Restore any data or state that was unloaded on suspend. By default, data // and state are persisted when resuming from suspend. Note that this event // does not occur if the app was previously terminated. - if (m_sdlWindowData) + if (m_sdlWindow) { - 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) + SDL_SendWindowEvent(m_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. @@ -488,19 +487,14 @@ SDL_DisplayMode SDL_WinRTApp::CalcCurrentDisplayMode() return mode; } -const SDL_WindowData * SDL_WinRTApp::GetSDLWindowData() const +SDL_Window * SDL_WinRTApp::GetSDLWindow() { - return m_sdlWindowData; + return m_sdlWindow; } -bool SDL_WinRTApp::HasSDLWindowData() const +void SDL_WinRTApp::SetSDLWindow(SDL_Window * window) { - return (m_sdlWindowData != NULL); -} - -void SDL_WinRTApp::SetSDLWindowData(const SDL_WindowData * windowData) -{ - m_sdlWindowData = windowData; + m_sdlWindow = window; } void SDL_WinRTApp::SetSDLVideoDevice(const SDL_VideoDevice * videoDevice) diff --git a/src/core/winrt/SDL_winrtapp.h b/src/core/winrt/SDL_winrtapp.h index db19e8c6a..ada19634c 100644 --- a/src/core/winrt/SDL_winrtapp.h +++ b/src/core/winrt/SDL_winrtapp.h @@ -1,7 +1,5 @@ #pragma once -struct SDL_WindowData; - ref class SDL_WinRTApp sealed : public Windows::ApplicationModel::Core::IFrameworkView { public: @@ -18,9 +16,8 @@ internal: // SDL-specific methods SDL_DisplayMode CalcCurrentDisplayMode(); void PumpEvents(); - const SDL_WindowData * GetSDLWindowData() const; - bool HasSDLWindowData() const; - void SetSDLWindowData(const SDL_WindowData * windowData); + SDL_Window * GetSDLWindow(); + void SetSDLWindow(SDL_Window * window); void SetSDLVideoDevice(const SDL_VideoDevice * videoDevice); Windows::Foundation::Point TransformCursor(Windows::Foundation::Point rawPosition); @@ -45,6 +42,6 @@ protected: private: bool m_windowClosed; bool m_windowVisible; - const SDL_WindowData* m_sdlWindowData; + SDL_Window* m_sdlWindow; const SDL_VideoDevice* m_sdlVideoDevice; }; diff --git a/src/video/winrt/SDL_winrtevents.cpp b/src/video/winrt/SDL_winrtevents.cpp index 8438ac279..ef1cb690e 100644 --- a/src/video/winrt/SDL_winrtevents.cpp +++ b/src/video/winrt/SDL_winrtevents.cpp @@ -22,14 +22,20 @@ #if SDL_VIDEO_DRIVER_WINRT -#include "../../events/SDL_events_c.h" - -#include "SDL_winrtvideo.h" +/* SDL includes */ #include "SDL_winrtevents_c.h" #include "../../core/winrt/SDL_winrtapp.h" +extern "C" { +#include "../SDL_sysvideo.h" +#include "../../events/SDL_events_c.h" +} + extern SDL_WinRTApp ^ SDL_WinRTGlobalApp; + +/* General event-management function(s) */ + void WINRT_PumpEvents(_THIS) { diff --git a/src/video/winrt/SDL_winrtevents_c.h b/src/video/winrt/SDL_winrtevents_c.h index f4b179e62..68e746a72 100644 --- a/src/video/winrt/SDL_winrtevents_c.h +++ b/src/video/winrt/SDL_winrtevents_c.h @@ -19,7 +19,10 @@ 3. This notice may not be removed or altered from any source distribution. */ #include "SDL_config.h" -#include "SDL_winrtvideo.h" + +extern "C" { +#include "../SDL_sysvideo.h" +} /* * Internal-use, C-style functions: diff --git a/src/video/winrt/SDL_winrtkeyboard.cpp b/src/video/winrt/SDL_winrtkeyboard.cpp index 52b8c2a39..a68b6d50c 100644 --- a/src/video/winrt/SDL_winrtkeyboard.cpp +++ b/src/video/winrt/SDL_winrtkeyboard.cpp @@ -22,15 +22,16 @@ #if SDL_VIDEO_DRIVER_WINRT -// Standard C++11 headers: +/* Standard C++11 includes */ #include -// Windows-specific headers: +/* Windows-specific includes */ #include +#include -// SDL-specific headers: +/* SDL-specific includes */ #include #include "SDL_winrtevents_c.h" diff --git a/src/video/winrt/SDL_winrtvideo.cpp b/src/video/winrt/SDL_winrtvideo.cpp index e87e056c5..03ff7730e 100644 --- a/src/video/winrt/SDL_winrtvideo.cpp +++ b/src/video/winrt/SDL_winrtvideo.cpp @@ -28,6 +28,12 @@ was based off of SDL's "dummy" video driver. */ +/* Windows includes */ +#include +using namespace Windows::UI::Core; + + +/* SDL includes */ extern "C" { #include "SDL_video.h" #include "SDL_mouse.h" @@ -39,20 +45,11 @@ extern "C" { } #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); @@ -60,11 +57,21 @@ 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); + +/* Internal window data */ +struct SDL_WindowData +{ + SDL_Window *sdlWindow; + Platform::Agile coreWindow; +}; + + /* WinRT driver bootstrap functions */ static int @@ -102,17 +109,14 @@ WINRT_CreateDevice(int devindex) 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; } +#define WINRTVID_DRIVER_NAME "winrt" VideoBootStrap WINRT_bootstrap = { WINRTVID_DRIVER_NAME, "SDL Windows RT video driver", WINRT_Available, WINRT_CreateDevice @@ -160,8 +164,7 @@ WINRT_CreateWindow(_THIS, SDL_Window * window) { // Make sure that only one window gets created, at least until multimonitor // support is added. - if (SDL_WinRTGlobalApp->HasSDLWindowData()) - { + if (SDL_WinRTGlobalApp->GetSDLWindow() != NULL) { SDL_SetError("WinRT only supports one window"); return -1; } @@ -199,7 +202,7 @@ WINRT_CreateWindow(_THIS, SDL_Window * window) /* Make sure the WinRT app's IFramworkView can post events on behalf of SDL: */ - SDL_WinRTGlobalApp->SetSDLWindowData(data); + SDL_WinRTGlobalApp->SetSDLWindow(window); /* All done! */ return 0; @@ -210,10 +213,8 @@ 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 (SDL_WinRTGlobalApp->GetSDLWindow() == window) { + SDL_WinRTGlobalApp->SetSDLWindow(NULL); } if (data) { diff --git a/src/video/winrt/SDL_winrtvideo.h b/src/video/winrt/SDL_winrtvideo.h deleted file mode 100644 index 4418754c2..000000000 --- a/src/video/winrt/SDL_winrtvideo.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2012 Sam Lantinga - - 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 - -struct SDL_WindowData -{ - SDL_Window *sdlWindow; - Platform::Agile coreWindow; -}; - -#endif /* _SDL_winrtvideo_h */ - -/* vi: set ts=4 sw=4 expandtab: */