conformed viewer node/panel affinity

This commit is contained in:
itsmattkc
2019-09-20 05:12:34 +10:00
parent 814ee14c0b
commit 389e723416
7 changed files with 103 additions and 65 deletions
+55 -3
View File
@@ -29,7 +29,8 @@
#include "viewersizer.h"
ViewerWidget::ViewerWidget(QWidget *parent) :
QWidget(parent)
QWidget(parent),
viewer_node_(nullptr)
{
// Set up main layout
QVBoxLayout* layout = new QVBoxLayout(this);
@@ -121,9 +122,40 @@ bool ViewerWidget::IsPlaying()
return playback_timer_.isActive();
}
void ViewerWidget::SetTexture(GLuint tex)
void ViewerWidget::ConnectViewerNode(ViewerOutput *node)
{
gl_widget_->SetTexture(tex);
if (viewer_node_ != nullptr) {
SetTimebase(0);
disconnect(viewer_node_, SIGNAL(TimebaseChanged(const rational&)), this, SLOT(SetTimebase(const rational&)));
disconnect(viewer_node_, SIGNAL(TextureChangedBetween(const rational&, const rational&)), this, SLOT(ViewerNodeChangedBetween(const rational&, const rational&)));
}
viewer_node_ = node;
// Set texture to new texture (or null if no viewer node is available)
UpdateTextureFromNode(GetTime());
if (viewer_node_ != nullptr) {
SetTimebase(viewer_node_->Timebase());
connect(viewer_node_, SIGNAL(TimebaseChanged(const rational&)), this, SLOT(SetTimebase(const rational&)));
connect(viewer_node_, SIGNAL(TextureChangedBetween(const rational&, const rational&)), this, SLOT(ViewerNodeChangedBetween(const rational&, const rational&)));
}
}
void ViewerWidget::DisconnectViewerNode()
{
ConnectViewerNode(nullptr);
}
void ViewerWidget::SetTexture(RenderTexturePtr tex)
{
if (tex == nullptr) {
gl_widget_->SetTexture(0);
} else {
gl_widget_->SetTexture(tex->texture());
}
}
void ViewerWidget::UpdateTimeInternal(int64_t i)
@@ -132,9 +164,22 @@ void ViewerWidget::UpdateTimeInternal(int64_t i)
controls_->SetTime(i);
if (viewer_node_ != nullptr) {
UpdateTextureFromNode(time_set);
}
emit TimeChanged(time_set);
}
void ViewerWidget::UpdateTextureFromNode(const rational& time)
{
if (viewer_node_ == nullptr) {
SetTexture(nullptr);
} else {
SetTexture(viewer_node_->GetTexture(time));
}
}
void ViewerWidget::RulerTimeChange(int64_t i)
{
Pause();
@@ -201,6 +246,13 @@ void ViewerWidget::PlaybackTimerUpdate()
SetTime(start_timestamp_ + frames_since_start);
}
void ViewerWidget::ViewerNodeChangedBetween(const rational &start, const rational &end)
{
if (GetTime() >= start && GetTime() <= end) {
UpdateTextureFromNode(GetTime());
}
}
void ViewerWidget::resizeEvent(QResizeEvent *event)
{
// Set scrollbar page step to the width