move contextoverlay connection to contextoverlayinterface

This commit is contained in:
SamGondelman 2017-10-13 16:23:29 -07:00
parent 5bfb0baf09
commit c4e6cb28ce
4 changed files with 9 additions and 25 deletions

View file

@ -682,7 +682,6 @@ bool setupEssentials(int& argc, char** argv, bool runningMarkerExisted) {
DependencyManager::set<CloseEventSender>(); DependencyManager::set<CloseEventSender>();
DependencyManager::set<ResourceManager>(); DependencyManager::set<ResourceManager>();
DependencyManager::set<SelectionScriptingInterface>(); DependencyManager::set<SelectionScriptingInterface>();
DependencyManager::set<ContextOverlayInterface>();
DependencyManager::set<Ledger>(); DependencyManager::set<Ledger>();
DependencyManager::set<Wallet>(); DependencyManager::set<Wallet>();
DependencyManager::set<WalletScriptingInterface>(); DependencyManager::set<WalletScriptingInterface>();
@ -1173,7 +1172,10 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo
// allow you to move an entity around in your hand // allow you to move an entity around in your hand
_entityEditSender.setPacketsPerSecond(3000); // super high!! _entityEditSender.setPacketsPerSecond(3000); // super high!!
// Overlays need to exist before we set the ContextOverlayInterface dependency
_overlays.init(); // do this before scripts load _overlays.init(); // do this before scripts load
DependencyManager::set<ContextOverlayInterface>();
// Make sure we don't time out during slow operations at startup // Make sure we don't time out during slow operations at startup
updateHeartbeat(); updateHeartbeat();

View file

@ -61,6 +61,10 @@ ContextOverlayInterface::ContextOverlayInterface() {
}); });
connect(entityScriptingInterface, &EntityScriptingInterface::deletingEntity, this, &ContextOverlayInterface::deletingEntity); connect(entityScriptingInterface, &EntityScriptingInterface::deletingEntity, this, &ContextOverlayInterface::deletingEntity);
connect(&qApp->getOverlays(), &Overlays::mousePressOnOverlay, this, &ContextOverlayInterface::contextOverlays_mousePressOnOverlay);
connect(&qApp->getOverlays(), &Overlays::hoverEnterOverlay, this, &ContextOverlayInterface::contextOverlays_hoverEnterOverlay);
connect(&qApp->getOverlays(), &Overlays::hoverLeaveOverlay, this, &ContextOverlayInterface::contextOverlays_hoverLeaveOverlay);
connect(_selectionScriptingInterface.data(), &SelectionScriptingInterface::selectedItemsListChanged, &_selectionToSceneHandler, &SelectionToSceneHandler::selectedItemsListChanged); connect(_selectionScriptingInterface.data(), &SelectionScriptingInterface::selectedItemsListChanged, &_selectionToSceneHandler, &SelectionToSceneHandler::selectedItemsListChanged);
} }

View file

