cursor_manager.cpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include "cursor_manager.h"
  2. #include <QCursor>
  3. #include <QPoint>
  4. #include <QQuickWindow>
  5. CursorManager::CursorManager(QObject *parent) : QObject(parent) {}
  6. void CursorManager::setMode(CursorMode mode) {
  7. if (m_cursorMode == mode)
  8. return;
  9. if (m_cursorMode == CursorMode::Patrol && mode != CursorMode::Patrol) {
  10. m_hasFirstWaypoint = false;
  11. }
  12. m_cursorMode = mode;
  13. emit modeChanged();
  14. emit globalCursorChanged();
  15. }
  16. void CursorManager::setMode(const QString &mode) {
  17. setMode(CursorModeUtils::fromString(mode));
  18. }
  19. void CursorManager::updateCursorShape(QQuickWindow *window) {
  20. if (!window)
  21. return;
  22. Qt::CursorShape desiredCursor =
  23. (m_cursorMode == CursorMode::Normal) ? Qt::ArrowCursor : Qt::BlankCursor;
  24. if (m_currentCursor != desiredCursor) {
  25. m_currentCursor = desiredCursor;
  26. window->setCursor(desiredCursor);
  27. }
  28. }
  29. qreal CursorManager::globalCursorX(QQuickWindow *window) const {
  30. if (!window)
  31. return 0;
  32. QPoint globalPos = QCursor::pos();
  33. QPoint localPos = window->mapFromGlobal(globalPos);
  34. return localPos.x();
  35. }
  36. qreal CursorManager::globalCursorY(QQuickWindow *window) const {
  37. if (!window)
  38. return 0;
  39. QPoint globalPos = QCursor::pos();
  40. QPoint localPos = window->mapFromGlobal(globalPos);
  41. return localPos.y();
  42. }
  43. void CursorManager::setPatrolFirstWaypoint(const QVector3D &waypoint) {
  44. m_firstWaypoint = waypoint;
  45. m_hasFirstWaypoint = true;
  46. }
  47. void CursorManager::clearPatrolFirstWaypoint() { m_hasFirstWaypoint = false; }