diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index c73d6614f1..bc9fa25af0 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -69,7 +69,7 @@ #include #include #include -#include +#include "ui/overlays/HoverOverlayInterface.h" #include #include #include diff --git a/interface/src/ui/overlays/HoverOverlayInterface.cpp b/interface/src/ui/overlays/HoverOverlayInterface.cpp new file mode 100644 index 0000000000..8576c0b622 --- /dev/null +++ b/interface/src/ui/overlays/HoverOverlayInterface.cpp @@ -0,0 +1,72 @@ +// +// HoverOverlayInterface.cpp +// interface/src/ui/overlays +// +// Created by Zach Fox on 2017-07-14. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include "HoverOverlayInterface.h" +#include "Application.h" +#include + +HoverOverlayInterface::HoverOverlayInterface() { + // "hover_overlay" debug log category disabled by default. + // Create your own "qtlogging.ini" file and set your "QT_LOGGING_CONF" environment variable + // if you'd like to enable/disable certain categories. + // More details: http://doc.qt.io/qt-5/qloggingcategory.html#configuring-categories + QLoggingCategory::setFilterRules(QStringLiteral("hifi.hover_overlay.debug=false")); + + _entityScriptingInterface = DependencyManager::get(); + _entityPropertyFlags += PROP_POSITION; + _entityPropertyFlags += PROP_ROTATION; + + auto entityTreeRenderer = DependencyManager::get().data(); + connect(entityTreeRenderer, SIGNAL(hoverEnterEntity(const EntityItemID&, const PointerEvent&)), this, SLOT(createHoverOverlay(const EntityItemID&, const PointerEvent&))); + connect(entityTreeRenderer, SIGNAL(hoverLeaveEntity(const EntityItemID&, const PointerEvent&)), this, SLOT(destroyHoverOverlay(const EntityItemID&, const PointerEvent&))); +} + +void HoverOverlayInterface::createHoverOverlay(const EntityItemID& entityItemID, const PointerEvent& event) { + qCDebug(hover_overlay) << "Creating Hover Overlay on top of entity with ID: " << entityItemID; + setCurrentHoveredEntity(entityItemID); + + EntityItemProperties entityProperties = _entityScriptingInterface->getEntityProperties(entityItemID, _entityPropertyFlags); + + if (_hoverOverlayID == UNKNOWN_OVERLAY_ID || !qApp->getOverlays().isAddedOverlay(_hoverOverlayID)) { + _hoverOverlay = std::make_shared(); + _hoverOverlay->setAlpha(1.0f); + _hoverOverlay->setBorderSize(1.0f); + _hoverOverlay->setColor({ 0xFF, 0xEF, 0x00 }); + _hoverOverlay->setIsSolid(true); + _hoverOverlay->setPulseMin(0.5); + _hoverOverlay->setPulseMax(1.0); + _hoverOverlay->setColorPulse(1.0); + _hoverOverlay->setIgnoreRayIntersection(false); + _hoverOverlay->setDrawInFront(false); + _hoverOverlayID = qApp->getOverlays().addOverlay(_hoverOverlay); + } + + _hoverOverlay->setPosition(entityProperties.getPosition()); + _hoverOverlay->setRotation(entityProperties.getRotation()); + _hoverOverlay->setVisible(true); +} + +void HoverOverlayInterface::createHoverOverlay(const EntityItemID& entityItemID) { + HoverOverlayInterface::createHoverOverlay(entityItemID, PointerEvent()); +} + +void HoverOverlayInterface::destroyHoverOverlay(const EntityItemID& entityItemID, const PointerEvent& event) { + qCDebug(hover_overlay) << "Destroying Hover Overlay on top of entity with ID: " << entityItemID; + setCurrentHoveredEntity(QUuid()); + + qApp->getOverlays().deleteOverlay(_hoverOverlayID); + _hoverOverlay = NULL; + _hoverOverlayID = UNKNOWN_OVERLAY_ID; +} + +void HoverOverlayInterface::destroyHoverOverlay(const EntityItemID& entityItemID) { + HoverOverlayInterface::destroyHoverOverlay(entityItemID, PointerEvent()); +} diff --git a/libraries/entities/src/HoverOverlayInterface.h b/interface/src/ui/overlays/HoverOverlayInterface.h similarity index 67% rename from libraries/entities/src/HoverOverlayInterface.h rename to interface/src/ui/overlays/HoverOverlayInterface.h index 1e56cc03dd..8322c3e75c 100644 --- a/libraries/entities/src/HoverOverlayInterface.h +++ b/interface/src/ui/overlays/HoverOverlayInterface.h @@ -1,6 +1,6 @@ // // HoverOverlayInterface.h -// libraries/entities/src +// interface/src/ui/overlays // // Created by Zach Fox on 2017-07-14. // Copyright 2017 High Fidelity, Inc. @@ -18,14 +18,24 @@ #include #include +#include "EntityScriptingInterface.h" +#include "ui/overlays/Cube3DOverlay.h" +#include "ui/overlays/Overlays.h" #include "EntityTree.h" #include "HoverOverlayLogging.h" +/**jsdoc +* @namespace HoverOverlay +*/ class HoverOverlayInterface : public QObject, public Dependency { Q_OBJECT Q_PROPERTY(QUuid currentHoveredEntity READ getCurrentHoveredEntity WRITE setCurrentHoveredEntity) + QSharedPointer _entityScriptingInterface; + EntityPropertyFlags _entityPropertyFlags; + OverlayID _hoverOverlayID { UNKNOWN_OVERLAY_ID }; + std::shared_ptr _hoverOverlay { nullptr }; public: HoverOverlayInterface(); @@ -34,11 +44,14 @@ public: public slots: void createHoverOverlay(const EntityItemID& entityItemID, const PointerEvent& event); + void createHoverOverlay(const EntityItemID& entityItemID); void destroyHoverOverlay(const EntityItemID& entityItemID, const PointerEvent& event); + void destroyHoverOverlay(const EntityItemID& entityItemID); private: bool _verboseLogging { true }; - QUuid _currentHoveredEntity{}; + QUuid _currentHoveredEntity {}; + }; #endif // hifi_HoverOverlayInterface_h diff --git a/libraries/entities/src/HoverOverlayLogging.cpp b/interface/src/ui/overlays/HoverOverlayLogging.cpp similarity index 92% rename from libraries/entities/src/HoverOverlayLogging.cpp rename to interface/src/ui/overlays/HoverOverlayLogging.cpp index 99a2dff782..69c977a58c 100644 --- a/libraries/entities/src/HoverOverlayLogging.cpp +++ b/interface/src/ui/overlays/HoverOverlayLogging.cpp @@ -1,6 +1,6 @@ // // HoverOverlayLogging.cpp -// libraries/entities/src +// interface/src/ui/overlays // // Created by Zach Fox on 2017-07-17 // Copyright 2017 High Fidelity, Inc. diff --git a/libraries/entities/src/HoverOverlayLogging.h b/interface/src/ui/overlays/HoverOverlayLogging.h similarity index 93% rename from libraries/entities/src/HoverOverlayLogging.h rename to interface/src/ui/overlays/HoverOverlayLogging.h index f0a024bba9..965a1c6d03 100644 --- a/libraries/entities/src/HoverOverlayLogging.h +++ b/interface/src/ui/overlays/HoverOverlayLogging.h @@ -1,6 +1,6 @@ // // HoverOverlayLogging.h -// libraries/entities/src +// interface/src/ui/overlays // // Created by Zach Fox on 2017-07-17 // Copyright 2017 High Fidelity, Inc. diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index 475471b0fb..a8eca41077 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -26,7 +26,6 @@ #include #include #include -#include #include "RenderableEntityItem.h" @@ -453,8 +452,6 @@ RayToEntityIntersectionResult EntityTreeRenderer::findRayIntersectionWorker(cons void EntityTreeRenderer::connectSignalsToSlots(EntityScriptingInterface* entityScriptingInterface) { - auto hoverOverlayInterface = DependencyManager::get().data(); - connect(this, &EntityTreeRenderer::mousePressOnEntity, entityScriptingInterface, &EntityScriptingInterface::mousePressOnEntity); connect(this, &EntityTreeRenderer::mouseMoveOnEntity, entityScriptingInterface, &EntityScriptingInterface::mouseMoveOnEntity); connect(this, &EntityTreeRenderer::mouseReleaseOnEntity, entityScriptingInterface, &EntityScriptingInterface::mouseReleaseOnEntity); @@ -464,12 +461,8 @@ void EntityTreeRenderer::connectSignalsToSlots(EntityScriptingInterface* entityS connect(this, &EntityTreeRenderer::clickReleaseOnEntity, entityScriptingInterface, &EntityScriptingInterface::clickReleaseOnEntity); connect(this, &EntityTreeRenderer::hoverEnterEntity, entityScriptingInterface, &EntityScriptingInterface::hoverEnterEntity); - connect(this, &EntityTreeRenderer::hoverEnterEntity, hoverOverlayInterface, &HoverOverlayInterface::createHoverOverlay); - connect(this, &EntityTreeRenderer::hoverOverEntity, entityScriptingInterface, &EntityScriptingInterface::hoverOverEntity); - connect(this, &EntityTreeRenderer::hoverLeaveEntity, entityScriptingInterface, &EntityScriptingInterface::hoverLeaveEntity); - connect(this, &EntityTreeRenderer::hoverLeaveEntity, hoverOverlayInterface, &HoverOverlayInterface::destroyHoverOverlay); connect(this, &EntityTreeRenderer::enterEntity, entityScriptingInterface, &EntityScriptingInterface::enterEntity); connect(this, &EntityTreeRenderer::leaveEntity, entityScriptingInterface, &EntityScriptingInterface::leaveEntity); diff --git a/libraries/entities/src/HoverOverlayInterface.cpp b/libraries/entities/src/HoverOverlayInterface.cpp deleted file mode 100644 index 85b2738fc4..0000000000 --- a/libraries/entities/src/HoverOverlayInterface.cpp +++ /dev/null @@ -1,30 +0,0 @@ -// -// HoverOverlayInterface.cpp -// libraries/entities/src -// -// Created by Zach Fox on 2017-07-14. -// Copyright 2017 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// - -#include "HoverOverlayInterface.h" - -HoverOverlayInterface::HoverOverlayInterface() { - // "hover_overlay" debug log category disabled by default. - // Create your own "qtlogging.ini" file and set your "QT_LOGGING_CONF" environment variable - // if you'd like to enable/disable certain categories. - // More details: http://doc.qt.io/qt-5/qloggingcategory.html#configuring-categories - QLoggingCategory::setFilterRules(QStringLiteral("hifi.hover_overlay.debug=false")); -} - -void HoverOverlayInterface::createHoverOverlay(const EntityItemID& entityItemID, const PointerEvent& event) { - qCDebug(hover_overlay) << "Creating Hover Overlay on top of entity with ID: " << entityItemID; - setCurrentHoveredEntity(entityItemID); -} - -void HoverOverlayInterface::destroyHoverOverlay(const EntityItemID& entityItemID, const PointerEvent& event) { - qCDebug(hover_overlay) << "Destroying Hover Overlay on top of entity with ID: " << entityItemID; - setCurrentHoveredEntity(QUuid()); -}