mirror of https://github.com/encounter/SDL.git
switch: add software keyboard support (#49)
This commit is contained in:
parent
f94ecdc57f
commit
69747d1378
|
@ -156,7 +156,7 @@ SWITCH_JoystickUpdate(SDL_Joystick *joystick)
|
||||||
static JoystickState pad_old[JOYSTICK_COUNT];
|
static JoystickState pad_old[JOYSTICK_COUNT];
|
||||||
|
|
||||||
int index = (int) SDL_JoystickInstanceID(joystick);
|
int index = (int) SDL_JoystickInstanceID(joystick);
|
||||||
if (index > JOYSTICK_COUNT) {
|
if (index > JOYSTICK_COUNT || SDL_IsTextInputActive()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,111 @@
|
||||||
|
//
|
||||||
|
// Created by cpasjuste on 22/04/2020.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "../../SDL_internal.h"
|
||||||
|
|
||||||
|
#if SDL_VIDEO_DRIVER_SWITCH
|
||||||
|
|
||||||
|
#include <switch.h>
|
||||||
|
#include "SDL_switchswkb.h"
|
||||||
|
|
||||||
|
static SwkbdInline kbd;
|
||||||
|
static SwkbdAppearArg kbdAppearArg;
|
||||||
|
static bool kbdInited = SDL_FALSE;
|
||||||
|
static bool kbdShown = SDL_FALSE;
|
||||||
|
|
||||||
|
void
|
||||||
|
SWITCH_InitSwkb()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SWITCH_PollSwkb(void)
|
||||||
|
{
|
||||||
|
if(kbdInited) {
|
||||||
|
if(kbdShown) {
|
||||||
|
swkbdInlineUpdate(&kbd, NULL);
|
||||||
|
} else if(SDL_IsTextInputActive()) {
|
||||||
|
SDL_StopTextInput();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SWITCH_QuitSwkb()
|
||||||
|
{
|
||||||
|
if(kbdInited) {
|
||||||
|
swkbdInlineClose(&kbd);
|
||||||
|
kbdInited = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_bool
|
||||||
|
SWITCH_HasScreenKeyboardSupport(_THIS)
|
||||||
|
{
|
||||||
|
return SDL_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_bool
|
||||||
|
SWITCH_IsScreenKeyboardShown(_THIS, SDL_Window *window)
|
||||||
|
{
|
||||||
|
return kbdShown;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
SWITCH_EnterCb(const char *str, SwkbdDecidedEnterArg* arg)
|
||||||
|
{
|
||||||
|
if(arg->stringLen > 0) {
|
||||||
|
SDL_SendKeyboardText(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
kbdShown = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
SWITCH_CancelCb(void)
|
||||||
|
{
|
||||||
|
SDL_StopTextInput();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SWITCH_StartTextInput(_THIS)
|
||||||
|
{
|
||||||
|
Result rc;
|
||||||
|
|
||||||
|
if(!kbdInited) {
|
||||||
|
rc = swkbdInlineCreate(&kbd);
|
||||||
|
if (R_SUCCEEDED(rc)) {
|
||||||
|
rc = swkbdInlineLaunchForLibraryApplet(&kbd, SwkbdInlineMode_AppletDisplay, 0);
|
||||||
|
if(R_SUCCEEDED(rc)) {
|
||||||
|
swkbdInlineSetDecidedEnterCallback(&kbd, SWITCH_EnterCb);
|
||||||
|
swkbdInlineSetDecidedCancelCallback(&kbd, SWITCH_CancelCb);
|
||||||
|
swkbdInlineMakeAppearArg(&kbdAppearArg, SwkbdType_Normal);
|
||||||
|
swkbdInlineAppearArgSetOkButtonText(&kbdAppearArg, "Submit");
|
||||||
|
kbdAppearArg.dicFlag = 1;
|
||||||
|
kbdAppearArg.returnButtonFlag = 1;
|
||||||
|
kbdInited = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(kbdInited) {
|
||||||
|
swkbdInlineSetInputText(&kbd, "");
|
||||||
|
swkbdInlineSetCursorPos(&kbd, 0);
|
||||||
|
swkbdInlineUpdate(&kbd, NULL);
|
||||||
|
swkbdInlineAppear(&kbd, &kbdAppearArg);
|
||||||
|
kbdShown = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SWITCH_StopTextInput(_THIS)
|
||||||
|
{
|
||||||
|
if(kbdInited) {
|
||||||
|
swkbdInlineDisappear(&kbd);
|
||||||
|
}
|
||||||
|
|
||||||
|
kbdShown = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,20 @@
|
||||||
|
//
|
||||||
|
// Created by cpasjuste on 22/04/2020.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef SDL2_SDL_SWITCHSWKB_H
|
||||||
|
#define SDL2_SDL_SWITCHSWKB_H
|
||||||
|
|
||||||
|
#include "../../events/SDL_events_c.h"
|
||||||
|
|
||||||
|
extern void SWITCH_InitSwkb();
|
||||||
|
extern void SWITCH_PollSwkb();
|
||||||
|
extern void SWITCH_QuitSwkb();
|
||||||
|
|
||||||
|
extern SDL_bool SWITCH_HasScreenKeyboardSupport(_THIS);
|
||||||
|
extern SDL_bool SWITCH_IsScreenKeyboardShown(_THIS, SDL_Window * window);
|
||||||
|
|
||||||
|
extern void SWITCH_StartTextInput(_THIS);
|
||||||
|
extern void SWITCH_StopTextInput(_THIS);
|
||||||
|
|
||||||
|
#endif //SDL2_SDL_SWITCHSWKB_H
|
|
@ -34,6 +34,7 @@
|
||||||
#include "SDL_switchtouch.h"
|
#include "SDL_switchtouch.h"
|
||||||
#include "SDL_switchkeyboard.h"
|
#include "SDL_switchkeyboard.h"
|
||||||
#include "SDL_switchmouse_c.h"
|
#include "SDL_switchmouse_c.h"
|
||||||
|
#include "SDL_switchswkb.h"
|
||||||
|
|
||||||
/* Currently only one window */
|
/* Currently only one window */
|
||||||
static SDL_Window *switch_window = NULL;
|
static SDL_Window *switch_window = NULL;
|
||||||
|
@ -105,6 +106,11 @@ SWITCH_CreateDevice(int devindex)
|
||||||
device->GL_DeleteContext = SWITCH_GLES_DeleteContext;
|
device->GL_DeleteContext = SWITCH_GLES_DeleteContext;
|
||||||
device->GL_DefaultProfileConfig = SWITCH_GLES_DefaultProfileConfig;
|
device->GL_DefaultProfileConfig = SWITCH_GLES_DefaultProfileConfig;
|
||||||
|
|
||||||
|
device->StartTextInput = SWITCH_StartTextInput;
|
||||||
|
device->StopTextInput = SWITCH_StopTextInput;
|
||||||
|
device->HasScreenKeyboardSupport = SWITCH_HasScreenKeyboardSupport;
|
||||||
|
device->IsScreenKeyboardShown = SWITCH_IsScreenKeyboardShown;
|
||||||
|
|
||||||
device->PumpEvents = SWITCH_PumpEvents;
|
device->PumpEvents = SWITCH_PumpEvents;
|
||||||
|
|
||||||
return device;
|
return device;
|
||||||
|
@ -141,10 +147,12 @@ SWITCH_VideoInit(_THIS)
|
||||||
|
|
||||||
// init touch
|
// init touch
|
||||||
SWITCH_InitTouch();
|
SWITCH_InitTouch();
|
||||||
//init keyboard
|
// init keyboard
|
||||||
SWITCH_InitKeyboard();
|
SWITCH_InitKeyboard();
|
||||||
//init mouse
|
// init mouse
|
||||||
SWITCH_InitMouse();
|
SWITCH_InitMouse();
|
||||||
|
// init software keyboard
|
||||||
|
SWITCH_InitSwkb();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -158,10 +166,12 @@ SWITCH_VideoQuit(_THIS)
|
||||||
|
|
||||||
// exit touch
|
// exit touch
|
||||||
SWITCH_QuitTouch();
|
SWITCH_QuitTouch();
|
||||||
//exit keyboard
|
// exit keyboard
|
||||||
SWITCH_QuitKeyboard();
|
SWITCH_QuitKeyboard();
|
||||||
//exit mouse
|
// exit mouse
|
||||||
SWITCH_QuitMouse();
|
SWITCH_QuitMouse();
|
||||||
|
// exit software keyboard
|
||||||
|
SWITCH_QuitSwkb();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -343,9 +353,13 @@ SWITCH_PumpEvents(_THIS)
|
||||||
}
|
}
|
||||||
|
|
||||||
hidScanInput();
|
hidScanInput();
|
||||||
SWITCH_PollTouch();
|
// we don't want other inputs overlapping with software keyboard
|
||||||
SWITCH_PollKeyboard();
|
if(!SDL_IsTextInputActive()) {
|
||||||
SWITCH_PollMouse();
|
SWITCH_PollTouch();
|
||||||
|
SWITCH_PollKeyboard();
|
||||||
|
SWITCH_PollMouse();
|
||||||
|
}
|
||||||
|
SWITCH_PollSwkb();
|
||||||
|
|
||||||
// handle docked / un-docked modes
|
// handle docked / un-docked modes
|
||||||
// note that SDL_WINDOW_RESIZABLE is only possible in windowed mode,
|
// note that SDL_WINDOW_RESIZABLE is only possible in windowed mode,
|
||||||
|
|
Loading…
Reference in New Issue