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

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

Definition at line 102 of file SDL_winrtapp_xaml.cpp.

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().

{
#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
return SDL_SetError("XAML support is not yet available in Windows Phone.");
#else
// Declare C++/CX namespaces:
using namespace Platform;
using namespace Windows::Foundation;
using namespace Windows::UI::Core;
using namespace Windows::UI::Xaml;
using namespace Windows::UI::Xaml::Controls;
using namespace Windows::UI::Xaml::Input;
using namespace Windows::UI::Xaml::Media;
// Make sure we have a valid XAML element (to draw onto):
if ( ! backgroundPanelAsIInspectable) {
return SDL_SetError("'backgroundPanelAsIInspectable' can't be NULL");
}
Platform::Object ^ backgroundPanel = reinterpret_cast<Object ^>((IInspectable *) backgroundPanelAsIInspectable);
SwapChainBackgroundPanel ^swapChainBackgroundPanel = dynamic_cast<SwapChainBackgroundPanel ^>(backgroundPanel);
if ( ! swapChainBackgroundPanel) {
return SDL_SetError("An unknown or unsupported type of XAML control was specified.");
}
// Setup event handlers:
swapChainBackgroundPanel->PointerPressed += ref new PointerEventHandler(WINRT_OnPointerPressedViaXAML);
swapChainBackgroundPanel->PointerReleased += ref new PointerEventHandler(WINRT_OnPointerReleasedViaXAML);
swapChainBackgroundPanel->PointerWheelChanged += ref new PointerEventHandler(WINRT_OnPointerWheelChangedViaXAML);
swapChainBackgroundPanel->PointerMoved += ref new PointerEventHandler(WINRT_OnPointerMovedViaXAML);
// Setup for rendering:
IInspectable *panelInspectable = (IInspectable*) reinterpret_cast<IInspectable*>(swapChainBackgroundPanel);
panelInspectable->QueryInterface(__uuidof(ISwapChainBackgroundPanelNative), (void **)&WINRT_GlobalSwapChainBackgroundPanelNative);
WINRT_XAMLAppEventToken = CompositionTarget::Rendering::add(ref new EventHandler<Object^>(WINRT_OnRenderViaXAML));
// Make sure the app is ready to call the SDL-centric main() function:
WINRT_SDLAppEntryPoint = mainFunction;
SDL_SetMainReady();
// Make sure video-init knows that we're initializing XAML:
SDL_bool oldXAMLWasEnabledValue = WINRT_XAMLWasEnabled;
WINRT_XAMLWasEnabled = SDL_TRUE;
// Make sure video modes are detected now, while we still have access to the WinRT
// CoreWindow. WinRT will not allow the app's CoreWindow to be accessed via the
// SDL/WinRT thread.
if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0) {
// SDL_InitSubSystem will, on error, set the SDL error. Let that propogate to
// the caller to here:
WINRT_XAMLWasEnabled = oldXAMLWasEnabledValue;
return -1;
}
// All done, for now.
return 0;
#endif // WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP / else
}
SDL_SetMainReady
#define SDL_SetMainReady
Definition: SDL_dynapi_overrides.h:248
WINRT_OnPointerReleasedViaXAML
static void WINRT_OnPointerReleasedViaXAML(Platform::Object^sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^args)
Definition: SDL_winrtapp_xaml.cpp:69
SDL_InitSubSystem
#define SDL_InitSubSystem
Definition: SDL_dynapi_overrides.h:61
Foundation
SDL_bool
SDL_bool
Definition: SDL_stdinc.h:126
WINRT_OnPointerPressedViaXAML
static void WINRT_OnPointerPressedViaXAML(Platform::Object^sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^args)
Definition: SDL_winrtapp_xaml.cpp:57
WINRT_XAMLAppEventToken
static Windows::Foundation::EventRegistrationToken WINRT_XAMLAppEventToken
Definition: SDL_winrtapp_xaml.cpp:47
WINRT_OnPointerMovedViaXAML
static void WINRT_OnPointerMovedViaXAML(Platform::Object^sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^args)
Definition: SDL_winrtapp_xaml.cpp:63
SDL_TRUE
Definition: SDL_stdinc.h:129
WINRT_OnRenderViaXAML
static void WINRT_OnRenderViaXAML(_In_ Platform::Object^sender, _In_ Platform::Object^args)
Definition: SDL_winrtapp_xaml.cpp:89
WINRT_GlobalSwapChainBackgroundPanelNative
ISwapChainBackgroundPanelNative * WINRT_GlobalSwapChainBackgroundPanelNative
Definition: SDL_winrtapp_xaml.cpp:46
SDL_SetError
#define SDL_SetError
Definition: SDL_dynapi_overrides.h:36
WINRT_XAMLWasEnabled
SDL_bool WINRT_XAMLWasEnabled
Definition: SDL_winrtapp_xaml.cpp:42
WINRT_SDLAppEntryPoint
int(* WINRT_SDLAppEntryPoint)(int, char **)
Definition: SDL_winrtapp_common.cpp:27
WINRT_OnPointerWheelChangedViaXAML
static void WINRT_OnPointerWheelChangedViaXAML(Platform::Object^sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^args)
Definition: SDL_winrtapp_xaml.cpp:75
ref
GLenum GLint ref
Definition: SDL_opengl_glext.h:657
SDL_INIT_VIDEO
#define SDL_INIT_VIDEO
Definition: SDL.h:77
Core

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

