SDL 2.0
SDL_winrtapp_xaml.cpp File Reference
#include <agile.h>
#include <Windows.h>
#include <windows.ui.xaml.media.dxinterop.h>
#include "../../SDL_internal.h"
#include "SDL.h"
#include "../../video/winrt/SDL_winrtevents_c.h"
#include "../../video/winrt/SDL_winrtvideo_cpp.h"
#include "SDL_winrtapp_common.h"
#include "SDL_winrtapp_xaml.h"
+ Include dependency graph for SDL_winrtapp_xaml.cpp:

Go to the source code of this file.

Functions

static void WINRT_OnPointerPressedViaXAML (Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ args)
 
static void WINRT_OnPointerMovedViaXAML (Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ args)
 
static void WINRT_OnPointerReleasedViaXAML (Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ args)
 
static void WINRT_OnPointerWheelChangedViaXAML (Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ args)
 
static void WINRT_OnRenderViaXAML (_In_ Platform::Object^ sender, _In_ Platform::Object^ args)
 
int SDL_WinRTInitXAMLApp (int(*mainFunction)(int, char **), void *backgroundPanelAsIInspectable)
 

Variables

SDL_bool WINRT_XAMLWasEnabled = SDL_FALSE
 
ISwapChainBackgroundPanelNative * WINRT_GlobalSwapChainBackgroundPanelNative = NULL
 
static Windows::Foundation::EventRegistrationToken WINRT_XAMLAppEventToken
 

Function Documentation

◆ SDL_WinRTInitXAMLApp()

int SDL_WinRTInitXAMLApp ( int(*)(int, char **)  mainFunction,
void backgroundPanelAsIInspectable 
)

Definition at line 102 of file SDL_winrtapp_xaml.cpp.

103{
104#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
105 return SDL_SetError("XAML support is not yet available in Windows Phone.");
106#else
107 // Declare C++/CX namespaces:
108 using namespace Platform;
109 using namespace Windows::Foundation;
110 using namespace Windows::UI::Core;
111 using namespace Windows::UI::Xaml;
112 using namespace Windows::UI::Xaml::Controls;
113 using namespace Windows::UI::Xaml::Input;
114 using namespace Windows::UI::Xaml::Media;
115
116 // Make sure we have a valid XAML element (to draw onto):
117 if ( ! backgroundPanelAsIInspectable) {
118 return SDL_SetError("'backgroundPanelAsIInspectable' can't be NULL");
119 }
120
121 Platform::Object ^ backgroundPanel = reinterpret_cast<Object ^>((IInspectable *) backgroundPanelAsIInspectable);
122 SwapChainBackgroundPanel ^swapChainBackgroundPanel = dynamic_cast<SwapChainBackgroundPanel ^>(backgroundPanel);
123 if ( ! swapChainBackgroundPanel) {
124 return SDL_SetError("An unknown or unsupported type of XAML control was specified.");
125 }
126
127 // Setup event handlers:
128 swapChainBackgroundPanel->PointerPressed += ref new PointerEventHandler(WINRT_OnPointerPressedViaXAML);
129 swapChainBackgroundPanel->PointerReleased += ref new PointerEventHandler(WINRT_OnPointerReleasedViaXAML);
130 swapChainBackgroundPanel->PointerWheelChanged += ref new PointerEventHandler(WINRT_OnPointerWheelChangedViaXAML);
131 swapChainBackgroundPanel->PointerMoved += ref new PointerEventHandler(WINRT_OnPointerMovedViaXAML);
132
133 // Setup for rendering:
134 IInspectable *panelInspectable = (IInspectable*) reinterpret_cast<IInspectable*>(swapChainBackgroundPanel);
135 panelInspectable->QueryInterface(__uuidof(ISwapChainBackgroundPanelNative), (void **)&WINRT_GlobalSwapChainBackgroundPanelNative);
136
137 WINRT_XAMLAppEventToken = CompositionTarget::Rendering::add(ref new EventHandler<Object^>(WINRT_OnRenderViaXAML));
138
139 // Make sure the app is ready to call the SDL-centric main() function:
140 WINRT_SDLAppEntryPoint = mainFunction;
142
143 // Make sure video-init knows that we're initializing XAML:
144 SDL_bool oldXAMLWasEnabledValue = WINRT_XAMLWasEnabled;
146
147 // Make sure video modes are detected now, while we still have access to the WinRT
148 // CoreWindow. WinRT will not allow the app's CoreWindow to be accessed via the
149 // SDL/WinRT thread.
151 // SDL_InitSubSystem will, on error, set the SDL error. Let that propogate to
152 // the caller to here:
153 WINRT_XAMLWasEnabled = oldXAMLWasEnabledValue;
154 return -1;
155 }
156
157 // All done, for now.
158 return 0;
159#endif // WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP / else
160}
#define SDL_INIT_VIDEO
Definition: SDL.h:79
#define SDL_SetError
#define SDL_InitSubSystem
#define SDL_SetMainReady
GLenum GLint ref
SDL_bool
Definition: SDL_stdinc.h:162
@ SDL_TRUE
Definition: SDL_stdinc.h:164
int(* WINRT_SDLAppEntryPoint)(int, char **)
ISwapChainBackgroundPanelNative * WINRT_GlobalSwapChainBackgroundPanelNative
static void WINRT_OnPointerPressedViaXAML(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ args)
static void WINRT_OnPointerMovedViaXAML(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ args)
static void WINRT_OnPointerReleasedViaXAML(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ args)
static Windows::Foundation::EventRegistrationToken WINRT_XAMLAppEventToken
static void WINRT_OnPointerWheelChangedViaXAML(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ args)
static void WINRT_OnRenderViaXAML(_In_ Platform::Object^ sender, _In_ Platform::Object^ args)
SDL_bool WINRT_XAMLWasEnabled

