begin reworking keyboard handling
This commit is contained in:
parent
7ba7abc029
commit
fa752fefde
@ -205,6 +205,9 @@ void Window::handle_event(SDL_Event & event)
|
||||
|
||||
case SDL_KEYDOWN:
|
||||
m_keymod = event.key.keysym.mod;
|
||||
{
|
||||
uint32_t keyval = get_keyval(event.key.keysym.sym);
|
||||
}
|
||||
if (event.key.repeat == 0)
|
||||
{
|
||||
Key_Statuses[event.key.keysym.scancode].pressed = true;
|
||||
@ -216,6 +219,9 @@ void Window::handle_event(SDL_Event & event)
|
||||
|
||||
case SDL_KEYUP:
|
||||
m_keymod = event.key.keysym.mod;
|
||||
{
|
||||
uint32_t keyval = get_keyval(event.key.keysym.sym);
|
||||
}
|
||||
Key_Statuses[event.key.keysym.scancode].pressed = false;
|
||||
if (Key_Statuses[event.key.keysym.scancode].timer_id != 0)
|
||||
{
|
||||
@ -546,3 +552,68 @@ void Window::insertion_test()
|
||||
m_buffer->piece_table->insertion_test(*m_cursor);
|
||||
redraw();
|
||||
}
|
||||
|
||||
uint32_t Window::get_keyval(SDL_Keycode keysym)
|
||||
{
|
||||
uint32_t keyval = keysym;
|
||||
if ((m_keymod & (KMOD_SHIFT | KMOD_CAPS)) != 0u)
|
||||
{
|
||||
uint32_t shifted = get_shifted(keyval);
|
||||
if (shifted != keyval)
|
||||
{
|
||||
keyval = shifted;
|
||||
}
|
||||
else
|
||||
{
|
||||
keyval |= KEYMOD_SHIFT;
|
||||
}
|
||||
}
|
||||
if ((m_keymod & KMOD_CTRL) != 0u)
|
||||
{
|
||||
keyval |= KEYMOD_CTRL;
|
||||
}
|
||||
if ((m_keymod & KMOD_ALT) != 0u)
|
||||
{
|
||||
keyval |= KEYMOD_ALT;
|
||||
}
|
||||
if ((m_keymod & KMOD_GUI) != 0u)
|
||||
{
|
||||
keyval |= KEYMOD_GUI;
|
||||
}
|
||||
return keyval;
|
||||
}
|
||||
|
||||
uint32_t Window::get_shifted(uint32_t keysym)
|
||||
{
|
||||
if ((keysym >= 'a') && (keysym <= 'z'))
|
||||
{
|
||||
return keysym - ('a' - 'A');
|
||||
}
|
||||
|
||||
switch (keysym)
|
||||
{
|
||||
case SDLK_QUOTE: return '"';
|
||||
case SDLK_COMMA: return '<';
|
||||
case SDLK_MINUS: return '_';
|
||||
case SDLK_PERIOD: return '>';
|
||||
case SDLK_SLASH: return '?';
|
||||
case SDLK_0: return ')';
|
||||
case SDLK_1: return '!';
|
||||
case SDLK_2: return '@';
|
||||
case SDLK_3: return '#';
|
||||
case SDLK_4: return '$';
|
||||
case SDLK_5: return '%';
|
||||
case SDLK_6: return '^';
|
||||
case SDLK_7: return '&';
|
||||
case SDLK_8: return '*';
|
||||
case SDLK_9: return '(';
|
||||
case SDLK_SEMICOLON: return ':';
|
||||
case SDLK_EQUALS: return '+';
|
||||
case SDLK_LEFTBRACKET: return '{';
|
||||
case SDLK_BACKSLASH: return '|';
|
||||
case SDLK_RIGHTBRACKET: return '}';
|
||||
case SDLK_BACKQUOTE: return '~';
|
||||
}
|
||||
|
||||
return keysym;
|
||||
}
|
||||
|
@ -27,6 +27,14 @@ protected:
|
||||
CURSOR_EOL,
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
KEYMOD_CTRL = 0x10000,
|
||||
KEYMOD_ALT = 0x20000,
|
||||
KEYMOD_SHIFT = 0x40000,
|
||||
KEYMOD_GUI = 0x80000,
|
||||
};
|
||||
|
||||
void resize();
|
||||
void redraw();
|
||||
void draw_cursor(int screen_column, int screen_row);
|
||||
@ -43,6 +51,8 @@ protected:
|
||||
void draw_rect(int x, int y, int width, int height, float r, float g, float b, float a);
|
||||
void draw_status_bar();
|
||||
void insertion_test();
|
||||
uint32_t get_keyval(SDL_Keycode keysym);
|
||||
uint32_t get_shifted(uint32_t keysym);
|
||||
|
||||
SDL_Window * m_window;
|
||||
bool m_exit_requested;
|
||||
|
Loading…
x
Reference in New Issue
Block a user