forked from devkitPro/SDL
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
switch: add software keyboard support (devkitPro#49)
- Loading branch information
1 parent
0428021
commit 84fd9f5
Showing
4 changed files
with
153 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters