MouseLinux.cpp 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. // Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
  2. // SPDX-FileCopyrightText: 2024 Jorrit Rouwe
  3. // SPDX-License-Identifier: MIT
  4. #include <TestFramework.h>
  5. #include <Input/Linux/MouseLinux.h>
  6. #include <Window/ApplicationWindowLinux.h>
  7. MouseLinux::MouseLinux()
  8. {
  9. Reset();
  10. }
  11. MouseLinux::~MouseLinux()
  12. {
  13. Shutdown();
  14. }
  15. bool MouseLinux::Initialize(ApplicationWindow *inWindow)
  16. {
  17. ApplicationWindowLinux *window = static_cast<ApplicationWindowLinux *>(inWindow);
  18. mDisplay = window->GetDisplay();
  19. mWindow = window->GetWindow();
  20. // Poll once and reset the deltas
  21. Poll();
  22. mDX = 0;
  23. mDY = 0;
  24. return true;
  25. }
  26. void MouseLinux::Shutdown()
  27. {
  28. mWindow = 0;
  29. mDisplay = nullptr;
  30. }
  31. void MouseLinux::Reset()
  32. {
  33. mX = 0;
  34. mY = 0;
  35. mDX = 0;
  36. mDY = 0;
  37. mLeftPressed = false;
  38. mRightPressed = false;
  39. mMiddlePressed = false;
  40. }
  41. void MouseLinux::Poll()
  42. {
  43. Window root_return, child_return;
  44. int root_x, root_y, win_x, win_y;
  45. unsigned int mask;
  46. if (XQueryPointer(mDisplay, mWindow, &root_return, &child_return, &root_x, &root_y, &win_x, &win_y, &mask))
  47. {
  48. mDX = win_x - mX;
  49. mDY = win_y - mY;
  50. mX = win_x;
  51. mY = win_y;
  52. mLeftPressed = mask & Button1Mask;
  53. mRightPressed = mask & Button3Mask;
  54. mMiddlePressed = mask & Button2Mask;
  55. }
  56. else
  57. Reset();
  58. }
  59. void MouseLinux::HideCursor()
  60. {
  61. }
  62. void MouseLinux::ShowCursor()
  63. {
  64. }