From f558ee9c0f0143a6e0e43d4c6b91d0d56b8e42b9 Mon Sep 17 00:00:00 2001 From: APTX Date: Sun, 16 Feb 2014 14:37:51 +0100 Subject: [PATCH] Draw a marker where marking as watched kicks in. --- player/mainwindow.cpp | 1 + player/seekslider.cpp | 25 ++++++++++++++++++------- player/seekslider.h | 7 +++++-- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/player/mainwindow.cpp b/player/mainwindow.cpp index 2a1e0dc..065833d 100644 --- a/player/mainwindow.cpp +++ b/player/mainwindow.cpp @@ -107,6 +107,7 @@ MainWindow::MainWindow(QWidget *parent) : connect(menu->volumeSlider(), SIGNAL(volumeChangedByUser(double)), player, SLOT(setVolume(double))); connect(player, SIGNAL(mutedChanged(bool)), menu->volumeSlider(), SLOT(setMuted(bool))); connect(menu->volumeSlider(), SIGNAL(mutedChangedByUser(bool)), player, SLOT(setMuted(bool))); + connect(player, SIGNAL(automarkChanged(int)), menu->seekSlider(), SLOT(setAutomark(int))); connect(player, SIGNAL(message(QString)), menu, SLOT(showMessage(QString))); diff --git a/player/seekslider.cpp b/player/seekslider.cpp index f913011..bb05c34 100644 --- a/player/seekslider.cpp +++ b/player/seekslider.cpp @@ -16,7 +16,6 @@ SeekSlider::SeekSlider(QWidget *parent) : QWidget(parent) void SeekSlider::init() { - ticking = false; m_length = 1000; m_seekPosition = 20; markerWidth = 2; @@ -88,6 +87,7 @@ void SeekSlider::paintEvent(QPaintEvent *event) const QColor unwatchedPartColor(0, 255, 0, 100); const QColor toolTipBackgroundColor(0, 0, 0, 150); const QColor toolTipForegroundColor(255, 255, 255); + const QColor automarkPositionColor(255, 255, 0, 150); // border @@ -98,6 +98,13 @@ void SeekSlider::paintEvent(QPaintEvent *event) // unwatched part p.fillRect(markerPos + markerWidth / 2, seekerTop + 1, seekerWidth - markerPos, seekerHeight - 1, unwatchedPartColor); + // automark position + if (m_automark) + { + const int automarkPos = (seekerWidth * m_automark) / 100; + p.fillRect(automarkPos - markerWidth / 2, seekerTop + 1, markerWidth, seekerHeight - 1, automarkPositionColor); + } + // previous locations before seeking int i = 1; for (auto it = previuousPos.constBegin(); it != previuousPos.constEnd(); ++it) @@ -176,17 +183,18 @@ void SeekSlider::seek(qint64 msec) void SeekSlider::tick(qint64 msec) { - ticking = true; setSeekPosition(msec); - ticking = false; } void SeekSlider::totalTimeChanged(qint64 msec) { - ticking = true; setLength(msec); previuousPos.clear(); - ticking = false; +} + +void SeekSlider::setAutomark(int percent) +{ + m_automark = percent; } void SeekSlider::seekableChanged(bool isSeekable) @@ -215,10 +223,8 @@ void SeekSlider::seek(int x) while (!previuousPos.isEmpty() && previuousPos.count() + 1 > maxPreviousPos) previuousPos.dequeue(); previuousPos.enqueue(m_seekPosition); - ticking = true; setSeekPosition(newSeekPos); emit seekRequested(newSeekPos); - ticking = false; seek(newSeekPos); } @@ -239,3 +245,8 @@ qint64 SeekSlider::seekPosition() const { return m_seekPosition; } + +int SeekSlider::automark() const +{ + return m_automark; +} diff --git a/player/seekslider.h b/player/seekslider.h index 09dd954..83937e4 100644 --- a/player/seekslider.h +++ b/player/seekslider.h @@ -8,6 +8,7 @@ class SeekSlider : public QWidget { Q_OBJECT Q_PROPERTY(qint64 seekPosition READ seekPosition WRITE setSeekPosition NOTIFY seekPositionChanged USER true) + Q_PROPERTY(int automark READ automark WRITE setAutomark) Q_DISABLE_COPY(SeekSlider) @@ -43,7 +44,7 @@ public: bool event(QEvent *event); */ qint64 seekPosition() const; - + int automark() const; public slots: // void setOrientation(Qt::Orientation o); @@ -52,6 +53,8 @@ public slots: void tick(qint64 msec); void totalTimeChanged(qint64 msec); + void setAutomark(int percent); + signals: void seekPositionChanged(qint64 arg); void seekRequested(qint64 position); @@ -81,7 +84,6 @@ private: qint64 pos2time(int pos) const; int time2pos(qint64 msec) const; - bool ticking; bool markerShadowEnabled; qint64 m_length; @@ -95,6 +97,7 @@ private: QQueue previuousPos; int maxPreviousPos; + int m_automark; // Seeker Geometry int seekerTop; -- 2.52.0