diff --git a/app/node/processor/renderer/renderer.cpp b/app/node/processor/renderer/renderer.cpp index 47e60b54d..ee2cddc55 100644 --- a/app/node/processor/renderer/renderer.cpp +++ b/app/node/processor/renderer/renderer.cpp @@ -20,6 +20,8 @@ #include "renderer.h" +#include + RendererProcessor::RendererProcessor() : started_(false) { @@ -41,6 +43,22 @@ QString RendererProcessor::Description() return tr("A multi-threaded OpenGL hardware-accelerated node compositor."); } +void RendererProcessor::Process(const rational &time) +{ + // Ensure we have started + Start(); + + if (!started_) { + qWarning() << tr("An error occurred starting the Renderer node"); + return; + } +} + +void RendererProcessor::Release() +{ + Stop(); +} + void RendererProcessor::Start() { if (started_) { diff --git a/app/node/processor/renderer/renderer.h b/app/node/processor/renderer/renderer.h index 860ee478d..4cbbfab19 100644 --- a/app/node/processor/renderer/renderer.h +++ b/app/node/processor/renderer/renderer.h @@ -43,6 +43,10 @@ public: virtual QString Category() override; virtual QString Description() override; + virtual void Process(const rational &time) override; + + virtual void Release() override; + /** * @brief Set parameters of the Renderer * diff --git a/app/panel/timeline/timeline.cpp b/app/panel/timeline/timeline.cpp index c0056fbdc..88f0c2468 100644 --- a/app/panel/timeline/timeline.cpp +++ b/app/panel/timeline/timeline.cpp @@ -42,10 +42,8 @@ TimelinePanel::TimelinePanel(QWidget *parent) : connect(view_->horizontalScrollBar(), SIGNAL(valueChanged(int)), ruler_, SLOT(SetScroll(int))); connect(ruler_, SIGNAL(TimeChanged(const int64_t&)), view_, SLOT(SetTime(const int64_t&))); - // FIXME: Test code - ruler_->SetScale(90.0); - view_->SetScale(90.0); - // End test code + // FIXME Magic number + SetScale(90.0); Retranslate(); } @@ -78,6 +76,16 @@ TimelineView *TimelinePanel::view() return view_; } +void TimelinePanel::ZoomIn() +{ + SetScale(scale_ * 2); +} + +void TimelinePanel::ZoomOut() +{ + SetScale(scale_ * 0.5); +} + void TimelinePanel::changeEvent(QEvent *e) { if (e->type() == QEvent::LanguageChange) { @@ -91,3 +99,11 @@ void TimelinePanel::Retranslate() SetTitle(tr("Timeline")); SetSubtitle(tr("(none)")); } + +void TimelinePanel::SetScale(double scale) +{ + scale_ = scale; + + ruler_->SetScale(scale_); + view_->SetScale(scale_); +} diff --git a/app/panel/timeline/timeline.h b/app/panel/timeline/timeline.h index 9358570a9..f1996e293 100644 --- a/app/panel/timeline/timeline.h +++ b/app/panel/timeline/timeline.h @@ -41,6 +41,10 @@ public: TimelineView* view(); + virtual void ZoomIn() override; + + virtual void ZoomOut() override; + protected: virtual void changeEvent(QEvent* e) override; @@ -49,9 +53,13 @@ signals: private: void Retranslate(); + void SetScale(double scale); + TimelineView* view_; TimeRuler* ruler_; + + double scale_; }; #endif // TIMELINE_PANEL_H diff --git a/app/panel/viewer/viewer.cpp b/app/panel/viewer/viewer.cpp index 2d48c118f..88e57d0ce 100644 --- a/app/panel/viewer/viewer.cpp +++ b/app/panel/viewer/viewer.cpp @@ -34,6 +34,16 @@ ViewerPanel::ViewerPanel(QWidget *parent) : Retranslate(); } +void ViewerPanel::ZoomIn() +{ + viewer_->SetScale(viewer_->scale() * 2); +} + +void ViewerPanel::ZoomOut() +{ + viewer_->SetScale(viewer_->scale() * 0.5); +} + void ViewerPanel::SetTexture(GLuint tex) { viewer_->SetTexture(tex); diff --git a/app/panel/viewer/viewer.h b/app/panel/viewer/viewer.h index eb5eba7e3..29bc0f9ef 100644 --- a/app/panel/viewer/viewer.h +++ b/app/panel/viewer/viewer.h @@ -34,6 +34,10 @@ class ViewerPanel : public PanelWidget { public: ViewerPanel(QWidget* parent); + virtual void ZoomIn() override; + + virtual void ZoomOut() override; + public slots: /** * @brief Set the texture to draw and draw it diff --git a/app/widget/panel/panel.cpp b/app/widget/panel/panel.cpp index dc13d7aa2..b5311ce21 100644 --- a/app/widget/panel/panel.cpp +++ b/app/widget/panel/panel.cpp @@ -39,6 +39,14 @@ void PanelWidget::SetBorderVisible(bool enabled) update(); } +void PanelWidget::ZoomIn() +{ +} + +void PanelWidget::ZoomOut() +{ +} + void PanelWidget::SetTitle(const QString &t) { title_ = t; diff --git a/app/widget/panel/panel.h b/app/widget/panel/panel.h index 912559f54..9ab8e57dc 100644 --- a/app/widget/panel/panel.h +++ b/app/widget/panel/panel.h @@ -46,6 +46,22 @@ public: * @param enabled */ void SetBorderVisible(bool enabled); + + /** + * @brief Called whenever this panel is focused and user uses "Zoom In" (either in menus or as a keyboard shortcut) + * + * This function is up to the Panel's interpretation of what the user intends to zoom into. Default behavior is a + * no-op. + */ + virtual void ZoomIn(); + + /** + * @brief Called whenever this panel is focused and user uses "Zoom Out" (either in menus or as a keyboard shortcut) + * + * This function is up to the Panel's interpretation of what the user intends to zoom out of. Default behavior is a + * no-op. + */ + virtual void ZoomOut(); protected: /** * @brief Set panel's title diff --git a/app/widget/timelineview/timelineview.cpp b/app/widget/timelineview/timelineview.cpp index 565ae9376..3fce410db 100644 --- a/app/widget/timelineview/timelineview.cpp +++ b/app/widget/timelineview/timelineview.cpp @@ -98,7 +98,11 @@ void TimelineView::SetScale(const double &scale) QMapIterator iterator(clip_items_); while (iterator.hasNext()) { - iterator.value()->SetScale(scale_); + iterator.next(); + + if (iterator.value() != nullptr) { + iterator.value()->SetScale(scale_); + } } playhead_line_->SetScale(scale_); diff --git a/app/widget/timeruler/timeruler.cpp b/app/widget/timeruler/timeruler.cpp index fd5390998..36f3a8e63 100644 --- a/app/widget/timeruler/timeruler.cpp +++ b/app/widget/timeruler/timeruler.cpp @@ -69,7 +69,12 @@ void TimeRuler::SetTextVisible(bool e) update(); } -void TimeRuler::SetScale(double d) +const double &TimeRuler::scale() +{ + return scale_; +} + +void TimeRuler::SetScale(const double &d) { scale_ = d; diff --git a/app/widget/timeruler/timeruler.h b/app/widget/timeruler/timeruler.h index 83ee68eae..06bb51988 100644 --- a/app/widget/timeruler/timeruler.h +++ b/app/widget/timeruler/timeruler.h @@ -35,7 +35,8 @@ public: void SetTextVisible(bool e); - void SetScale(double d); + const double& scale(); + void SetScale(const double& d); void SetTimebase(const rational& r); diff --git a/app/widget/viewer/viewer.cpp b/app/widget/viewer/viewer.cpp index a634dde58..342a1461b 100644 --- a/app/widget/viewer/viewer.cpp +++ b/app/widget/viewer/viewer.cpp @@ -67,6 +67,16 @@ void ViewerWidget::SetTimebase(const rational &r) controls_->SetTimebase(r); } +const double &ViewerWidget::scale() +{ + return ruler_->scale(); +} + +void ViewerWidget::SetScale(const double &scale_) +{ + ruler_->SetScale(scale_); +} + void ViewerWidget::SetTexture(GLuint tex) { gl_widget_->SetTexture(tex); diff --git a/app/widget/viewer/viewer.h b/app/widget/viewer/viewer.h index 204196841..bbb245640 100644 --- a/app/widget/viewer/viewer.h +++ b/app/widget/viewer/viewer.h @@ -46,6 +46,10 @@ public: void SetTimebase(const rational& r); + const double& scale(); + + void SetScale(const double& scale_); + public slots: /** * @brief Set the texture to draw and draw it diff --git a/app/window/mainwindow/mainmenu.cpp b/app/window/mainwindow/mainmenu.cpp index cfdc064ba..dc2eba794 100644 --- a/app/window/mainwindow/mainmenu.cpp +++ b/app/window/mainwindow/mainmenu.cpp @@ -23,6 +23,7 @@ #include #include "core.h" +#include "panel/panelmanager.h" #include "tool/tool.h" #include "ui/style/style.h" #include "undo/undostack.h" @@ -84,8 +85,8 @@ MainMenu::MainMenu(QWidget *parent) : // VIEW MENU // view_menu_ = new Menu(this); - view_zoom_in_item_ = view_menu_->AddItem("zoomin", nullptr, nullptr, "="); - view_zoom_out_item_ = view_menu_->AddItem("zoomout", nullptr, nullptr, "-"); + view_zoom_in_item_ = view_menu_->AddItem("zoomin", this, SLOT(ZoomInTriggered()), "="); + view_zoom_out_item_ = view_menu_->AddItem("zoomout", this, SLOT(ZoomOutTriggered()), "-"); view_increase_track_height_item_ = view_menu_->AddItem("vzoomin", nullptr, nullptr, "Ctrl+="); view_decrease_track_height_item_ = view_menu_->AddItem("vzoomout", nullptr, nullptr, "Ctrl+-"); view_show_all_item_ = view_menu_->AddItem("showall", nullptr, nullptr, "\\"); @@ -333,6 +334,16 @@ void MainMenu::ToolsMenuAboutToShow() tools_snapping_item_->setChecked(olive::core.snapping()); } +void MainMenu::ZoomInTriggered() +{ + olive::panel_focus_manager->CurrentlyFocused()->ZoomIn(); +} + +void MainMenu::ZoomOutTriggered() +{ + olive::panel_focus_manager->CurrentlyFocused()->ZoomOut(); +} + void MainMenu::Retranslate() { // MenuShared is not a QWidget and therefore does not receive a LanguageEvent, we use MainMenu's to update it diff --git a/app/window/mainwindow/mainmenu.h b/app/window/mainwindow/mainmenu.h index 5efa98e0d..0b4e8d328 100644 --- a/app/window/mainwindow/mainmenu.h +++ b/app/window/mainwindow/mainmenu.h @@ -60,6 +60,20 @@ private slots: */ void ToolsMenuAboutToShow(); + /** + * @brief Slot for zooming in + * + * Finds the currently focused panel and sends it a "zoom in" signal + */ + void ZoomInTriggered(); + + /** + * @brief Slot for zooming out + * + * Finds the currently focused panel and sends it a "zoom out" signal + */ + void ZoomOutTriggered(); + private: /** * @brief Set strings based on the current application language.