@ -37,8 +37,6 @@
#include "Web3DOverlay.h" #include "Web3DOverlay.h"
#include <QtQuick/QQuickWindow> #include <QtQuick/QQuickWindow>
#include "ui/overlays/ContextOverlayInterface.h"
Q_LOGGING_CATEGORY(trace_render_overlays, "trace.render.overlays") Q_LOGGING_CATEGORY(trace_render_overlays, "trace.render.overlays")
extern void initOverlay3DPipelines(render::ShapePlumber& plumber, bool depthTest = false); extern void initOverlay3DPipelines(render::ShapePlumber& plumber, bool depthTest = false);
@ -731,7 +729,7 @@ void Overlays::sendMouseMoveOnOverlay(const OverlayID& overlayID, const PointerE
} }
void Overlays::sendHoverEnterOverlay(const OverlayID& overlayID, const PointerEvent& event) { void Overlays::sendHoverEnterOverlay(const OverlayID& overlayID, const PointerEvent& event) {
hoverEnterEvent(overlayID, event); emit hoverEnterOverlay(overlayID, event);
} }
void Overlays::sendHoverOverOverlay(const OverlayID& overlayID, const PointerEvent& event) { void Overlays::sendHoverOverOverlay(const OverlayID& overlayID, const PointerEvent& event) {
@ -892,10 +890,6 @@ bool Overlays::mousePressEvent(QMouseEvent* event) {
} }
void Overlays::mousePressEvent(const OverlayID& overlayID, const PointerEvent& event) { void Overlays::mousePressEvent(const OverlayID& overlayID, const PointerEvent& event) {
// Send press to context overlay
// contextOverlays_mousePressOnOverlay is not threadsafe and mousePressEvent can be called from scripts, so use an auto connection
QMetaObject::invokeMethod(DependencyManager::get<ContextOverlayInterface>().data(), "contextOverlays_mousePressOnOverlay", Q_ARG(OverlayID, overlayID), Q_ARG(PointerEvent, event));
// TODO: generalize this to allow any overlay to recieve events // TODO: generalize this to allow any overlay to recieve events
auto thisOverlay = std::dynamic_pointer_cast<Web3DOverlay>(getOverlay(overlayID)); auto thisOverlay = std::dynamic_pointer_cast<Web3DOverlay>(getOverlay(overlayID));
if (thisOverlay) { if (thisOverlay) {
@ -929,20 +923,7 @@ bool Overlays::mouseDoublePressEvent(QMouseEvent* event) {
return false; return false;
} }
void Overlays::hoverEnterEvent(const OverlayID& overlayID, const PointerEvent& event) {
// Send hoverEnter to context overlay
// contextOverlays_hoverEnterOverlay is not threadsafe and hoverEnterEvent can be called from scripts, so use an auto connection
QMetaObject::invokeMethod(DependencyManager::get<ContextOverlayInterface>().data(), "contextOverlays_hoverEnterOverlay", Q_ARG(OverlayID, overlayID), Q_ARG(PointerEvent, event));
// emit to scripts
emit hoverEnterOverlay(overlayID, event);
}
void Overlays::hoverLeaveEvent(const OverlayID& overlayID, const PointerEvent& event) { void Overlays::hoverLeaveEvent(const OverlayID& overlayID, const PointerEvent& event) {
// Send hoverLeave to context overlay
// contextOverlays_hoverLeaveOverlay is not threadsafe and hoverLeaveEvent can be called from scripts, so use an auto connection
QMetaObject::invokeMethod(DependencyManager::get<ContextOverlayInterface>().data(), "contextOverlays_hoverLeaveOverlay", Q_ARG(OverlayID, overlayID), Q_ARG(PointerEvent, event));
// TODO: generalize this to allow any overlay to recieve events // TODO: generalize this to allow any overlay to recieve events
auto thisOverlay = std::dynamic_pointer_cast<Web3DOverlay>(getOverlay(overlayID)); auto thisOverlay = std::dynamic_pointer_cast<Web3DOverlay>(getOverlay(overlayID));
if (thisOverlay) { if (thisOverlay) {
@ -997,7 +978,7 @@ bool Overlays::mouseMoveEvent(QMouseEvent* event) {
// If hovering over a new overlay then enter hover on that overlay. // If hovering over a new overlay then enter hover on that overlay.
if (rayPickResult.overlayID != _currentHoverOverOverlayID) { if (rayPickResult.overlayID != _currentHoverOverOverlayID) {
hoverEnterEvent(rayPickResult.overlayID, pointerEvent); emit hoverEnterOverlay(rayPickResult.overlayID, pointerEvent);
} }
// Hover over current overlay. // Hover over current overlay.

View file

@ -110,7 +110,6 @@ public:
void mousePressEvent(const OverlayID& overlayID, const PointerEvent& event); void mousePressEvent(const OverlayID& overlayID, const PointerEvent& event);
void mouseMoveEvent(const OverlayID& overlayID, const PointerEvent& event); void mouseMoveEvent(const OverlayID& overlayID, const PointerEvent& event);
void mouseReleaseEvent(const OverlayID& overlayID, const PointerEvent& event); void mouseReleaseEvent(const OverlayID& overlayID, const PointerEvent& event);
void hoverEnterEvent(const OverlayID& overlayID, const PointerEvent& event);
void hoverLeaveEvent(const OverlayID& overlayID, const PointerEvent& event); void hoverLeaveEvent(const OverlayID& overlayID, const PointerEvent& event);
void cleanupAllOverlays(); void cleanupAllOverlays();
@ -321,8 +320,6 @@ signals:
void overlayDeleted(OverlayID id); void overlayDeleted(OverlayID id);
void panelDeleted(OverlayID id); void panelDeleted(OverlayID id);
// Nothing should need to connect to these signals in C++
// They are only for scripts to connect to
void mousePressOnOverlay(OverlayID overlayID, const PointerEvent& event); void mousePressOnOverlay(OverlayID overlayID, const PointerEvent& event);
void mouseDoublePressOnOverlay(OverlayID overlayID, const PointerEvent& event); void mouseDoublePressOnOverlay(OverlayID overlayID, const PointerEvent& event);
void mouseReleaseOnOverlay(OverlayID overlayID, const PointerEvent& event); void mouseReleaseOnOverlay(OverlayID overlayID, const PointerEvent& event);