From 537908c605c9814198ddc6ede04ff03e80142c00 Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Mon, 20 Mar 2023 16:51:39 -0700 Subject: [PATCH] footageviewer: auto switch waveform mode when clicking video/audio buttons --- app/widget/playbackcontrols/dragbutton.cpp | 25 ++++++++++++++++--- app/widget/playbackcontrols/dragbutton.h | 11 ++++++-- .../playbackcontrols/playbackcontrols.cpp | 4 +-- .../playbackcontrols/playbackcontrols.h | 4 +-- app/widget/viewer/footageviewer.cpp | 16 ++++++++++-- app/widget/viewer/footageviewer.h | 4 +++ app/widget/viewer/viewer.h | 4 +-- 7 files changed, 55 insertions(+), 13 deletions(-) diff --git a/app/widget/playbackcontrols/dragbutton.cpp b/app/widget/playbackcontrols/dragbutton.cpp index d3d4e6557..ac0917a23 100644 --- a/app/widget/playbackcontrols/dragbutton.cpp +++ b/app/widget/playbackcontrols/dragbutton.cpp @@ -1,7 +1,7 @@ /*** Olive - Non-Linear Video Editor - Copyright (C) 2022 Olive Team + Copyright (C) 2023 Olive Studios LLC 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 @@ -20,18 +20,37 @@ #include "dragbutton.h" +#include + namespace olive { DragButton::DragButton(QWidget *parent) : QPushButton(parent) { setCursor(Qt::OpenHandCursor); + dragging_ = false; } -void DragButton::mousePressEvent(QMouseEvent *event) { +void DragButton::mousePressEvent(QMouseEvent *event) +{ QPushButton::mousePressEvent(event); +} - emit MousePressed(); +void DragButton::mouseMoveEvent(QMouseEvent *event) +{ + QPushButton::mouseMoveEvent(event); + + if (event->buttons() && !dragging_) { + emit DragStarted(); + dragging_ = true; + } +} + +void DragButton::mouseReleaseEvent(QMouseEvent *event) +{ + QPushButton::mouseReleaseEvent(event); + + dragging_ = false; } } diff --git a/app/widget/playbackcontrols/dragbutton.h b/app/widget/playbackcontrols/dragbutton.h index 166814efa..79ecfcfaa 100644 --- a/app/widget/playbackcontrols/dragbutton.h +++ b/app/widget/playbackcontrols/dragbutton.h @@ -1,7 +1,7 @@ /*** Olive - Non-Linear Video Editor - Copyright (C) 2022 Olive Team + Copyright (C) 2023 Olive Studios LLC 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 @@ -34,11 +34,18 @@ public: DragButton(QWidget* parent = nullptr); signals: - void MousePressed(); + void DragStarted(); protected: virtual void mousePressEvent(QMouseEvent* event) override; + virtual void mouseMoveEvent(QMouseEvent* event) override; + + virtual void mouseReleaseEvent(QMouseEvent* event) override; + +private: + bool dragging_; + }; } diff --git a/app/widget/playbackcontrols/playbackcontrols.cpp b/app/widget/playbackcontrols/playbackcontrols.cpp index 1f9e0b8ff..e11d5fe22 100644 --- a/app/widget/playbackcontrols/playbackcontrols.cpp +++ b/app/widget/playbackcontrols/playbackcontrols.cpp @@ -127,11 +127,11 @@ PlaybackControls::PlaybackControls(QWidget *parent) : av_btn_layout->setContentsMargins(0, 0, 0, 0); video_drag_btn_ = new DragButton(); connect(video_drag_btn_, &QPushButton::clicked, this, &PlaybackControls::VideoClicked); - connect(video_drag_btn_, &DragButton::MousePressed, this, &PlaybackControls::VideoPressed); + connect(video_drag_btn_, &DragButton::DragStarted, this, &PlaybackControls::VideoDragged); av_btn_layout->addWidget(video_drag_btn_); audio_drag_btn_ = new DragButton(); connect(audio_drag_btn_, &QPushButton::clicked, this, &PlaybackControls::AudioClicked); - connect(audio_drag_btn_, &DragButton::MousePressed, this, &PlaybackControls::AudioPressed); + connect(audio_drag_btn_, &DragButton::DragStarted, this, &PlaybackControls::AudioDragged); av_btn_layout->addWidget(audio_drag_btn_); lower_control_layout->addWidget(av_btn_widget); diff --git a/app/widget/playbackcontrols/playbackcontrols.h b/app/widget/playbackcontrols/playbackcontrols.h index 826839f76..7a4842f0f 100644 --- a/app/widget/playbackcontrols/playbackcontrols.h +++ b/app/widget/playbackcontrols/playbackcontrols.h @@ -112,9 +112,9 @@ signals: void VideoClicked(); - void AudioPressed(); + void AudioDragged(); - void VideoPressed(); + void VideoDragged(); void TimeChanged(const rational& t); diff --git a/app/widget/viewer/footageviewer.cpp b/app/widget/viewer/footageviewer.cpp index 4d77cf341..8bcc2b9b5 100644 --- a/app/widget/viewer/footageviewer.cpp +++ b/app/widget/viewer/footageviewer.cpp @@ -36,8 +36,10 @@ FootageViewerWidget::FootageViewerWidget(QWidget *parent) : connect(display_widget(), &ViewerDisplayWidget::DragStarted, this, &FootageViewerWidget::StartFootageDrag); controls_->SetAudioVideoDragButtonsVisible(true); - connect(controls_, &PlaybackControls::VideoPressed, this, &FootageViewerWidget::StartVideoDrag); - connect(controls_, &PlaybackControls::AudioPressed, this, &FootageViewerWidget::StartAudioDrag); + connect(controls_, &PlaybackControls::VideoClicked, this, &FootageViewerWidget::VideoButtonClicked); + connect(controls_, &PlaybackControls::AudioClicked, this, &FootageViewerWidget::AudioButtonClicked); + connect(controls_, &PlaybackControls::VideoDragged, this, &FootageViewerWidget::StartVideoDrag); + connect(controls_, &PlaybackControls::AudioDragged, this, &FootageViewerWidget::StartAudioDrag); override_workarea_ = new TimelineWorkArea(this); } @@ -108,4 +110,14 @@ void FootageViewerWidget::StartAudioDrag() StartFootageDragInternal(false, true); } +void FootageViewerWidget::VideoButtonClicked() +{ + this->SetWaveformMode(kWFAutomatic); +} + +void FootageViewerWidget::AudioButtonClicked() +{ + this->SetWaveformMode(kWFWaveformOnly); +} + } diff --git a/app/widget/viewer/footageviewer.h b/app/widget/viewer/footageviewer.h index 802e6e4d8..7ac31e2ba 100644 --- a/app/widget/viewer/footageviewer.h +++ b/app/widget/viewer/footageviewer.h @@ -47,6 +47,10 @@ private slots: void StartAudioDrag(); + void VideoButtonClicked(); + + void AudioButtonClicked(); + }; } diff --git a/app/widget/viewer/viewer.h b/app/widget/viewer/viewer.h index ab42a9d28..e75c36dbd 100644 --- a/app/widget/viewer/viewer.h +++ b/app/widget/viewer/viewer.h @@ -218,6 +218,8 @@ protected: RenderTicketPtr GetSingleFrame(const rational &t, bool dry = false); + void SetWaveformMode(WaveformMode wf); + private: int64_t GetTimestamp() const { @@ -270,8 +272,6 @@ private: void CloseAudioProcessor(); - void SetWaveformMode(WaveformMode wf); - void DetectMulticamNode(const rational &time); bool IsVideoVisible() const;