From c62f9007e9571ac0d164c5a8d5427542aed616cd Mon Sep 17 00:00:00 2001 From: beholder Date: Sun, 3 Sep 2017 15:20:59 +0300 Subject: [PATCH] 7196 Mouse pointer no longer visible in HMD mode The issue was caused by creation of additional instances of 'Cursor::Manager' in plugins, which happened because Cursor::Manager's code is inside static library so every module was getting its own copy of it. As the result cursor-related settings from Application never reached plugins. The fix is based on converting 'Cursor::Manager' into 'Dependency' to avoid additional instances creation in plugins --- interface/src/Application.cpp | 1 + libraries/ui/src/CursorManager.cpp | 14 +++----------- libraries/ui/src/CursorManager.h | 14 ++++++++++++-- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 88003bb10f..7e1348e172 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -604,6 +604,7 @@ bool setupEssentials(int& argc, char** argv, bool runningMarkerExisted) { DependencyManager::registerInheritance(); // Set dependencies + DependencyManager::set(); DependencyManager::set(std::bind(&Application::getUserAgent, qApp)); DependencyManager::set(); DependencyManager::set(ScriptEngine::CLIENT_SCRIPT); diff --git a/libraries/ui/src/CursorManager.cpp b/libraries/ui/src/CursorManager.cpp index 106574ff4f..8eb4989ab6 100644 --- a/libraries/ui/src/CursorManager.cpp +++ b/libraries/ui/src/CursorManager.cpp @@ -24,13 +24,6 @@ namespace Cursor { return _icon; } - - class MouseInstance : public Instance { - Source getType() const override { - return Source::MOUSE; - } - }; - QMap Manager::ICON_NAMES { { Icon::SYSTEM, "SYSTEM", }, { Icon::DEFAULT, "DEFAULT", }, @@ -38,7 +31,7 @@ namespace Cursor { { Icon::ARROW, "ARROW", }, { Icon::RETICLE, "RETICLE", }, }; - QMap Manager::ICONS; + static uint16_t _customIconId = Icon::USER_BASE; Manager::Manager() { @@ -62,8 +55,8 @@ namespace Cursor { } Manager& Manager::instance() { - static Manager instance; - return instance; + static QSharedPointer instance = DependencyManager::get(); + return *instance; } QList Manager::registeredIcons() const { @@ -76,7 +69,6 @@ namespace Cursor { Instance* Manager::getCursor(uint8_t index) { Q_ASSERT(index < getCount()); - static MouseInstance mouseInstance; if (index == 0) { return &mouseInstance; } diff --git a/libraries/ui/src/CursorManager.h b/libraries/ui/src/CursorManager.h index 2a92cc7f45..02ab99ee4b 100644 --- a/libraries/ui/src/CursorManager.h +++ b/libraries/ui/src/CursorManager.h @@ -8,6 +8,7 @@ #pragma once #include +#include #include @@ -39,7 +40,15 @@ namespace Cursor { uint16_t _icon; }; - class Manager { + class MouseInstance : public Instance { + Source getType() const override { + return Source::MOUSE; + } + }; + + class Manager : public QObject, public Dependency { + SINGLETON_DEPENDENCY + Manager(); Manager(const Manager& other) = delete; public: @@ -52,12 +61,13 @@ namespace Cursor { QList registeredIcons() const; const QString& getIconImage(uint16_t icon); - static QMap ICONS; static QMap ICON_NAMES; static Icon lookupIcon(const QString& name); static const QString& getIconName(const Icon& icon); private: + MouseInstance mouseInstance; float _scale{ 1.0f }; + QMap ICONS; }; }