From 150afb6ebcf62de0eb91750704813ad7a76806e7 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Fri, 27 Sep 2019 03:51:08 +1000 Subject: [PATCH] fixed hardcoded viewer size --- app/node/output/viewer/viewer.cpp | 22 +++++++++++++++++++++- app/node/output/viewer/viewer.h | 11 +++++++++++ app/project/item/sequence/sequence.cpp | 12 ++++++++---- app/project/item/sequence/sequence.h | 2 +- app/widget/viewer/viewer.cpp | 22 +++++++++++++++------- app/widget/viewer/viewer.h | 5 +++++ 6 files changed, 61 insertions(+), 13 deletions(-) diff --git a/app/node/output/viewer/viewer.cpp b/app/node/output/viewer/viewer.cpp index b04399199..cbfbdd871 100644 --- a/app/node/output/viewer/viewer.cpp +++ b/app/node/output/viewer/viewer.cpp @@ -20,7 +20,9 @@ #include "viewer.h" -ViewerOutput::ViewerOutput() +ViewerOutput::ViewerOutput() : + viewer_width_(0), + viewer_height_(0) { texture_input_ = new NodeInput("tex_out"); texture_input_->add_data_input(NodeInput::kTexture); @@ -78,6 +80,24 @@ void ViewerOutput::InvalidateCache(const rational &start_range, const rational & SendInvalidateCache(start_range, end_range); } +void ViewerOutput::SetViewerSize(const int &width, const int &height) +{ + viewer_width_ = width; + viewer_height_ = height; + + emit SizeChanged(viewer_width_, viewer_height_); +} + +const int &ViewerOutput::ViewerWidth() +{ + return viewer_width_; +} + +const int &ViewerOutput::ViewerHeight() +{ + return viewer_height_; +} + QVariant ViewerOutput::Value(NodeOutput *output, const rational &time) { Q_UNUSED(output) diff --git a/app/node/output/viewer/viewer.h b/app/node/output/viewer/viewer.h index 6d29af9c6..87ec21733 100644 --- a/app/node/output/viewer/viewer.h +++ b/app/node/output/viewer/viewer.h @@ -49,11 +49,18 @@ public: virtual void InvalidateCache(const rational &start_range, const rational &end_range, NodeInput *from = nullptr) override; + void SetViewerSize(const int& width, const int& height); + + const int& ViewerWidth(); + const int& ViewerHeight(); + signals: void TimebaseChanged(const rational&); void TextureChangedBetween(const rational&, const rational&); + void SizeChanged(int width, int height); + protected: virtual QVariant Value(NodeOutput* output, const rational& time) override; @@ -62,6 +69,10 @@ private: rational timebase_; + int viewer_width_; + + int viewer_height_; + }; #endif // VIEWER_H diff --git a/app/project/item/sequence/sequence.cpp b/app/project/item/sequence/sequence.cpp index 42eccdae2..a9c0326db 100644 --- a/app/project/item/sequence/sequence.cpp +++ b/app/project/item/sequence/sequence.cpp @@ -77,7 +77,7 @@ void Sequence::AddDefaultNodes() // Update the timebase on these nodes set_video_time_base(video_time_base_); - update_parameters(); + update_video_parameters(); } Item::Type Sequence::type() const @@ -117,7 +117,7 @@ void Sequence::set_video_width(const int &width) { video_width_ = width; - update_parameters(); + update_video_parameters(); } const int &Sequence::video_height() const @@ -129,7 +129,7 @@ void Sequence::set_video_height(const int &height) { video_height_ = height; - update_parameters(); + update_video_parameters(); } const rational &Sequence::video_time_base() @@ -182,7 +182,7 @@ void Sequence::SetDefaultParameters() set_audio_channel_layout(AV_CH_LAYOUT_STEREO); } -void Sequence::update_parameters() +void Sequence::update_video_parameters() { if (renderer_processor_ != nullptr) { // Set renderer's parameters based on sequence's parameters @@ -195,4 +195,8 @@ void Sequence::update_parameters() // Set the "cache name" only here to aid the cache ID's uniqueness renderer_processor_->SetCacheName(name()); } + + if (viewer_output_ != nullptr) { + viewer_output_->SetViewerSize(video_width_, video_height_); + } } diff --git a/app/project/item/sequence/sequence.h b/app/project/item/sequence/sequence.h index 173ce8052..325191a52 100644 --- a/app/project/item/sequence/sequence.h +++ b/app/project/item/sequence/sequence.h @@ -75,7 +75,7 @@ public: void SetDefaultParameters(); private: - void update_parameters(); + void update_video_parameters(); TimelineOutput* timeline_output_; RendererProcessor* renderer_processor_; diff --git a/app/widget/viewer/viewer.cpp b/app/widget/viewer/viewer.cpp index 8f2aeea17..9f4a7478d 100644 --- a/app/widget/viewer/viewer.cpp +++ b/app/widget/viewer/viewer.cpp @@ -28,7 +28,6 @@ #include "audio/audiomanager.h" #include "common/timecodefunctions.h" -#include "viewersizer.h" ViewerWidget::ViewerWidget(QWidget *parent) : QWidget(parent), @@ -40,14 +39,11 @@ ViewerWidget::ViewerWidget(QWidget *parent) : layout->setMargin(0); // Create main OpenGL-based view - ViewerSizer* sizer = new ViewerSizer(this); - layout->addWidget(sizer); + sizer_ = new ViewerSizer(this); + layout->addWidget(sizer_); gl_widget_ = new ViewerGLWidget(this); - sizer->SetWidget(gl_widget_); - - // FIXME: Hardcoded values - sizer->SetChildSize(1920, 1080); + sizer_->SetWidget(gl_widget_); // Create time ruler ruler_ = new TimeRuler(false, this); @@ -132,6 +128,10 @@ void ViewerWidget::ConnectViewerNode(ViewerOutput *node) 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&))); + disconnect(viewer_node_, SIGNAL(SizeChanged(int, int)), this, SLOT(SizeChangedSlot(int, int))); + + // Effectively disables the viewer and clears the state + SizeChangedSlot(0, 0); } viewer_node_ = node; @@ -144,6 +144,9 @@ void ViewerWidget::ConnectViewerNode(ViewerOutput *node) 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&))); + connect(viewer_node_, SIGNAL(SizeChanged(int, int)), this, SLOT(SizeChangedSlot(int, int))); + + SizeChangedSlot(viewer_node_->ViewerWidth(), viewer_node_->ViewerHeight()); } } @@ -317,6 +320,11 @@ void ViewerWidget::ViewerNodeChangedBetween(const rational &start, const rationa } } +void ViewerWidget::SizeChangedSlot(int width, int height) +{ + sizer_->SetChildSize(width, height); +} + void ViewerWidget::resizeEvent(QResizeEvent *event) { // Set scrollbar page step to the width diff --git a/app/widget/viewer/viewer.h b/app/widget/viewer/viewer.h index ffebcaa14..6ff0e9d4c 100644 --- a/app/widget/viewer/viewer.h +++ b/app/widget/viewer/viewer.h @@ -30,6 +30,7 @@ #include "common/rational.h" #include "node/output/viewer/viewer.h" #include "viewerglwidget.h" +#include "viewersizer.h" #include "widget/playbackcontrols/playbackcontrols.h" #include "widget/timeruler/timeruler.h" @@ -105,6 +106,8 @@ private: void PlayInternal(int speed); + ViewerSizer* sizer_; + ViewerGLWidget* gl_widget_; PlaybackControls* controls_; @@ -133,6 +136,8 @@ private slots: void ViewerNodeChangedBetween(const rational& start, const rational& end); + void SizeChangedSlot(int width, int height); + }; #endif // VIEWER_WIDGET_H