diff --git a/app/widget/timelineview/timelineview.cpp b/app/widget/timelineview/timelineview.cpp index 7bf6e7ff6..a527b72d8 100644 --- a/app/widget/timelineview/timelineview.cpp +++ b/app/widget/timelineview/timelineview.cpp @@ -39,6 +39,7 @@ TimelineView::TimelineView(QWidget *parent) : ripple_tool_(this), razor_tool_(this), hand_tool_(this), + zoom_tool_(this), playhead_(0) { setScene(&scene_); @@ -220,7 +221,7 @@ TimelineView::Tool *TimelineView::GetActiveTool() case olive::tool::kHand: return &hand_tool_; case olive::tool::kZoom: - return nullptr; // FIXME: Implement + return &zoom_tool_; case olive::tool::kTransition: return nullptr; // FIXME: Implement case olive::tool::kRecord: diff --git a/app/widget/timelineview/timelineview.h b/app/widget/timelineview/timelineview.h index 3f004bdec..673734cf7 100644 --- a/app/widget/timelineview/timelineview.h +++ b/app/widget/timelineview/timelineview.h @@ -227,6 +227,16 @@ private: QPoint scrollbar_start_; }; + class ZoomTool : public Tool + { + public: + ZoomTool(TimelineView* parent); + + virtual void MousePress(QMouseEvent *event); + virtual void MouseMove(QMouseEvent *event); + virtual void MouseRelease(QMouseEvent *event); + }; + Tool* GetActiveTool(); int GetTrackY(int track_index); @@ -237,6 +247,7 @@ private: RippleTool ripple_tool_; RazorTool razor_tool_; HandTool hand_tool_; + ZoomTool zoom_tool_; void AddGhost(TimelineViewGhostItem* ghost); diff --git a/app/widget/timelineview/tool/CMakeLists.txt b/app/widget/timelineview/tool/CMakeLists.txt index 652417678..6a635dba6 100644 --- a/app/widget/timelineview/tool/CMakeLists.txt +++ b/app/widget/timelineview/tool/CMakeLists.txt @@ -22,5 +22,6 @@ set(OLIVE_SOURCES widget/timelineview/tool/razor.cpp widget/timelineview/tool/ripple.cpp widget/timelineview/tool/tool.cpp + widget/timelineview/tool/zoom.cpp PARENT_SCOPE ) diff --git a/app/widget/timelineview/tool/zoom.cpp b/app/widget/timelineview/tool/zoom.cpp new file mode 100644 index 000000000..34908b302 --- /dev/null +++ b/app/widget/timelineview/tool/zoom.cpp @@ -0,0 +1,47 @@ +/*** + + Olive - Non-Linear Video Editor + Copyright (C) 2019 Olive Team + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +***/ + +#include "widget/timelineview/timelineview.h" + +TimelineView::ZoomTool::ZoomTool(TimelineView* parent) : + Tool(parent) +{ +} + +void TimelineView::ZoomTool::MousePress(QMouseEvent *event) +{ + Q_UNUSED(event) +} + +void TimelineView::ZoomTool::MouseMove(QMouseEvent *event) +{ + Q_UNUSED(event) +} + +void TimelineView::ZoomTool::MouseRelease(QMouseEvent *event) +{ + if (event->modifiers() & Qt::AltModifier) { + // Zoom out if the user clicks while holding Alt + parent()->SetScale(parent()->scale_ * 0.5); + } else { + // Otherwise zoom in + parent()->SetScale(parent()->scale_ * 2); + } +}