| 3307 | #if defined(VK_USE_PLATFORM_XCB_KHR) |
| 3308 | |
| 3309 | void Demo::handle_xcb_event(const xcb_generic_event_t *event) { |
| 3310 | uint8_t event_code = event->response_type & 0x7f; |
| 3311 | switch (event_code) { |
| 3312 | case XCB_EXPOSE: |
| 3313 | // TODO: Resize window |
| 3314 | break; |
| 3315 | case XCB_CLIENT_MESSAGE: |
| 3316 | if ((*(xcb_client_message_event_t *)event).data.data32[0] == (*atom_wm_delete_window).atom) { |
| 3317 | quit = true; |
| 3318 | } |
| 3319 | break; |
| 3320 | case XCB_KEY_RELEASE: { |
| 3321 | const xcb_key_release_event_t *key = (const xcb_key_release_event_t *)event; |
| 3322 | |
| 3323 | switch (key->detail) { |
| 3324 | case 0x9: // Escape |
| 3325 | quit = true; |
| 3326 | break; |
| 3327 | case 0x71: // left arrow key |
| 3328 | spin_angle -= spin_increment; |
| 3329 | break; |
| 3330 | case 0x72: // right arrow key |
| 3331 | spin_angle += spin_increment; |
| 3332 | break; |
| 3333 | case 0x41: // space bar |
| 3334 | pause = !pause; |
| 3335 | break; |
| 3336 | } |
| 3337 | } break; |
| 3338 | case XCB_CONFIGURE_NOTIFY: { |
| 3339 | const xcb_configure_notify_event_t *cfg = (const xcb_configure_notify_event_t *)event; |
| 3340 | if ((width != cfg->width) || (height != cfg->height)) { |
| 3341 | width = cfg->width; |
| 3342 | height = cfg->height; |
| 3343 | resize(); |
| 3344 | } |
| 3345 | } break; |
| 3346 | default: |
| 3347 | break; |
| 3348 | } |
| 3349 | } |
| 3350 | |
| 3351 | template <> |
| 3352 | void Demo::run<WsiPlatform::xcb>() { |
nothing calls this directly
no outgoing calls
no test coverage detected