From 022bc7c66ae6a76174625dea7279f01a51551302 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 20 Sep 2014 09:56:27 +0200 Subject: [PATCH] * Fixed in-playlist progress bar for tracks with unknown stream duration, like tracks resolved to Beats. --- .../playlist/PlaylistItemDelegate.cpp | 29 ++++++++++++------- src/tomahawk/AudioControls.cpp | 2 +- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/libtomahawk/playlist/PlaylistItemDelegate.cpp b/src/libtomahawk/playlist/PlaylistItemDelegate.cpp index c183bfe9e..a6cb7af00 100644 --- a/src/libtomahawk/playlist/PlaylistItemDelegate.cpp +++ b/src/libtomahawk/playlist/PlaylistItemDelegate.cpp @@ -672,20 +672,27 @@ PlaylistItemDelegate::drawTrack( QPainter* painter, const QStyleOptionViewItem& QRect playIconRect = extraRect.adjusted( extraRect.width() - h - 8, h / 2, -8, -h / 2 ); painter->drawPixmap( playIconRect, ImageRegistry::instance()->pixmap( RESPATH "images/play.svg", playIconRect.size() ) ); - painter->save(); - painter->setPen( Qt::transparent ); - painter->setBrush( Qt::darkRed ); + double duration = (double)AudioEngine::instance()->currentTrackTotalTime(); + if ( duration <= 0 ) + duration = item->query()->track()->duration() * 1000; - QRect playBar = r.adjusted( 0, r.height() + 2, 0, 0 ); - playBar.setHeight( 2 ); - painter->setOpacity( 0.1 ); - painter->drawRect( playBar ); + if ( duration > 0 ) + { + painter->save(); + painter->setPen( Qt::transparent ); + painter->setBrush( Qt::darkRed ); - playBar.setWidth( ( (double)AudioEngine::instance()->currentTime() / (double)AudioEngine::instance()->currentTrackTotalTime() ) * (double)playBar.width() ); - painter->setOpacity( 1 ); - painter->drawRect( playBar ); + QRect playBar = r.adjusted( 0, r.height() + 2, 0, 0 ); + playBar.setHeight( 2 ); + painter->setOpacity( 0.1 ); + painter->drawRect( playBar ); - painter->restore(); + playBar.setWidth( ( (double)AudioEngine::instance()->currentTime() / duration ) * (double)playBar.width() ); + painter->setOpacity( 1 ); + painter->drawRect( playBar ); + + painter->restore(); + } } else if ( track->duration() > 0 ) { diff --git a/src/tomahawk/AudioControls.cpp b/src/tomahawk/AudioControls.cpp index 80ea101b5..8bce3195a 100644 --- a/src/tomahawk/AudioControls.cpp +++ b/src/tomahawk/AudioControls.cpp @@ -269,7 +269,7 @@ AudioControls::onPlaybackStarted( const Tomahawk::result_ptr result ) qint64 duration = AudioEngine::instance()->currentTrackTotalTime(); - if ( duration == -1 || duration == 0 ) + if ( duration <= 0 ) duration = result.data()->track()->duration() * 1000; ui->seekSlider->setRange( 0, duration );