diff --git a/UI/media-controls.cpp b/UI/media-controls.cpp index 0248ade81..825bbb9f5 100644 --- a/UI/media-controls.cpp +++ b/UI/media-controls.cpp @@ -39,6 +39,7 @@ MediaControls::MediaControls(QWidget *parent) ui->previousButton->setProperty("themeID", "previousIcon"); ui->nextButton->setProperty("themeID", "nextIcon"); ui->stopButton->setProperty("themeID", "stopIcon"); + setFocusPolicy(Qt::StrongFocus); connect(&mediaTimer, SIGNAL(timeout()), this, SLOT(SetSliderPosition())); @@ -59,6 +60,20 @@ MediaControls::MediaControls(QWidget *parent) restartAction->setShortcut({Qt::Key_R}); connect(restartAction, SIGNAL(triggered()), this, SLOT(RestartMedia())); addAction(restartAction); + + QAction *sliderFoward = new QAction(this); + sliderFoward->setShortcutContext(Qt::WidgetWithChildrenShortcut); + connect(sliderFoward, SIGNAL(triggered()), this, + SLOT(MoveSliderFoward())); + sliderFoward->setShortcut({Qt::Key_Right}); + addAction(sliderFoward); + + QAction *sliderBack = new QAction(this); + sliderBack->setShortcutContext(Qt::WidgetWithChildrenShortcut); + connect(sliderBack, SIGNAL(triggered()), this, + SLOT(MoveSliderBackwards())); + sliderBack->setShortcut({Qt::Key_Left}); + addAction(sliderBack); } MediaControls::~MediaControls() @@ -426,3 +441,31 @@ void MediaControls::on_durationLabel_clicked() if (MediaPaused()) SetSliderPosition(); } + +void MediaControls::MoveSliderFoward(int seconds) +{ + OBSSource source = OBSGetStrongRef(weakSource); + + if (!source) + return; + + int ms = obs_source_media_get_time(source); + ms += seconds * 1000; + + obs_source_media_set_time(source, ms); + SetSliderPosition(); +} + +void MediaControls::MoveSliderBackwards(int seconds) +{ + OBSSource source = OBSGetStrongRef(weakSource); + + if (!source) + return; + + int ms = obs_source_media_get_time(source); + ms -= seconds * 1000; + + obs_source_media_set_time(source, ms); + SetSliderPosition(); +} diff --git a/UI/media-controls.hpp b/UI/media-controls.hpp index 8ba56f577..4dec25c35 100644 --- a/UI/media-controls.hpp +++ b/UI/media-controls.hpp @@ -58,6 +58,9 @@ private slots: void SeekTimerCallback(); + void MoveSliderFoward(int seconds = 5); + void MoveSliderBackwards(int seconds = 5); + public slots: void PlayMedia(); void PauseMedia(); diff --git a/UI/media-slider.cpp b/UI/media-slider.cpp index 6eb88d4ee..c85d7622f 100644 --- a/UI/media-slider.cpp +++ b/UI/media-slider.cpp @@ -2,7 +2,7 @@ #include "media-slider.hpp" #include -MediaSlider::MediaSlider(QWidget *parent) : QSlider(parent) +MediaSlider::MediaSlider(QWidget *parent) : SliderIgnoreScroll(parent) { setMouseTracking(true); diff --git a/UI/media-slider.hpp b/UI/media-slider.hpp index 360403382..caed5abf9 100644 --- a/UI/media-slider.hpp +++ b/UI/media-slider.hpp @@ -1,9 +1,9 @@ #pragma once -#include #include +#include "slider-ignorewheel.hpp" -class MediaSlider : public QSlider { +class MediaSlider : public SliderIgnoreScroll { Q_OBJECT public: