For some reason, in my program, I can only get text input via the on-screen keys, but not the physical keyboard.
My event code is as follows, just want to know what I'm doing wrong:
void UI_BeginInput()
{
nk_input_begin(&ctx);
}
void UI_EndInput()
{
nk_input_end(&ctx);
}
static int UI_ParseEvent(SDL_Event *evt)
{
switch (evt->type)
{
case SDL_KEYUP: // KEYUP & KEYDOWN share same routine
case SDL_KEYDOWN:
{
int down = evt->type == SDL_KEYDOWN;
switch (evt->key.keysym.sym)
{
case SDLK_RSHIFT: // RSHIFT & LSHIFT share same routine
case SDLK_LSHIFT:
nk_input_key(&ctx, NK_KEY_SHIFT, down);
break;
case SDLK_DELETE: nk_input_key(&ctx, NK_KEY_DEL, down); break;
case SDLK_RETURN: nk_input_key(&ctx, NK_KEY_ENTER, down); break;
case SDLK_TAB: nk_input_key(&ctx, NK_KEY_TAB, down); break;
case SDLK_BACKSPACE: nk_input_key(&ctx, NK_KEY_BACKSPACE, down); break;
case SDLK_HOME:
nk_input_key(&ctx, NK_KEY_TEXT_START, down);
nk_input_key(&ctx, NK_KEY_SCROLL_START, down);
break;
case SDLK_END:
nk_input_key(&ctx, NK_KEY_TEXT_END, down);
nk_input_key(&ctx, NK_KEY_SCROLL_END, down);
break;
case SDLK_PAGEDOWN: nk_input_key(&ctx, NK_KEY_SCROLL_DOWN, down); break;
case SDLK_PAGEUP: nk_input_key(&ctx, NK_KEY_SCROLL_UP, down); break;
case SDLK_z: nk_input_key(&ctx, NK_KEY_TEXT_UNDO, down && keyset[SDL_SCANCODE_LCTRL]); break;
case SDLK_r: nk_input_key(&ctx, NK_KEY_TEXT_REDO, down && keyset[SDL_SCANCODE_LCTRL]); break;
case SDLK_c: nk_input_key(&ctx, NK_KEY_COPY, down && keyset[SDL_SCANCODE_LCTRL]); break;
case SDLK_v: nk_input_key(&ctx, NK_KEY_PASTE, down && keyset[SDL_SCANCODE_LCTRL]); break;
case SDLK_x: nk_input_key(&ctx, NK_KEY_CUT, down && keyset[SDL_SCANCODE_LCTRL]); break;
case SDLK_b: nk_input_key(&ctx, NK_KEY_TEXT_LINE_START, down && keyset[SDL_SCANCODE_LCTRL]); break;
case SDLK_e: nk_input_key(&ctx, NK_KEY_TEXT_LINE_END, down && keyset[SDL_SCANCODE_LCTRL]); break;
case SDLK_UP: nk_input_key(&ctx, NK_KEY_UP, down); break;
case SDLK_DOWN: nk_input_key(&ctx, NK_KEY_DOWN, down); break;
case SDLK_LEFT:
if (keyset[SDL_SCANCODE_LCTRL])
nk_input_key(&ctx, NK_KEY_TEXT_WORD_LEFT, down);
else nk_input_key(&ctx, NK_KEY_LEFT, down);
break;
case SDLK_RIGHT:
if (keyset[SDL_SCANCODE_LCTRL])
nk_input_key(&ctx, NK_KEY_TEXT_WORD_RIGHT, down);
else nk_input_key(&ctx, NK_KEY_RIGHT, down);
break;
}
return 1;
}
case SDL_MOUSEBUTTONUP: // MOUSEBUTTONUP & MOUSEBUTTONDOWN share same routine
case SDL_MOUSEBUTTONDOWN:
{
int down = evt->type == SDL_MOUSEBUTTONDOWN;
const int x = evt->button.x, y = evt->button.y;
switch (evt->button.button)
{
case SDL_BUTTON_LEFT:
{
if (evt->button.clicks > 1)
nk_input_button(&ctx, NK_BUTTON_DOUBLE, x, y, down);
nk_input_button(&ctx, NK_BUTTON_LEFT, x, y, down);
break;
}
case SDL_BUTTON_MIDDLE: nk_input_button(&ctx, NK_BUTTON_MIDDLE, x, y, down); break;
case SDL_BUTTON_RIGHT: nk_input_button(&ctx, NK_BUTTON_RIGHT, x, y, down); break;
}
return 1;
}
case SDL_MOUSEMOTION:
{
if (ctx.input.mouse.grabbed)
{
int x = (int)ctx.input.mouse.prev.x, y = (int)ctx.input.mouse.prev.y;
nk_input_motion(&ctx, x + evt->motion.xrel, y + evt->motion.yrel);
}
else
nk_input_motion(&ctx, evt->motion.x, evt->motion.y);
return 1;
}
case SDL_TEXTINPUT:
{
nk_glyph glyph;
memcpy(glyph, evt->text.text, NK_UTF_SIZE);
nk_input_glyph(&ctx, glyph);
return 1;
}
case SDL_MOUSEWHEEL:
{
nk_input_scroll(&ctx, nk_vec2((float)evt->wheel.x, (float)evt->wheel.y));
return 1;
}
}
return 0;
}
For some reason, in my program, I can only get text input via the on-screen keys, but not the physical keyboard.
My event code is as follows, just want to know what I'm doing wrong: