barebones prototype of timeline/clip functionality

This commit is contained in:
itsmattkc
2019-07-28 02:30:26 -07:00
parent 32c7d089aa
commit 8d944387a2
13 changed files with 201 additions and 23 deletions
+20
View File
@@ -54,6 +54,11 @@ const rational &Block::out()
return out_point_;
}
void Block::set_length(const rational &length)
{
Q_UNUSED(length)
}
Block *Block::previous()
{
return ValueToPtr<Block>(previous_input_->get_value(0));
@@ -64,6 +69,16 @@ Block *Block::next()
return ValueToPtr<Block>(next_input_->get_value(0));
}
NodeInput *Block::previous_input()
{
return previous_input_;
}
NodeInput *Block::next_input()
{
return next_input_;
}
void Block::Process(const rational &time)
{
Q_UNUSED(time)
@@ -106,3 +121,8 @@ NodeOutput *Block::texture_output()
{
return texture_output_;
}
NodeOutput *Block::block_output()
{
return block_output_;
}
+5 -1
View File
@@ -41,12 +41,16 @@ public:
const rational& out();
virtual rational length() = 0;
virtual void set_length(const rational& length) = 0;
virtual void set_length(const rational& length);
virtual Block* previous();
virtual Block* next();
NodeInput* previous_input();
NodeInput* next_input();
NodeOutput* texture_output();
NodeOutput* block_output();
public slots:
virtual void Process(const rational &time) override;
+25
View File
@@ -27,6 +27,31 @@ ClipBlock::ClipBlock()
AddParameter(texture_input_);
}
QString ClipBlock::Name()
{
return tr("Clip");
}
QString ClipBlock::id()
{
return "org.olivevideoeditor.Olive.clip";
}
QString ClipBlock::Description()
{
return tr("A time-based node that represents a media source.");
}
rational ClipBlock::length()
{
return length_;
}
void ClipBlock::set_length(const rational &length)
{
length_ = length;
}
NodeInput *ClipBlock::texture_input()
{
return texture_input_;
+9
View File
@@ -32,6 +32,13 @@ class ClipBlock : public Block
public:
ClipBlock();
virtual QString Name() override;
virtual QString id() override;
virtual QString Description() override;
virtual rational length() override;
virtual void set_length(const rational &length) override;
NodeInput* texture_input();
public slots:
@@ -41,6 +48,8 @@ private:
NodeInput* texture_input_;
rational media_in_;
rational length_;
};
#endif // TIMELINEBLOCK_H
+41
View File
@@ -26,11 +26,52 @@ TimelineBlock::TimelineBlock() :
{
}
QString TimelineBlock::Name()
{
return tr("Timeline");
}
QString TimelineBlock::id()
{
return "org.olivevideoeditor.Olive.timeline";
}
QString TimelineBlock::Description()
{
return tr("Node for communicating between a Timeline panel and the node graph. Also represents the end of a Sequence.");
}
rational TimelineBlock::length()
{
return 0;
}
void TimelineBlock::AttachTimeline(TimelinePanel *timeline)
{
if (attached_timeline_ != nullptr) {
attached_timeline_->Clear();
}
attached_timeline_ = timeline;
if (attached_timeline_ != nullptr) {
attached_timeline_->Clear();
Block* previous_block = previous();
while (previous_block != nullptr) {
// FIXME: Dynamic cast is a dumb way of doing this
ClipBlock* clip_block = dynamic_cast<ClipBlock*>(previous_block);
if (clip_block != nullptr) {
attached_timeline_->AddClip(clip_block);
}
previous_block = previous_block->previous();
}
}
}
void TimelineBlock::Process(const rational &time)
{
// Run default process function
+4
View File
@@ -33,6 +33,10 @@ class TimelineBlock : public Block
public:
TimelineBlock();
virtual QString Name() override;
virtual QString id() override;
virtual QString Description() override;
virtual rational length() override;
void AttachTimeline(TimelinePanel* timeline);