diff --git a/app/node/node.cpp b/app/node/node.cpp index 907287880..62580f280 100644 --- a/app/node/node.cpp +++ b/app/node/node.cpp @@ -50,8 +50,7 @@ Node::Node() : folder_(nullptr), operation_stack_(0), cache_result_(false), - flags_(kNone), - effect_element_(-1) + flags_(kNone) { AddInput(kEnabledInput, NodeValue::kBoolean, true); } diff --git a/app/node/node.h b/app/node/node.h index 4f45277d6..dccd13f9c 100644 --- a/app/node/node.h +++ b/app/node/node.h @@ -552,7 +552,12 @@ public: NodeInput GetEffectInput() { - return effect_input_.isEmpty() ? NodeInput() : NodeInput(this, effect_input_, effect_element_); + return effect_input_.isEmpty() ? NodeInput() : NodeInput(this, effect_input_); + } + + const QString &GetEffectInputID() const + { + return effect_input_; } class ValueHint { @@ -1047,10 +1052,9 @@ protected: virtual void childEvent(QChildEvent *event) override; - void SetEffectInput(const QString &input, int element = -1) + void SetEffectInput(const QString &input) { effect_input_ = input; - effect_element_ = element; } void SetToolTip(const QString& s) @@ -1369,7 +1373,6 @@ private: QVector gizmos_; QString effect_input_; - int effect_element_; private slots: /** diff --git a/app/node/traverser.cpp b/app/node/traverser.cpp index 103702fa3..7b8958f4e 100644 --- a/app/node/traverser.cpp +++ b/app/node/traverser.cpp @@ -269,7 +269,15 @@ NodeValueTable NodeTraverser::GenerateTable(const Node *n, const Node::ValueHint return table; } else { - return database.Merge(); + // If this node has an effect input, ensure that is pushed last + NodeValueTable primary; + if (!n->GetEffectInputID().isEmpty()) { + primary = database.Take(n->GetEffectInputID()); + } + + NodeValueTable m = database.Merge(); + m.Push(primary); + return m; } } diff --git a/app/node/value.h b/app/node/value.h index d894a7d35..886b4f470 100644 --- a/app/node/value.h +++ b/app/node/value.h @@ -340,6 +340,11 @@ public: values_.append(value); } + void Push(const NodeValueTable& value) + { + values_.append(value.values_); + } + void Push(NodeValue::Type type, const QVariant& data, const Node *from, bool array = false, const QString& tag = QString()) { Push(NodeValue(type, data, from, array, tag)); diff --git a/app/node/valuedatabase.h b/app/node/valuedatabase.h index 725ed1e62..80574b371 100644 --- a/app/node/valuedatabase.h +++ b/app/node/valuedatabase.h @@ -41,6 +41,11 @@ public: tables_.insert(key, value); } + NodeValueTable Take(const QString &key) + { + return tables_.take(key); + } + NodeValueTable Merge() const; using Tables = QHash;