static bool init(int argc, char **argv);
static void process_event(SDL_Event *ev);
static void proc_modkeys();
+static int translate_keysym(SDL_Keycode sym);
static SDL_Window *win;
static SDL_GLContext ctx;
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 8);
SDL_GL_SetAttribute(SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, 1);
+#ifndef NDEBUG
+ SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_DEBUG_FLAG);
+#endif
int defpos = SDL_WINDOWPOS_UNDEFINED;
unsigned int sdlflags = SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI;
int val;
SDL_GL_GetAttribute(SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, &val);
printf("SDL says we %s an sRGB framebuffer\n", val ? "got" : "didn't get");
+ fb_srgb = val;
if(!(ctx = SDL_GL_CreateContext(win))) {
fprintf(stderr, "failed to create OpenGL context\n");
}
app_reshape(win_width, win_height);
+ SDL_RaiseWindow(win);
+
while(!quit) {
SDL_Event ev;
static bool init(int argc, char **argv)
{
- glewInit();
-
if(!app_init(argc, argv)) {
return false;
}
static void process_event(SDL_Event *ev)
{
+ int key;
+
switch(ev->type) {
case SDL_QUIT:
quit = true;
case SDL_KEYDOWN:
case SDL_KEYUP:
proc_modkeys();
- app_keyboard(ev->key.keysym.sym, ev->key.state == SDL_PRESSED);
+ if((key = translate_keysym(ev->key.keysym.sym)) != -1) {
+ app_keyboard(key, ev->key.state == SDL_PRESSED);
+ }
break;
case SDL_MOUSEBUTTONDOWN:
}
break;
+ case SDL_MOUSEWHEEL:
+ app_mouse_wheel(ev->wheel.y);
+ break;
+
case SDL_WINDOWEVENT:
if(ev->window.event == SDL_WINDOWEVENT_SIZE_CHANGED) {
SDL_GL_GetDrawableSize(win, &win_width, &win_height);
modkeys |= MOD_CTRL;
}
}
+
+static int translate_keysym(SDL_Keycode sym)
+{
+ switch(sym) {
+ case SDLK_RETURN:
+ return '\n';
+ case SDLK_DELETE:
+ return KEY_DEL;
+ case SDLK_LEFT:
+ return KEY_LEFT;
+ case SDLK_RIGHT:
+ return KEY_RIGHT;
+ case SDLK_UP:
+ return KEY_UP;
+ case SDLK_DOWN:
+ return KEY_DOWN;
+ case SDLK_PAGEUP:
+ return KEY_PGUP;
+ case SDLK_PAGEDOWN:
+ return KEY_PGDOWN;
+ case SDLK_HOME:
+ return KEY_HOME;
+ case SDLK_END:
+ return KEY_END;
+ default:
+ break;
+ }
+
+ if(sym < 127) {
+ return sym;
+ }
+ if(sym >= SDLK_F1 && sym <= SDLK_F12) {
+ return KEY_F1 + sym - SDLK_F1;
+ }
+ return -1;
+}