summaryrefslogtreecommitdiff
path: root/window.c
diff options
context:
space:
mode:
Diffstat (limited to 'window.c')
-rw-r--r--window.c42
1 files changed, 41 insertions, 1 deletions
diff --git a/window.c b/window.c
index 81bf634..027d876 100644
--- a/window.c
+++ b/window.c
@@ -5,6 +5,7 @@
#include "buffer.h"
#include "editor.h"
#include "font.h"
+#include "input.h"
static SDL_Window *window = NULL;
static SDL_Renderer *renderer = NULL;
@@ -39,13 +40,52 @@ void window_init()
SDL_ShowWindow(window);
}
-int window_handle_event()
+int window_handle_event(struct editor_state *editor)
{
static SDL_Event e;
SDL_WaitEvent(&e);
switch (e.type) {
case SDL_QUIT:
return 0;
+ case SDL_KEYDOWN:
+ int keycode = e.key.keysym.sym;
+ switch (e.key.keysym.sym) {
+ case SDLK_BACKSPACE:
+ keycode = BACKSPACE;
+ break;
+ case SDLK_LEFT:
+ keycode = ARROW_LEFT;
+ break;
+ case SDLK_RIGHT:
+ keycode = ARROW_RIGHT;
+ break;
+ case SDLK_UP:
+ keycode = ARROW_UP;
+ break;
+ case SDLK_DOWN:
+ keycode = ARROW_DOWN;
+ break;
+ case SDLK_DELETE:
+ keycode = DELETE_KEY;
+ break;
+ case SDLK_HOME:
+ keycode = HOME_KEY;
+ break;
+ case SDLK_END:
+ keycode = END_KEY;
+ break;
+ case SDLK_PAGEUP:
+ keycode = PAGE_UP;
+ break;
+ case SDLK_PAGEDOWN:
+ keycode = PAGE_DOWN;
+ break;
+ }
+ if (e.key.keysym.mod & KMOD_CTRL) {
+ keycode = CTRL_KEY(keycode);
+ }
+ editor_process_keypress(editor, keycode);
+ break;
}
return 1;
}