static void redraw(GP_Backend *backend) { GP_Context *context = backend->context; /* Now draw some testing patters */ black_pixel = GP_RGBToContextPixel(0x00, 0x00, 0x00, context); white_pixel = GP_RGBToContextPixel(0xff, 0xff, 0xff, context); red_pixel = GP_RGBToContextPixel(0xff, 0x00, 0x00, context); blue_pixel = GP_RGBToContextPixel(0x00, 0x00, 0xff, context); green_pixel = GP_RGBToContextPixel(0x00, 0xff, 0x00, context); GP_Fill(context, white_pixel); unsigned int i, j; for (i = 0; i < 40; i++) { GP_HLineXYW(context, 0, i, i, black_pixel); GP_HLineXYW(context, 1, i + 40, i, black_pixel); GP_HLineXYW(context, 2, i + 80, i, black_pixel); GP_HLineXYW(context, 3, i + 120, i, black_pixel); GP_HLineXYW(context, 4, i + 160, i, black_pixel); GP_HLineXYW(context, 5, i + 200, i, black_pixel); GP_HLineXYW(context, 6, i + 240, i, black_pixel); GP_HLineXYW(context, 7, i + 280, i, black_pixel); } for (i = 0; i < 256; i++) { for (j = 0; j < 256; j++) { uint8_t val = 1.00 * sqrt(i*i + j*j)/sqrt(2) + 0.5; GP_Pixel pix = GP_RGBToContextPixel(i, j, val, context); GP_PutPixel(context, i + 60, j + 10, pix); } } GP_Text(context, NULL, 60, 270, GP_VALIGN_BELOW|GP_ALIGN_RIGHT, black_pixel, white_pixel, "Lorem Ipsum dolor sit..."); GP_Text(context, NULL, 60, 290, GP_VALIGN_BELOW|GP_ALIGN_RIGHT, red_pixel, white_pixel, "Lorem Ipsum dolor sit..."); GP_Text(context, NULL, 60, 310, GP_VALIGN_BELOW|GP_ALIGN_RIGHT, green_pixel, white_pixel, "Lorem Ipsum dolor sit..."); GP_Text(context, NULL, 60, 330, GP_VALIGN_BELOW|GP_ALIGN_RIGHT, blue_pixel, white_pixel, "Lorem Ipsum dolor sit..."); /* Update the backend screen */ GP_BackendFlip(backend); }
static void event_loop(void) { for (;;) { GP_BackendWait(backend); while (GP_BackendEventsQueued(backend)) { GP_Event ev; GP_BackendGetEvent(backend, &ev); GP_EventDump(&ev); switch (ev.type) { case GP_EV_KEY: draw_event(&ev); switch (ev.val.key.key) { case GP_KEY_ESC: GP_BackendExit(backend); exit(0); break; case GP_BTN_LEFT: GP_HLineXXY(win, ev.cursor_x - 3, ev.cursor_x + 3, ev.cursor_y, red); GP_VLineXYY(win, ev.cursor_x, ev.cursor_y - 3, ev.cursor_y + 3, red); GP_BackendFlip(backend); break; default: break; } break; case GP_EV_REL: switch (ev.code) { static int size = 0; case GP_EV_REL_POS: if (GP_EventGetKey(&ev, GP_BTN_LEFT)) { GP_PutPixel(win, ev.cursor_x, ev.cursor_y, green); } int align = GP_ALIGN_RIGHT|GP_VALIGN_BOTTOM; GP_TextClear(win, NULL, 20, 40, align, black, size); size = GP_Print(win, NULL, 20, 40, align, white, black, "X=%3u Y=%3u dX=%3i dY=%3i", ev.cursor_x, ev.cursor_y, ev.val.rel.rx, ev.val.rel.ry); GP_BackendFlip(backend); break; } break; case GP_EV_SYS: switch (ev.code) { case GP_EV_SYS_RESIZE: GP_BackendResizeAck(backend); break; case GP_EV_SYS_QUIT: GP_BackendExit(backend); exit(0); break; } break; } } } }