From 5995c3717f44a26d6a2caf7999d47d0ada64b338 Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Fri, 26 Feb 2016 14:42:00 -0800 Subject: [PATCH] Continue updating overlay key on edit --- interface/src/ui/overlays/Overlays.cpp | 20 ++++++++------------ libraries/render/src/render/Item.cpp | 7 +++++++ libraries/render/src/render/Item.h | 8 +++----- libraries/render/src/render/Scene.h | 1 + 4 files changed, 19 insertions(+), 17 deletions(-) diff --git a/interface/src/ui/overlays/Overlays.cpp b/interface/src/ui/overlays/Overlays.cpp index 2bc1286419..5a2d05815b 100644 --- a/interface/src/ui/overlays/Overlays.cpp +++ b/interface/src/ui/overlays/Overlays.cpp @@ -233,23 +233,19 @@ bool Overlays::editOverlay(unsigned int id, const QScriptValue& properties) { Overlay::Pointer thisOverlay = getOverlay(id); if (thisOverlay) { + thisOverlay->setProperties(properties); + if (thisOverlay->is3D()) { - render::ItemKey oldItemKey = render::payloadGetKey(thisOverlay); - - thisOverlay->setProperties(properties); - - render::ItemKey itemKey = render::payloadGetKey(thisOverlay); - if (itemKey != oldItemKey) { - auto itemID = thisOverlay->getRenderItemID(); - if (render::Item::isValidID(itemID)) { - render::ScenePointer scene = qApp->getMain3DScene(); + auto itemID = thisOverlay->getRenderItemID(); + if (render::Item::isValidID(itemID)) { + render::ScenePointer scene = qApp->getMain3DScene(); + const render::Item& item = scene->getItem(itemID); + if (item.getKey() != render::payloadGetKey(thisOverlay)) { render::PendingChanges pendingChanges; - pendingChanges.resortItem(itemID, oldItemKey, itemKey); + pendingChanges.updateItem(itemID); scene->enqueuePendingChanges(pendingChanges); } } - } else { - thisOverlay->setProperties(properties); } return true; diff --git a/libraries/render/src/render/Item.cpp b/libraries/render/src/render/Item.cpp index e5356c2b0c..f80563bf73 100644 --- a/libraries/render/src/render/Item.cpp +++ b/libraries/render/src/render/Item.cpp @@ -63,6 +63,13 @@ void Item::PayloadInterface::addStatusGetters(const Status::Getters& getters) { } } +void Item::update(const UpdateFunctorPointer& updateFunctor) { + if (updateFunctor) { + _payload->update(updateFunctor); + } + _key = _payload->getKey(); +} + void Item::resetPayload(const PayloadPointer& payload) { if (!payload) { kill(); diff --git a/libraries/render/src/render/Item.h b/libraries/render/src/render/Item.h index 53e1f3f0df..ddc5a92c9d 100644 --- a/libraries/render/src/render/Item.h +++ b/libraries/render/src/render/Item.h @@ -313,13 +313,11 @@ public: Item() {} ~Item() {} - // Main scene / item managment interface Reset/Update/Kill + // Main scene / item managment interface reset/update/kill void resetPayload(const PayloadPointer& payload); void resetCell(ItemCell cell, bool _small) { _cell = cell; _key.setSmaller(_small); } - // Communicate the update to the payload - void update(const UpdateFunctorPointer& updateFunctor) { _payload->update(updateFunctor); _key = _payload->getKey(); } - // Forget the payload, key, and cell - void kill() { _payload.reset(); _key._flags.reset(); _cell = INVALID_CELL; } + void update(const UpdateFunctorPointer& updateFunctor); // communicate update to payload + void kill() { _payload.reset(); _key._flags.reset(); _cell = INVALID_CELL; } // forget the payload, key, cell // Check heuristic key const ItemKey& getKey() const { return _key; } diff --git a/libraries/render/src/render/Scene.h b/libraries/render/src/render/Scene.h index 8516c234dd..40c0baca60 100644 --- a/libraries/render/src/render/Scene.h +++ b/libraries/render/src/render/Scene.h @@ -32,6 +32,7 @@ public: } void updateItem(ItemID id, const UpdateFunctorPointer& functor); + void updateItem(ItemID id) { updateItem(id, nullptr); } void merge(PendingChanges& changes);