From: APTX Date: Fri, 1 May 2009 19:12:29 +0000 (+0200) Subject: - Add "ghost" markers - previous marker positions before seeking X-Git-Url: https://gitweb.aptx.org/?a=commitdiff_plain;h=914e66bcee55c8bda9f2b39694743b2f800a45e4;p=aniplayer-old.git - Add "ghost" markers - previous marker positions before seeking - Color unwatched seeker part --- diff --git a/src/seekslider.cpp b/src/seekslider.cpp index f02f182..ca43e60 100644 --- a/src/seekslider.cpp +++ b/src/seekslider.cpp @@ -108,24 +108,38 @@ void SeekSlider::paintEvent(QPaintEvent *event) const int markerPos = seekerLeft + 1 + markerWidth / 2 + qRound(double(m_value) / double(m_length) * double(seekerWidth - markerWidth / 2 - 1)); const QColor markerColor(255, 0, 0); const QColor markerShadowColor(255, 0, 0, 100); - const QColor watchedPartColor(0, 0, 255, 100); + const QColor previousMarkerColor(255, 255, 255); + const QColor watchedPartColor(0, 0, 255, 150); + const QColor unwatchedPartColor(0, 255, 0, 100); // border p.drawRect(seekerLeft, seekerTop, seekerWidth, seekerHeight); // watched part - p.fillRect(seekerLeft + 1, seekerTop + 1, markerPos - 1, seekerHeight - 1, watchedPartColor); + p.fillRect(seekerLeft + 1, seekerTop + 1, markerPos - seekerLeft - 1, seekerHeight - 1, watchedPartColor); + // unwatched part + p.fillRect(markerPos + markerWidth / 2, seekerTop + 1, seekerWidth - markerPos, seekerHeight - 1, unwatchedPartColor); + + int i = 0; + for (QQueue::const_iterator it = previuousPos.constBegin(); it != previuousPos.constEnd(); ++it) + { + int markerPos = seekerLeft + 1 + markerWidth / 2 + qRound(double(*it) / double(m_length) * double(seekerWidth - markerWidth / 2 - 1)); + QColor c = previousMarkerColor; + c.setAlpha(255 / previuousPos.count() * (i + 1)); + p.fillRect(markerPos - markerWidth / 2, seekerTop + 1, markerWidth, seekerHeight - 1, c); + ++i; + } // marker bar p.fillRect(markerPos - markerWidth / 2, seekerTop + 1, markerWidth, seekerHeight - 1, markerColor); -qDebug() << markerShadowPos; // marker shadow (where the marker would move when mouse is clicked) if (drawMarkerShadow) { markerShadowPos = qBound(seekerLeft + 1 + markerWidth / 2, markerShadowPos, seekerLeft + seekerWidth - markerWidth / 2); p.fillRect(markerShadowPos - markerWidth / 2, seekerTop + 1, markerWidth, seekerHeight - 1, markerShadowColor); } + } void SeekSlider::mouseMoveEvent(QMouseEvent *event) @@ -151,13 +165,7 @@ void SeekSlider::mouseReleaseEvent(QMouseEvent *event) if (event->button() != Qt::LeftButton) return; - int newMarkerPos = qBound(seekerLeft + 1, event->pos().x(), seekerLeft + seekerWidth); - qint64 newSeekPos = double(newMarkerPos) / double(seekerLeft + seekerWidth) * double(m_length); - - ticking = true; - setValue(newSeekPos); - ticking = false; - seek(newSeekPos); + seek(event->pos().x()); event->accept(); } @@ -261,12 +269,16 @@ void SeekSlider::setLength(qint64 length) update(); } -int SeekSlider::pxFromValue() +void SeekSlider::seek(int x) { + int newMarkerPos = qBound(seekerLeft + 1, x, seekerLeft + seekerWidth); + qint64 newSeekPos = double(newMarkerPos) / double(seekerLeft + seekerWidth) * double(m_length); -} - -qint64 SeekSlider::valueFromPx() -{ + while (!previuousPos.isEmpty() && previuousPos.count() + 1 > maxPreviousPos) previuousPos.dequeue(); + previuousPos.enqueue(m_value); + ticking = true; + setValue(newSeekPos); + ticking = false; + seek(newSeekPos); } diff --git a/src/seekslider.h b/src/seekslider.h index 7b8a100..e9ed5b2 100644 --- a/src/seekslider.h +++ b/src/seekslider.h @@ -73,8 +73,7 @@ private: void init(); void setLength(qint64 length); - int pxFromValue(); - qint64 valueFromPx(); + void seek(int x); QPointer m_media; bool ticking; @@ -91,7 +90,7 @@ private: bool drawMarkerShadow; int markerShadowPos; - QQueue previuousPos; + QQueue previuousPos; int maxPreviousPos; // Seeker Geometry