Repository navigation
Expand file tree
/
Copy pathImeTextInput.cpp
More file actions
42 lines (39 loc) · 1.75 KB
/
Copy pathImeTextInput.cpp
File metadata and controls
42 lines (39 loc) · 1.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include "prx/libSceVideoOut/include/ImeTextInput.hpp"
#include "prx/libSceIme/include/ImeInput.hpp"
#include <cstring>
#include "SDL_keyboard.h"
void ImeTextInput::HandleEvent(const SDL_Event& event, unsigned windowId) {
ImeHostInput input{};
switch (event.type) {
case SDL_TEXTINPUT:
if (event.text.windowID != windowId) return;
static_assert(sizeof(input.text) >= sizeof(event.text.text));
std::memcpy(input.text, event.text.text, sizeof(event.text.text));
input.kind = ImeHostInputKind::Text;
break;
case SDL_KEYDOWN:
if (event.key.windowID != windowId) return;
switch (event.key.keysym.scancode) {
case SDL_SCANCODE_BACKSPACE: input.kind = ImeHostInputKind::Backspace; break;
case SDL_SCANCODE_DELETE: input.kind = ImeHostInputKind::Delete; break;
case SDL_SCANCODE_LEFT: input.kind = ImeHostInputKind::Left; break;
case SDL_SCANCODE_RIGHT: input.kind = ImeHostInputKind::Right; break;
case SDL_SCANCODE_HOME: input.kind = ImeHostInputKind::Home; break;
case SDL_SCANCODE_END: input.kind = ImeHostInputKind::End; break;
case SDL_SCANCODE_RETURN:
case SDL_SCANCODE_KP_ENTER:
if (event.key.repeat != 0) return;
input.kind = ImeHostInputKind::Enter;
break;
case SDL_SCANCODE_ESCAPE:
if (event.key.repeat != 0) return;
input.kind = ImeHostInputKind::Escape;
break;
default: return;
}
break;
default:
return;
}
ImePublishInput_nid_postfix(input);
}