mouse.cpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #if defined(Hiro_Mouse)
  2. namespace hiro {
  3. auto pMouse::position() -> Position {
  4. #if defined(DISPLAY_WINDOWS)
  5. POINT point{0};
  6. GetCursorPos(&point);
  7. return {point.x, point.y};
  8. #endif
  9. #if defined(DISPLAY_XORG)
  10. XlibWindow root, child;
  11. int rootx, rooty, winx, winy;
  12. uint mask;
  13. XQueryPointer(pApplication::state().display, DefaultRootWindow(pApplication::state().display), &root, &child, &rootx, &rooty, &winx, &winy, &mask);
  14. return {rootx, rooty};
  15. #endif
  16. }
  17. auto pMouse::pressed(Mouse::Button button) -> bool {
  18. #if defined(DISPLAY_WINDOWS)
  19. switch(button) {
  20. case Mouse::Button::Left: return GetAsyncKeyState(VK_LBUTTON) & 0x8000;
  21. case Mouse::Button::Middle: return GetAsyncKeyState(VK_MBUTTON) & 0x8000;
  22. case Mouse::Button::Right: return GetAsyncKeyState(VK_RBUTTON) & 0x8000;
  23. }
  24. #endif
  25. #if defined(DISPLAY_XORG)
  26. XlibWindow root, child;
  27. int rootx, rooty, winx, winy;
  28. uint mask;
  29. XQueryPointer(pApplication::state().display, DefaultRootWindow(pApplication::state().display), &root, &child, &rootx, &rooty, &winx, &winy, &mask);
  30. switch(button) {
  31. case Mouse::Button::Left: return mask & Button1Mask;
  32. case Mouse::Button::Middle: return mask & Button2Mask;
  33. case Mouse::Button::Right: return mask & Button3Mask;
  34. }
  35. #endif
  36. return false;
  37. }
  38. }
  39. #endif