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

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;
// Make sure video-init knows that we're initializing XAML:
SDL_bool oldXAMLWasEnabledValue = WINRT_XAMLWasEnabled;
// 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.
// 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
}
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));
}
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));
}
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));
}
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));
}
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().