keyboard.cpp 1.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #include "keyboard.hpp"
  2. static void keyboard_handle_keymap(void *data, struct wl_keyboard *keyboard, uint32_t format, int fd, uint32_t size) {
  3. }
  4. static void keyboard_handle_enter(void *data, struct wl_keyboard *keyboard, uint32_t serial, struct wl_surface *surface, struct wl_array *keys) {
  5. }
  6. static void keyboard_handle_leave(void *data, struct wl_keyboard *keyboard, uint32_t serial, struct wl_surface *surface) {
  7. }
  8. static void keyboard_handle_key(void *data, struct wl_keyboard *keyboard, uint32_t serial, uint32_t time, uint32_t key, uint32_t state) {
  9. Keyboard* kb = (Keyboard*)data;
  10. kb->setKey( key, state );
  11. }
  12. static void keyboard_handle_modifiers(void *data, struct wl_keyboard *keyboard, uint32_t serial, uint32_t mods_depressed, uint32_t mods_latched, uint32_t mods_locked, uint32_t group) {
  13. }
  14. static const struct wl_keyboard_listener keyboard_listener = {
  15. keyboard_handle_keymap,
  16. keyboard_handle_enter,
  17. keyboard_handle_leave,
  18. keyboard_handle_key,
  19. keyboard_handle_modifiers,
  20. };
  21. Keyboard::Keyboard(Wayland* wayland) {
  22. wl_keyboard_add_listener(wl_seat_get_keyboard(wayland->seat), &keyboard_listener, this);
  23. }
  24. void Keyboard::setKey( int key, int state ) {
  25. for (unsigned int i=0;i<keys.size();i++ ) {
  26. if ( keys[i].x == key ) {
  27. keys[i].y = state;
  28. return;
  29. }
  30. }
  31. keys.push_back(glm::ivec2(key,state));
  32. }
  33. int Keyboard::getKey( int button ) {
  34. for (unsigned int i=0;i<keys.size();i++ ) {
  35. if ( keys[i].x == button ) {
  36. return keys[i].y;
  37. }
  38. }
  39. return 0;
  40. }
  41. bool Keyboard::anyKeyDown() {
  42. for ( glm::ivec2 combo : keys ) {
  43. if ( combo.y == 1 ) {
  44. return true;
  45. }
  46. }
  47. return false;
  48. }