From 4a650ff2bb81efcdea2c8ff33a19396085266816 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Sun, 19 Feb 2017 18:37:35 -0800 Subject: [PATCH] Overlays::getOverlayAtPoint was depending on the order in which the overlays were added --- interface/src/ui/overlays/Overlay.h | 5 +++++ interface/src/ui/overlays/Overlays.cpp | 10 ++++++++-- interface/src/ui/overlays/Overlays.h | 1 + .../script-engine/src/TabletScriptingInterface.cpp | 2 +- scripts/tutorials/createDice.js | 4 ++-- 5 files changed, 17 insertions(+), 5 deletions(-) diff --git a/interface/src/ui/overlays/Overlay.h b/interface/src/ui/overlays/Overlay.h index 0c96af1a99..9ad4f0ba70 100644 --- a/interface/src/ui/overlays/Overlay.h +++ b/interface/src/ui/overlays/Overlay.h @@ -91,6 +91,9 @@ public: render::ItemID getRenderItemID() const { return _renderItemID; } void setRenderItemID(render::ItemID renderItemID) { _renderItemID = renderItemID; } + unsigned int getStackOrder() const { return _stackOrder; } + void setStackOrder(unsigned int stackOrder) { _stackOrder = stackOrder; } + protected: float updatePulse(); @@ -113,6 +116,8 @@ protected: bool _visible; // should the overlay be drawn at all Anchor _anchor; + unsigned int _stackOrder { 0 }; + private: OverlayID _overlayID; // only used for non-3d overlays }; diff --git a/interface/src/ui/overlays/Overlays.cpp b/interface/src/ui/overlays/Overlays.cpp index 6b120cab56..f3a78c9350 100644 --- a/interface/src/ui/overlays/Overlays.cpp +++ b/interface/src/ui/overlays/Overlays.cpp @@ -192,6 +192,7 @@ OverlayID Overlays::addOverlay(Overlay::Pointer overlay) { QWriteLocker lock(&_lock); OverlayID thisID = OverlayID(QUuid::createUuid()); overlay->setOverlayID(thisID); + overlay->setStackOrder(_stackOrder++); if (overlay->is3D()) { _overlaysWorld[thisID] = overlay; @@ -348,6 +349,8 @@ OverlayID Overlays::getOverlayAtPoint(const glm::vec2& point) { BoxFace thisFace; glm::vec3 thisSurfaceNormal; float distance; + unsigned int bestStackOrder = 0; + OverlayID bestOverlayID = UNKNOWN_OVERLAY_ID; while (i.hasPrevious()) { i.previous(); @@ -363,12 +366,15 @@ OverlayID Overlays::getOverlayAtPoint(const glm::vec2& point) { auto thisOverlay = std::dynamic_pointer_cast(i.value()); if (thisOverlay && thisOverlay->getVisible() && thisOverlay->isLoaded() && thisOverlay->getBoundingRect().contains(pointCopy.x, pointCopy.y, false)) { - return thisID; + if (thisOverlay->getStackOrder() > bestStackOrder) { + bestOverlayID = thisID; + bestStackOrder = thisOverlay->getStackOrder(); + } } } } - return UNKNOWN_OVERLAY_ID; // not found + return bestOverlayID; } OverlayPropertyResult Overlays::getProperty(OverlayID id, const QString& property) { diff --git a/interface/src/ui/overlays/Overlays.h b/interface/src/ui/overlays/Overlays.h index 4a4d6f9466..7c6ba34f58 100644 --- a/interface/src/ui/overlays/Overlays.h +++ b/interface/src/ui/overlays/Overlays.h @@ -305,6 +305,7 @@ private: QMap _overlaysWorld; QMap _panels; QList _overlaysToDelete; + unsigned int _stackOrder { 1 }; QReadWriteLock _lock; QReadWriteLock _deleteLock; diff --git a/libraries/script-engine/src/TabletScriptingInterface.cpp b/libraries/script-engine/src/TabletScriptingInterface.cpp index c78ce251c8..d66bb4d2f6 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.cpp +++ b/libraries/script-engine/src/TabletScriptingInterface.cpp @@ -172,7 +172,7 @@ static const char* WEB_VIEW_SOURCE_URL = "TabletWebView.qml"; static const char* VRMENU_SOURCE_URL = "TabletMenu.qml"; class TabletRootWindow : public QmlWindowClass { - virtual QString qmlSource() const { return "hifi/tablet/WindowRoot.qml"; } + virtual QString qmlSource() const override { return "hifi/tablet/WindowRoot.qml"; } }; TabletProxy::TabletProxy(QString name) : _name(name) { diff --git a/scripts/tutorials/createDice.js b/scripts/tutorials/createDice.js index 8975578c66..0d39d11d48 100644 --- a/scripts/tutorials/createDice.js +++ b/scripts/tutorials/createDice.js @@ -33,7 +33,7 @@ var BUTTON_SIZE = 32; var PADDING = 3; var BOTTOM_PADDING = 50; //a helper library for creating toolbars -Script.include("http://hifi-production.s3.amazonaws.com/tutorials/dice/toolBars.js"); +Script.include("/~/system/libraries/toolBars.js"); var toolBar = new ToolBar(0, 0, ToolBar.HORIZONTAL, "highfidelity.toolbars-dice", function(screenSize) { return { @@ -139,4 +139,4 @@ function scriptEnding() { } Controller.mousePressEvent.connect(mousePressEvent); -Script.scriptEnding.connect(scriptEnding); \ No newline at end of file +Script.scriptEnding.connect(scriptEnding);