cursor_manager.cpp 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include "cursor_manager.h"
  2. #include "app/models/cursor_mode.h"
  3. #include <QCursor>
  4. #include <QPoint>
  5. #include <QQuickWindow>
  6. #include <qglobal.h>
  7. #include <qnamespace.h>
  8. #include <qobject.h>
  9. #include <qpoint.h>
  10. #include <qtmetamacros.h>
  11. #include <qvectornd.h>
  12. CursorManager::CursorManager(QObject *parent) : QObject(parent) {}
  13. void CursorManager::set_mode(CursorMode mode) {
  14. if (m_cursor_mode == mode) {
  15. return;
  16. }
  17. if (m_cursor_mode == CursorMode::Patrol && mode != CursorMode::Patrol) {
  18. m_has_first_waypoint = false;
  19. }
  20. m_cursor_mode = mode;
  21. emit mode_changed();
  22. emit global_cursor_changed();
  23. }
  24. void CursorManager::set_mode(const QString &mode) {
  25. set_mode(CursorModeUtils::fromString(mode));
  26. }
  27. void CursorManager::update_cursor_shape(QQuickWindow *window) {
  28. if (window == nullptr) {
  29. return;
  30. }
  31. Qt::CursorShape const desired_cursor =
  32. (m_cursor_mode == CursorMode::Normal) ? Qt::ArrowCursor : Qt::BlankCursor;
  33. if (m_current_cursor != desired_cursor) {
  34. m_current_cursor = desired_cursor;
  35. window->setCursor(desired_cursor);
  36. }
  37. }
  38. auto CursorManager::global_cursor_x(QQuickWindow *window) -> qreal {
  39. if (window == nullptr) {
  40. return 0;
  41. }
  42. QPoint const global_pos = QCursor::pos();
  43. QPoint const local_pos = window->mapFromGlobal(global_pos);
  44. return local_pos.x();
  45. }
  46. auto CursorManager::global_cursor_y(QQuickWindow *window) -> qreal {
  47. if (window == nullptr) {
  48. return 0;
  49. }
  50. QPoint const global_pos = QCursor::pos();
  51. QPoint const local_pos = window->mapFromGlobal(global_pos);
  52. return local_pos.y();
  53. }
  54. void CursorManager::set_patrol_first_waypoint(const QVector3D &waypoint) {
  55. m_first_waypoint = waypoint;
  56. m_has_first_waypoint = true;
  57. }
  58. void CursorManager::clear_patrol_first_waypoint() {
  59. m_has_first_waypoint = false;
  60. }