xlib.cpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include <sys/ipc.h>
  2. #include <sys/shm.h>
  3. #include <X11/Xlib.h>
  4. #include <X11/Xutil.h>
  5. #include <X11/Xatom.h>
  6. #include "keyboard/xlib.cpp"
  7. #include "mouse/xlib.cpp"
  8. struct InputXlib : InputDriver {
  9. InputXlib& self = *this;
  10. InputXlib(Input& super) : InputDriver(super), keyboard(super), mouse(super) {}
  11. ~InputXlib() { terminate(); }
  12. auto create() -> bool override {
  13. return initialize();
  14. }
  15. auto driver() -> string override { return "Xlib"; }
  16. auto ready() -> bool override { return isReady; }
  17. auto hasContext() -> bool override { return true; }
  18. auto setContext(uintptr context) -> bool override { return initialize(); }
  19. auto acquired() -> bool override { return mouse.acquired(); }
  20. auto acquire() -> bool override { return mouse.acquire(); }
  21. auto release() -> bool override { return mouse.release(); }
  22. auto poll() -> vector<shared_pointer<HID::Device>> override {
  23. vector<shared_pointer<HID::Device>> devices;
  24. keyboard.poll(devices);
  25. mouse.poll(devices);
  26. return devices;
  27. }
  28. auto rumble(uint64_t id, bool enable) -> bool override {
  29. return false;
  30. }
  31. private:
  32. auto initialize() -> bool {
  33. terminate();
  34. if(!self.context) return false;
  35. if(!keyboard.initialize()) return false;
  36. if(!mouse.initialize(self.context)) return false;
  37. return isReady = true;
  38. }
  39. auto terminate() -> void {
  40. isReady = false;
  41. keyboard.terminate();
  42. mouse.terminate();
  43. }
  44. bool isReady = false;
  45. InputKeyboardXlib keyboard;
  46. InputMouseXlib mouse;
  47. };