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