diff --git a/app/node/block/transition/transition.cpp b/app/node/block/transition/transition.cpp index 7e4b8c439..559b871c8 100644 --- a/app/node/block/transition/transition.cpp +++ b/app/node/block/transition/transition.cpp @@ -6,10 +6,14 @@ TransitionBlock::TransitionBlock() : { out_block_input_ = new NodeInput("out_block_in", NodeParam::kBuffer); out_block_input_->set_is_keyframable(false); + connect(out_block_input_, &NodeParam::EdgeAdded, this, &TransitionBlock::BlockConnected); + connect(out_block_input_, &NodeParam::EdgeRemoved, this, &TransitionBlock::BlockDisconnected); AddInput(out_block_input_); in_block_input_ = new NodeInput("in_block_in", NodeParam::kBuffer); in_block_input_->set_is_keyframable(false); + connect(in_block_input_, &NodeParam::EdgeAdded, this, &TransitionBlock::BlockConnected); + connect(in_block_input_, &NodeParam::EdgeRemoved, this, &TransitionBlock::BlockDisconnected); AddInput(in_block_input_); } @@ -43,3 +47,27 @@ rational TransitionBlock::out_offset() const { return 0; } + +void TransitionBlock::BlockConnected(NodeEdgePtr edge) +{ + if (!edge->output()->parentNode()->IsBlock()) { + return; + } + + Block* block = static_cast(edge->output()->parentNode()); + + if (edge->input() == out_block_input_) { + connected_out_block_ = block; + } else { + connected_in_block_ = block; + } +} + +void TransitionBlock::BlockDisconnected(NodeEdgePtr edge) +{ + if (edge->input() == out_block_input_) { + connected_out_block_ = nullptr; + } else { + connected_in_block_ = nullptr; + } +} diff --git a/app/node/block/transition/transition.h b/app/node/block/transition/transition.h index b230f6016..0d6e258e4 100644 --- a/app/node/block/transition/transition.h +++ b/app/node/block/transition/transition.h @@ -18,6 +18,9 @@ public: rational in_offset() const; rational out_offset() const; + Block* connected_out_block() const; + Block* connected_in_block() const; + private: NodeInput* out_block_input_; @@ -27,6 +30,11 @@ private: Block* connected_in_block_; +private slots: + void BlockConnected(NodeEdgePtr edge); + + void BlockDisconnected(NodeEdgePtr edge); + }; #endif // TRANSITIONBLOCK_H