References SDL_INIT_VIDEO, SDL_InitSubSystem, SDL_SetError, SDL_SetMainReady, SDL_TRUE, WINRT_GlobalSwapChainBackgroundPanelNative, WINRT_OnPointerMovedViaXAML(), WINRT_OnPointerPressedViaXAML(), WINRT_OnPointerReleasedViaXAML(), WINRT_OnPointerWheelChangedViaXAML(), WINRT_OnRenderViaXAML(), WINRT_SDLAppEntryPoint, WINRT_XAMLAppEventToken, and WINRT_XAMLWasEnabled.

Referenced by SDL_WinRTRunApp().

◆ WINRT_OnPointerMovedViaXAML()

static void WINRT_OnPointerMovedViaXAML ( Platform::Object^  sender,
Windows::UI::Xaml::Input::PointerRoutedEventArgs^  args 
)
static

Definition at line 63 of file SDL_winrtapp_xaml.cpp.

64{
65 WINRT_ProcessPointerMovedEvent(WINRT_GlobalSDLWindow, args->GetCurrentPoint(nullptr));
66}
SDL_Window * WINRT_GlobalSDLWindow

References WINRT_GlobalSDLWindow.

Referenced by SDL_WinRTInitXAMLApp().

◆ WINRT_OnPointerPressedViaXAML()

static void WINRT_OnPointerPressedViaXAML ( Platform::Object^  sender,
Windows::UI::Xaml::Input::PointerRoutedEventArgs^  args 
)
static

Definition at line 57 of file SDL_winrtapp_xaml.cpp.

58{
59 WINRT_ProcessPointerPressedEvent(WINRT_GlobalSDLWindow, args->GetCurrentPoint(nullptr));
60}

References WINRT_GlobalSDLWindow.

Referenced by SDL_WinRTInitXAMLApp().

◆ WINRT_OnPointerReleasedViaXAML()

static void WINRT_OnPointerReleasedViaXAML ( Platform::Object^  sender,
Windows::UI::Xaml::Input::PointerRoutedEventArgs^  args 
)
static

Definition at line 69 of file SDL_winrtapp_xaml.cpp.

70{
71 WINRT_ProcessPointerReleasedEvent(WINRT_GlobalSDLWindow, args->GetCurrentPoint(nullptr));
72}

References WINRT_GlobalSDLWindow.

Referenced by SDL_WinRTInitXAMLApp().

◆ WINRT_OnPointerWheelChangedViaXAML()

static void WINRT_OnPointerWheelChangedViaXAML ( Platform::Object^  sender,
Windows::UI::Xaml::Input::PointerRoutedEventArgs^  args 
)
static

Definition at line 75 of file SDL_winrtapp_xaml.cpp.

76{
77 WINRT_ProcessPointerWheelChangedEvent(WINRT_GlobalSDLWindow, args->GetCurrentPoint(nullptr));
78}

References WINRT_GlobalSDLWindow.

Referenced by SDL_WinRTInitXAMLApp().

◆ WINRT_OnRenderViaXAML()

static void WINRT_OnRenderViaXAML ( _In_ Platform::Object^  sender,
_In_ Platform::Object^  args 
)
static

Definition at line 89 of file SDL_winrtapp_xaml.cpp.

90{
91 WINRT_CycleXAMLThread();
92}

Referenced by SDL_WinRTInitXAMLApp().

Variable Documentation

◆ WINRT_GlobalSwapChainBackgroundPanelNative

ISwapChainBackgroundPanelNative* WINRT_GlobalSwapChainBackgroundPanelNative = NULL

Definition at line 46 of file SDL_winrtapp_xaml.cpp.

Referenced by SDL_WinRTInitXAMLApp().

◆ WINRT_XAMLAppEventToken

Windows::Foundation::EventRegistrationToken WINRT_XAMLAppEventToken
static

Definition at line 47 of file SDL_winrtapp_xaml.cpp.

Referenced by SDL_WinRTInitXAMLApp().

◆ WINRT_XAMLWasEnabled

SDL_bool WINRT_XAMLWasEnabled = SDL_FALSE

Definition at line 42 of file SDL_winrtapp_xaml.cpp.

Referenced by SDL_WinRTInitXAMLApp().