diff --git a/app/dialog/preferences/tabs/preferencesbehaviortab.cpp b/app/dialog/preferences/tabs/preferencesbehaviortab.cpp index 2d49f2684..8d71b3df5 100644 --- a/app/dialog/preferences/tabs/preferencesbehaviortab.cpp +++ b/app/dialog/preferences/tabs/preferencesbehaviortab.cpp @@ -41,10 +41,6 @@ PreferencesBehaviorTab::PreferencesBehaviorTab() QStringLiteral("HoverFocus"), tr("Panels will be considered focused when the mouse cursor is over them without having to click them."), general_group); - AddItem(tr("Scroll wheel zooms by default instead of scrolling"), - QStringLiteral("ScrollZooms"), - tr("Holding CTRL while using Olive toggles this setting"), - general_group); AddItem(tr("Enable slider ladder"), QStringLiteral("UseSliderLadders"), general_group); diff --git a/app/widget/curvewidget/curveview.cpp b/app/widget/curvewidget/curveview.cpp index d8dae394f..d78cfa3ae 100644 --- a/app/widget/curvewidget/curveview.cpp +++ b/app/widget/curvewidget/curveview.cpp @@ -307,8 +307,6 @@ void CurveView::VerticalScaleChangedEvent(double scale) void CurveView::ContextMenuEvent(Menu &m) { - m.addSeparator(); - // View settings QAction* zoom_fit_action = m.addAction(tr("Zoom to Fit")); connect(zoom_fit_action, &QAction::triggered, this, &CurveView::ZoomToFit); diff --git a/app/widget/handmovableview/handmovableview.cpp b/app/widget/handmovableview/handmovableview.cpp index 5fb808f6d..5e0daa151 100644 --- a/app/widget/handmovableview/handmovableview.cpp +++ b/app/widget/handmovableview/handmovableview.cpp @@ -31,7 +31,8 @@ namespace olive { HandMovableView::HandMovableView(QWidget* parent) : super(parent), - dragging_hand_(false) + dragging_hand_(false), + scroll_zooms_by_default_(Config::Current()[QStringLiteral("ScrollZooms")].toBool()) { connect(Core::instance(), &Core::ToolChanged, this, &HandMovableView::ApplicationToolChanged); } @@ -122,9 +123,9 @@ const HandMovableView::DragMode &HandMovableView::GetDefaultDragMode() const return default_drag_mode_; } -bool HandMovableView::WheelEventIsAZoomEvent(QWheelEvent *event) +bool HandMovableView::WheelEventIsAZoomEvent(QWheelEvent *event) const { - return (static_cast(event->modifiers() & Qt::ControlModifier) == !Config::Current()[QStringLiteral("ScrollZooms")].toBool()); + return (static_cast(event->modifiers() & Qt::ControlModifier) == !scroll_zooms_by_default_); } void HandMovableView::wheelEvent(QWheelEvent *event) @@ -154,4 +155,17 @@ void HandMovableView::ZoomIntoCursorPosition(QWheelEvent *event, double multipli Q_UNUSED(cursor_pos) } +QAction *HandMovableView::AddSetScrollZoomsByDefaultActionToMenu(QMenu *m, bool autoconnect) +{ + QAction* ctrl_zoom = m->addAction(tr("Scroll Zooms By Default")); + ctrl_zoom->setCheckable(true); + ctrl_zoom->setChecked(GetScrollZoomsByDefault()); + + if (autoconnect) { + connect(ctrl_zoom, &QAction::triggered, this, &HandMovableView::SetScrollZoomsByDefault); + } + + return ctrl_zoom; +} + } diff --git a/app/widget/handmovableview/handmovableview.h b/app/widget/handmovableview/handmovableview.h index 15c5d2b8c..9430406f2 100644 --- a/app/widget/handmovableview/handmovableview.h +++ b/app/widget/handmovableview/handmovableview.h @@ -22,6 +22,7 @@ #define HANDMOVABLEVIEW_H #include +#include #include "tool/tool.h" @@ -33,6 +34,19 @@ class HandMovableView : public QGraphicsView public: HandMovableView(QWidget* parent = nullptr); + bool GetScrollZoomsByDefault() const + { + return scroll_zooms_by_default_; + } + + QAction* AddSetScrollZoomsByDefaultActionToMenu(QMenu* menu, bool autoconnect = true); + +public slots: + void SetScrollZoomsByDefault(bool e) + { + scroll_zooms_by_default_ = e; + } + protected: virtual void ToolChangedEvent(Tool::Item tool){Q_UNUSED(tool)} @@ -43,7 +57,7 @@ protected: void SetDefaultDragMode(DragMode mode); const DragMode& GetDefaultDragMode() const; - static bool WheelEventIsAZoomEvent(QWheelEvent* event); + bool WheelEventIsAZoomEvent(QWheelEvent* event) const; virtual void wheelEvent(QWheelEvent* event) override; @@ -55,6 +69,14 @@ private: DragMode default_drag_mode_; + /** + * @brief Whether scrolling should perform a scroll or a zoom + * + * If TRUE, scrolling will ZOOM and Ctrl+Scroll with SCROLL. + * If FALSE (default), scrolling will SCROLL and Ctrl+Scroll will ZOOM. + */ + bool scroll_zooms_by_default_; + private slots: void ApplicationToolChanged(Tool::Item tool); diff --git a/app/widget/keyframeview/keyframeviewbase.cpp b/app/widget/keyframeview/keyframeviewbase.cpp index f58b46d92..c4c8e1a84 100644 --- a/app/widget/keyframeview/keyframeviewbase.cpp +++ b/app/widget/keyframeview/keyframeviewbase.cpp @@ -525,6 +525,12 @@ void KeyframeViewBase::ShowContextMenu() } } + m.addSeparator(); + + AddSetScrollZoomsByDefaultActionToMenu(&m); + + m.addSeparator(); + ContextMenuEvent(m); if (!items.isEmpty()) { diff --git a/app/widget/nodeview/nodeview.cpp b/app/widget/nodeview/nodeview.cpp index 909861a38..def0e47c2 100644 --- a/app/widget/nodeview/nodeview.cpp +++ b/app/widget/nodeview/nodeview.cpp @@ -711,6 +711,10 @@ void NodeView::ShowContextMenu(const QPoint &pos) m.addSeparator(); + AddSetScrollZoomsByDefaultActionToMenu(&m); + + m.addSeparator(); + Menu* filter_menu = new Menu(tr("Filter"), &m); m.addMenu(filter_menu); diff --git a/app/widget/timelinewidget/timelinewidget.cpp b/app/widget/timelinewidget/timelinewidget.cpp index 5bcc0c15b..ddbed335b 100644 --- a/app/widget/timelinewidget/timelinewidget.cpp +++ b/app/widget/timelinewidget/timelinewidget.cpp @@ -979,6 +979,9 @@ void TimelineWidget::ShowContextMenu() show_waveforms->setChecked(views_.first()->view()->GetShowWaveforms()); connect(show_waveforms, &QAction::triggered, this, &TimelineWidget::SetViewWaveformsEnabled); + QAction* scroll_zoom = views_.first()->view()->AddSetScrollZoomsByDefaultActionToMenu(&menu); + connect(scroll_zoom, &QAction::triggered, this, &TimelineWidget::SetScrollZoomsByDefaultOnAllViews); + menu.addSeparator(); QAction* properties_action = menu.addAction(tr("Properties")); @@ -1077,6 +1080,13 @@ void TimelineWidget::TrackIndexChanged(int old, int now) } } +void TimelineWidget::SetScrollZoomsByDefaultOnAllViews(bool e) +{ + foreach (TimelineAndTrackView* tview, views_) { + tview->view()->SetScrollZoomsByDefault(e); + } +} + void TimelineWidget::AddGhost(TimelineViewGhostItem *ghost) { ghost_items_.append(ghost); diff --git a/app/widget/timelinewidget/timelinewidget.h b/app/widget/timelinewidget/timelinewidget.h index 322a77213..55cf634eb 100644 --- a/app/widget/timelinewidget/timelinewidget.h +++ b/app/widget/timelinewidget/timelinewidget.h @@ -353,6 +353,8 @@ private slots: void TrackIndexChanged(int old, int now); + void SetScrollZoomsByDefaultOnAllViews(bool e); + }; }