瀏覽代碼

Merge pull request #3422 from cg2121/media-arrow-buttons

UI: Allow adjusting media slider with arrow buttons
Jim 5 年之前
父節點
當前提交
74c2bfa49c
共有 4 個文件被更改,包括 49 次插入3 次删除
  1. 43 0
      UI/media-controls.cpp
  2. 3 0
      UI/media-controls.hpp
  3. 1 1
      UI/media-slider.cpp
  4. 2 2
      UI/media-slider.hpp

+ 43 - 0
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();
+}

+ 3 - 0
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();

+ 1 - 1
UI/media-slider.cpp

@@ -2,7 +2,7 @@
 #include "media-slider.hpp"
 #include <QStyleFactory>
 
-MediaSlider::MediaSlider(QWidget *parent) : QSlider(parent)
+MediaSlider::MediaSlider(QWidget *parent) : SliderIgnoreScroll(parent)
 {
 	setMouseTracking(true);
 

+ 2 - 2
UI/media-slider.hpp

@@ -1,9 +1,9 @@
 #pragma once
 
-#include <QSlider>
 #include <QMouseEvent>
+#include "slider-ignorewheel.hpp"
 
-class MediaSlider : public QSlider {
+class MediaSlider : public SliderIgnoreScroll {
 	Q_OBJECT
 
 public: