]> Some of my projects - aniplayer-old.git/commitdiff
- Add "ghost" markers - previous marker positions before seeking
authorAPTX <APTX@.(none)>
Fri, 1 May 2009 19:12:29 +0000 (21:12 +0200)
committerAPTX <APTX@.(none)>
Fri, 1 May 2009 19:12:29 +0000 (21:12 +0200)
- Color unwatched seeker part

src/seekslider.cpp
src/seekslider.h

index f02f1829bc25cb39bbf081fedf338a7059a24f56..ca43e605bc6980e8e918a3667885465039e58e7a 100644 (file)
@@ -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<qint64>::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);
 }
index 7b8a100086ac25cbc9dec80b94b2b5f54db3a5e3..e9ed5b258ac25ffc0f754c382d4525a63632668f 100644 (file)
@@ -73,8 +73,7 @@ private:
        void init();
        void setLength(qint64 length);
 
-       int pxFromValue();
-       qint64 valueFromPx();
+       void seek(int x);
 
        QPointer<Phonon::MediaObject> m_media;
        bool ticking;
@@ -91,7 +90,7 @@ private:
        bool drawMarkerShadow;
        int markerShadowPos;
 
-       QQueue<int> previuousPos;
+       QQueue<qint64> previuousPos;
        int maxPreviousPos;
 
        // Seeker Geometry