mirror of
https://github.com/Ryujinx/SDL.git
synced 2024-12-25 05:45:29 +00:00
WinRT: added initial SDL_TEXTINPUT support
Further support regarding IME and on-screen keyboards is pending, some of which might not be 100% compatible with other platforms, given WinRT platform restrictions. An MSDN article at http://msdn.microsoft.com/en-us/library/windows/apps/hh465404.aspx indicates that on-screen keyboard display requires that the user first tap on a Windows/XAML text control. This change adds basic SDL_TEXTINPUT support, with input coming from hardware keyboards, at a minimum, and without the need for XAML integration (which is still pending integration into SDL, by and large).
This commit is contained in:
parent
5bdc9913ac
commit
6a5b3bb425
|
@ -365,6 +365,9 @@ void SDL_WinRTApp::SetWindow(CoreWindow^ window)
|
||||||
window->KeyUp +=
|
window->KeyUp +=
|
||||||
ref new TypedEventHandler<CoreWindow^, KeyEventArgs^>(this, &SDL_WinRTApp::OnKeyUp);
|
ref new TypedEventHandler<CoreWindow^, KeyEventArgs^>(this, &SDL_WinRTApp::OnKeyUp);
|
||||||
|
|
||||||
|
window->CharacterReceived +=
|
||||||
|
ref new TypedEventHandler<CoreWindow^, CharacterReceivedEventArgs^>(this, &SDL_WinRTApp::OnCharacterReceived);
|
||||||
|
|
||||||
#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
|
#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
|
||||||
HardwareButtons::BackPressed +=
|
HardwareButtons::BackPressed +=
|
||||||
ref new EventHandler<BackPressedEventArgs^>(this, &SDL_WinRTApp::OnBackButtonPressed);
|
ref new EventHandler<BackPressedEventArgs^>(this, &SDL_WinRTApp::OnBackButtonPressed);
|
||||||
|
@ -703,6 +706,11 @@ void SDL_WinRTApp::OnKeyUp(Windows::UI::Core::CoreWindow^ sender, Windows::UI::C
|
||||||
WINRT_ProcessKeyUpEvent(args);
|
WINRT_ProcessKeyUpEvent(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SDL_WinRTApp::OnCharacterReceived(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::CharacterReceivedEventArgs^ args)
|
||||||
|
{
|
||||||
|
WINRT_ProcessCharacterReceivedEvent(args);
|
||||||
|
}
|
||||||
|
|
||||||
#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
|
#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
|
||||||
void SDL_WinRTApp::OnBackButtonPressed(Platform::Object^ sender, Windows::Phone::UI::Input::BackPressedEventArgs^ args)
|
void SDL_WinRTApp::OnBackButtonPressed(Platform::Object^ sender, Windows::Phone::UI::Input::BackPressedEventArgs^ args)
|
||||||
{
|
{
|
||||||
|
|
|
@ -69,6 +69,7 @@ protected:
|
||||||
void OnMouseMoved(Windows::Devices::Input::MouseDevice^ mouseDevice, Windows::Devices::Input::MouseEventArgs^ 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 OnKeyDown(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::KeyEventArgs^ args);
|
||||||
void OnKeyUp(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::KeyEventArgs^ args);
|
void OnKeyUp(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::KeyEventArgs^ args);
|
||||||
|
void OnCharacterReceived(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::CharacterReceivedEventArgs^ args);
|
||||||
|
|
||||||
#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
|
#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
|
||||||
void OnBackButtonPressed(Platform::Object^ sender, Windows::Phone::UI::Input::BackPressedEventArgs^ args);
|
void OnBackButtonPressed(Platform::Object^ sender, Windows::Phone::UI::Input::BackPressedEventArgs^ args);
|
||||||
|
|
|
@ -63,6 +63,7 @@ extern void WINRT_ProcessMouseMovedEvent(SDL_Window * window, Windows::Devices::
|
||||||
/* Keyboard */
|
/* Keyboard */
|
||||||
extern void WINRT_ProcessKeyDownEvent(Windows::UI::Core::KeyEventArgs ^args);
|
extern void WINRT_ProcessKeyDownEvent(Windows::UI::Core::KeyEventArgs ^args);
|
||||||
extern void WINRT_ProcessKeyUpEvent(Windows::UI::Core::KeyEventArgs ^args);
|
extern void WINRT_ProcessKeyUpEvent(Windows::UI::Core::KeyEventArgs ^args);
|
||||||
|
extern void WINRT_ProcessCharacterReceivedEvent(Windows::UI::Core::CharacterReceivedEventArgs ^args);
|
||||||
|
|
||||||
/* XAML Thread Management */
|
/* XAML Thread Management */
|
||||||
extern void WINRT_CycleXAMLThread();
|
extern void WINRT_CycleXAMLThread();
|
||||||
|
|
|
@ -365,4 +365,22 @@ WINRT_ProcessKeyUpEvent(Windows::UI::Core::KeyEventArgs ^args)
|
||||||
SDL_SendKeyboardKey(SDL_RELEASED, sdlScancode);
|
SDL_SendKeyboardKey(SDL_RELEASED, sdlScancode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
WINRT_ProcessCharacterReceivedEvent(Windows::UI::Core::CharacterReceivedEventArgs ^args)
|
||||||
|
{
|
||||||
|
wchar_t src_ucs2[2];
|
||||||
|
char dest_utf8[16];
|
||||||
|
int result;
|
||||||
|
|
||||||
|
/* Setup src */
|
||||||
|
src_ucs2[0] = args->KeyCode;
|
||||||
|
src_ucs2[1] = L'\0';
|
||||||
|
|
||||||
|
/* Convert the text, then send an SDL_TEXTINPUT event. */
|
||||||
|
result = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)&src_ucs2, -1, (LPSTR)dest_utf8, sizeof(dest_utf8), NULL, NULL);
|
||||||
|
if (result > 0) {
|
||||||
|
SDL_SendKeyboardText(dest_utf8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endif // SDL_VIDEO_DRIVER_WINRT
|
#endif // SDL_VIDEO_DRIVER_WINRT
|
||||||
|
|
Loading…
Reference in a new issue