WinRT: allow on-screen keyboard to be shown via SDL APIs, Win10/UWP only
parent
6a9a8b682c
commit
52fec6aff0
|
@ -67,6 +67,13 @@ 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);
|
extern void WINRT_ProcessCharacterReceivedEvent(Windows::UI::Core::CharacterReceivedEventArgs ^args);
|
||||||
|
|
||||||
|
#if NTDDI_VERSION >= NTDDI_WIN10
|
||||||
|
extern SDL_bool WINRT_HasScreenKeyboardSupport(_THIS);
|
||||||
|
extern void WINRT_ShowScreenKeyboard(_THIS, SDL_Window *window);
|
||||||
|
extern void WINRT_HideScreenKeyboard(_THIS, SDL_Window *window);
|
||||||
|
extern SDL_bool WINRT_IsScreenKeyboardShown(_THIS, SDL_Window *window);
|
||||||
|
#endif // NTDDI_VERSION >= ...
|
||||||
|
|
||||||
/* XAML Thread Management */
|
/* XAML Thread Management */
|
||||||
extern void WINRT_CycleXAMLThread();
|
extern void WINRT_CycleXAMLThread();
|
||||||
|
|
||||||
|
|
|
@ -383,4 +383,48 @@ WINRT_ProcessCharacterReceivedEvent(Windows::UI::Core::CharacterReceivedEventArg
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if NTDDI_VERSION >= NTDDI_WIN10
|
||||||
|
|
||||||
|
SDL_bool WINRT_HasScreenKeyboardSupport(_THIS)
|
||||||
|
{
|
||||||
|
return SDL_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void WINRT_ShowScreenKeyboard(_THIS, SDL_Window *window)
|
||||||
|
{
|
||||||
|
using namespace Windows::UI::ViewManagement;
|
||||||
|
InputPane ^ inputPane = InputPane::GetForCurrentView();
|
||||||
|
if (inputPane) {
|
||||||
|
inputPane->TryShow();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void WINRT_HideScreenKeyboard(_THIS, SDL_Window *window)
|
||||||
|
{
|
||||||
|
using namespace Windows::UI::ViewManagement;
|
||||||
|
InputPane ^ inputPane = InputPane::GetForCurrentView();
|
||||||
|
if (inputPane) {
|
||||||
|
inputPane->TryHide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_bool WINRT_IsScreenKeyboardShown(_THIS, SDL_Window *window)
|
||||||
|
{
|
||||||
|
using namespace Windows::UI::ViewManagement;
|
||||||
|
InputPane ^ inputPane = InputPane::GetForCurrentView();
|
||||||
|
if (inputPane) {
|
||||||
|
// dludwig@pobox.com: checking inputPane->Visible doesn't seem to detect visibility,
|
||||||
|
// at least not on the Windows Phone 10.0.10240.0 emulator. Checking
|
||||||
|
// the size of inputPane->OccludedRect, however, does seem to work.
|
||||||
|
Windows::Foundation::Rect rect = inputPane->OccludedRect;
|
||||||
|
if (rect.Width > 0 && rect.Height > 0) {
|
||||||
|
return SDL_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return SDL_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // NTDDI_VERSION >= ...
|
||||||
|
|
||||||
#endif // SDL_VIDEO_DRIVER_WINRT
|
#endif // SDL_VIDEO_DRIVER_WINRT
|
||||||
|
|
|
@ -140,6 +140,14 @@ WINRT_CreateDevice(int devindex)
|
||||||
device->SetDisplayMode = WINRT_SetDisplayMode;
|
device->SetDisplayMode = WINRT_SetDisplayMode;
|
||||||
device->PumpEvents = WINRT_PumpEvents;
|
device->PumpEvents = WINRT_PumpEvents;
|
||||||
device->GetWindowWMInfo = WINRT_GetWindowWMInfo;
|
device->GetWindowWMInfo = WINRT_GetWindowWMInfo;
|
||||||
|
|
||||||
|
#if NTDDI_VERSION >= NTDDI_WIN10
|
||||||
|
device->HasScreenKeyboardSupport = WINRT_HasScreenKeyboardSupport;
|
||||||
|
device->ShowScreenKeyboard = WINRT_ShowScreenKeyboard;
|
||||||
|
device->HideScreenKeyboard = WINRT_HideScreenKeyboard;
|
||||||
|
device->IsScreenKeyboardShown = WINRT_IsScreenKeyboardShown;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef SDL_VIDEO_OPENGL_EGL
|
#ifdef SDL_VIDEO_OPENGL_EGL
|
||||||
device->GL_LoadLibrary = WINRT_GLES_LoadLibrary;
|
device->GL_LoadLibrary = WINRT_GLES_LoadLibrary;
|
||||||
device->GL_GetProcAddress = WINRT_GLES_GetProcAddress;
|
device->GL_GetProcAddress = WINRT_GLES_GetProcAddress;
|
||||||
|
|
Loading…
Reference in New Issue