MouseLinux.cpp 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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 <Renderer/Renderer.h>
  7. MouseLinux::MouseLinux()
  8. {
  9. Reset();
  10. }
  11. MouseLinux::~MouseLinux()
  12. {
  13. Shutdown();
  14. }
  15. bool MouseLinux::Initialize(Renderer *inRenderer)
  16. {
  17. mDisplay = inRenderer->GetDisplay();
  18. mWindow = inRenderer->GetWindow();
  19. // Poll once and reset the deltas
  20. Poll();
  21. mDX = 0;
  22. mDY = 0;
  23. return true;
  24. }
  25. void MouseLinux::Shutdown()
  26. {
  27. mWindow = 0;
  28. mDisplay = nullptr;
  29. }
  30. void MouseLinux::Reset()
  31. {
  32. mX = 0;
  33. mY = 0;
  34. mDX = 0;
  35. mDY = 0;
  36. mLeftPressed = false;
  37. mRightPressed = false;
  38. mMiddlePressed = false;
  39. }
  40. void MouseLinux::Poll()
  41. {
  42. Window root_return, child_return;
  43. int root_x, root_y, win_x, win_y;
  44. unsigned int mask;
  45. if (XQueryPointer(mDisplay, mWindow, &root_return, &child_return, &root_x, &root_y, &win_x, &win_y, &mask))
  46. {
  47. mDX = win_x - mX;
  48. mDY = win_y - mY;
  49. mX = win_x;
  50. mY = win_y;
  51. mLeftPressed = mask & Button1Mask;
  52. mRightPressed = mask & Button3Mask;
  53. mMiddlePressed = mask & Button2Mask;
  54. }
  55. else
  56. Reset();
  57. }
  58. void MouseLinux::HideCursor()
  59. {
  60. }
  61. void MouseLinux::ShowCursor()
  62. {
  63. }