void event_loop(void) { GP_Event ev; for (;;) { GP_BackendWaitEvent(win, &ev); switch (ev.type) { case GP_EV_KEY: if (ev.code != GP_EV_KEY_DOWN) continue; switch (ev.val.key.key) { case GP_KEY_SPACE: if (font) font_flag = (font_flag + 1) % 5; else font_flag = (font_flag + 1) % 4; redraw_screen(); GP_BackendFlip(win); break; case GP_KEY_UP: tracking++; redraw_screen(); GP_BackendFlip(win); break; case GP_KEY_DOWN: tracking--; redraw_screen(); GP_BackendFlip(win); break; case GP_KEY_B: font_h++; if (font_path) { GP_FontFaceFree(font); font = GP_FontFaceLoad(font_path, 0, font_h); redraw_screen(); GP_BackendFlip(win); } break; case GP_KEY_S: font_h--; if (font_path) { GP_FontFaceFree(font); font = GP_FontFaceLoad(font_path, 0, font_h); redraw_screen(); GP_BackendFlip(win); } break; case GP_KEY_ESC: GP_BackendExit(win); exit(0); break; } } } }
int main(int argc, char *argv[]) { GP_Backend *backend; const char *backend_opts = "X11:100x100"; int opt; while ((opt = getopt(argc, argv, "b:h")) != -1) { switch (opt) { case 'b': backend_opts = optarg; break; case 'h': GP_BackendInit(NULL, NULL); return 0; break; default: fprintf(stderr, "Invalid paramter '%c'\n", opt); return 1; } } backend = GP_BackendInit(backend_opts, "Backend Example"); if (backend == NULL) { fprintf(stderr, "Failed to initialize backend\n"); return 1; } redraw(backend); /* Handle events */ for (;;) { GP_Event ev; GP_BackendWaitEvent(backend, &ev); GP_EventDump(&ev); switch (ev.type) { case GP_EV_KEY: switch (ev.val.val) { case GP_KEY_ESC: case GP_KEY_Q: GP_BackendExit(backend); return 0; break; } break; case GP_EV_SYS: switch (ev.code) { case GP_EV_SYS_RESIZE: GP_BackendResizeAck(backend); redraw(backend); break; case GP_EV_SYS_QUIT: GP_BackendExit(backend); return 0; break; } break; } } GP_BackendExit(backend); return 0; }
void draw_help(GP_Backend *backend) { int loff = 0, last, xoff = 0; last = redraw_help(backend, loff, xoff); for (;;) { GP_Event ev; while (GP_BackendWaitEvent(backend, &ev)) { switch (ev.type) { case GP_EV_KEY: if (ev.code != GP_EV_KEY_DOWN) continue; switch (ev.val.key.key) { case GP_KEY_DOWN: if (last < keys_help_len) last = redraw_help(backend, ++loff, xoff); break; case GP_KEY_UP: if (loff > 0) last = redraw_help(backend, --loff, xoff); break; case GP_KEY_LEFT: last = redraw_help(backend, loff, --xoff); break; case GP_KEY_RIGHT: last = redraw_help(backend, loff, ++xoff); break; case GP_KEY_PAGE_DOWN: if (last < keys_help_len) { if (loff + max_lines(backend) >= keys_help_len) break; loff += max_lines(backend); last = redraw_help(backend, loff, xoff); } break; case GP_KEY_PAGE_UP: if (loff > 0) { loff -= max_lines(backend); if (loff < 0) loff = 0; last = redraw_help(backend, loff, xoff); } break; default: return; } break; case GP_EV_SYS: switch (ev.code) { case GP_EV_SYS_RESIZE: GP_BackendResizeAck(backend); last = redraw_help(backend, loff, xoff); break; case GP_EV_SYS_QUIT: GP_BackendPutEventBack(backend, &ev); return; } } } } }
void event_loop(void) { GP_Event ev; for (;;) { GP_BackendWaitEvent(backend, &ev); switch (ev.type) { case GP_EV_KEY: if (ev.code != GP_EV_KEY_DOWN) continue; switch (ev.val.key.key) { case GP_KEY_SPACE: if (font) font_flag = (font_flag + 1) % 6; else font_flag = (font_flag + 1) % 5; redraw_screen(); GP_BackendFlip(backend); break; case GP_KEY_RIGHT: tracking++; redraw_screen(); GP_BackendFlip(backend); break; case GP_KEY_LEFT: tracking--; redraw_screen(); GP_BackendFlip(backend); break; case GP_KEY_UP: warp_up(1); break; case GP_KEY_DOWN: warp_down(1); break; case GP_KEY_DOT: space++; redraw_screen(); GP_BackendFlip(backend); break; case GP_KEY_COMMA: space--; redraw_screen(); GP_BackendFlip(backend); break; case GP_KEY_RIGHT_BRACE: mul++; redraw_screen(); GP_BackendFlip(backend); break; case GP_KEY_LEFT_BRACE: if (mul > 0) mul--; redraw_screen(); GP_BackendFlip(backend); break; case GP_KEY_PAGE_UP: warp_up(30); break; case GP_KEY_PAGE_DOWN: warp_down(30); break; case GP_KEY_ESC: GP_BackendExit(backend); exit(0); break; } break; case GP_EV_SYS: switch(ev.code) { case GP_EV_SYS_QUIT: GP_BackendExit(backend); exit(0); break; case GP_EV_SYS_RESIZE: GP_BackendResizeAck(backend); redraw_screen(); GP_BackendFlip(backend); break; } break; } } }
static void event_loop(void) { GP_Event ev; for (;;) { GP_BackendWaitEvent(win, &ev); switch (ev.type) { case GP_EV_KEY: if (ev.code != GP_EV_KEY_DOWN) continue; switch (ev.val.key.key) { case GP_KEY_X: win->context->x_swap = !win->context->x_swap; break; case GP_KEY_Y: win->context->y_swap = !win->context->y_swap; break; case GP_KEY_R: win->context->axes_swap = !win->context->axes_swap; GP_SWAP(X, Y); break; case GP_KEY_SPACE: font_flag++; if (font) { if (font_flag > 5) font_flag = 0; } else { if (font_flag > 4) font_flag = 0; } break; case GP_KEY_UP: style.pixel_xspace++; style.pixel_yspace++; break; case GP_KEY_DOWN: style.pixel_xspace--; style.pixel_yspace--; break; case GP_KEY_RIGHT: style.pixel_xmul++; style.pixel_ymul++; break; case GP_KEY_LEFT: style.pixel_xmul--; style.pixel_ymul--; break; case GP_KEY_ESC: GP_BackendExit(win); exit(0); break; } break; case GP_EV_SYS: switch(ev.code) { case GP_EV_SYS_QUIT: GP_BackendExit(win); exit(0); break; case GP_EV_SYS_RESIZE: GP_BackendResizeAck(win); X = win->context->w; Y = win->context->h; break; } break; } redraw_screen(); GP_BackendFlip(win); } }