static

Definition at line 63 of file SDL_winrtapp_xaml.cpp.

References WINRT_GlobalSDLWindow.

Referenced by SDL_WinRTInitXAMLApp().

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

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

static

Definition at line 57 of file SDL_winrtapp_xaml.cpp.

References WINRT_GlobalSDLWindow.

Referenced by SDL_WinRTInitXAMLApp().

{
WINRT_ProcessPointerPressedEvent(WINRT_GlobalSDLWindow, args->GetCurrentPoint(nullptr));
}
WINRT_GlobalSDLWindow
SDL_Window * WINRT_GlobalSDLWindow

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

static

Definition at line 69 of file SDL_winrtapp_xaml.cpp.

References WINRT_GlobalSDLWindow.

Referenced by SDL_WinRTInitXAMLApp().

{
WINRT_ProcessPointerReleasedEvent(WINRT_GlobalSDLWindow, args->GetCurrentPoint(nullptr));
}
WINRT_GlobalSDLWindow
SDL_Window * WINRT_GlobalSDLWindow

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

static

Definition at line 75 of file SDL_winrtapp_xaml.cpp.

References WINRT_GlobalSDLWindow.

Referenced by SDL_WinRTInitXAMLApp().

{
WINRT_ProcessPointerWheelChangedEvent(WINRT_GlobalSDLWindow, args->GetCurrentPoint(nullptr));
}
WINRT_GlobalSDLWindow
SDL_Window * WINRT_GlobalSDLWindow

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

static

Definition at line 89 of file SDL_winrtapp_xaml.cpp.

Referenced by SDL_WinRTInitXAMLApp().

{
WINRT_CycleXAMLThread();
}

## Variable Documentation

ISwapChainBackgroundPanelNative* WINRT_GlobalSwapChainBackgroundPanelNative = NULL

Definition at line 46 of file SDL_winrtapp_xaml.cpp.

Referenced by SDL_WinRTInitXAMLApp().

Windows::Foundation::EventRegistrationToken WINRT_XAMLAppEventToken

static

Definition at line 47 of file SDL_winrtapp_xaml.cpp.

Referenced by SDL_WinRTInitXAMLApp().

SDL_bool WINRT_XAMLWasEnabled = SDL_FALSE

Definition at line 42 of file SDL_winrtapp_xaml.cpp.

Referenced by SDL_WinRTInitXAMLApp().