cursor_manager.cpp 1.5 KB

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