From 1fa1ed42e9ecc7aa247c2cec498b41b2b5213285 Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Fri, 12 Aug 2011 00:10:02 -0400 Subject: [PATCH] Paint a nicer playlist delegate, and number count backdrop --- data/images/supercollection.png | Bin 1530 -> 3161 bytes data/images/user-avatar.png | Bin 1477 -> 3144 bytes src/libtomahawk/utils/tomahawkutils.cpp | 36 +++++++++++++++ src/libtomahawk/utils/tomahawkutils.h | 4 ++ .../widgets/welcomeplaylistmodel.cpp | 17 +++++++ .../widgets/welcomeplaylistmodel.h | 2 + src/libtomahawk/widgets/welcomewidget.cpp | 42 +++++++++++++----- src/libtomahawk/widgets/welcomewidget.h | 3 +- src/sourcetree/sourcetreeview.cpp | 24 ++-------- 9 files changed, 96 insertions(+), 32 deletions(-) diff --git a/data/images/supercollection.png b/data/images/supercollection.png index e965f88e4fbe8e2432eccdcfe73bcf81a2871cff..6c6f192d958940f7ba81464462eb88428c972d55 100644 GIT binary patch delta 3136 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 diff --git a/src/libtomahawk/utils/tomahawkutils.cpp b/src/libtomahawk/utils/tomahawkutils.cpp index 9b37b9c8d..fdef729be 100644 --- a/src/libtomahawk/utils/tomahawkutils.cpp +++ b/src/libtomahawk/utils/tomahawkutils.cpp @@ -349,6 +349,42 @@ createDragPixmap( int itemCount ) return dragPixmap; } +void +drawBackgroundAndNumbers( QPainter* painter, const QString& text, const QRect& figRectIn ) +{ + QRect figRect = figRectIn; + if ( text.length() == 1 ) + figRect.adjust( -painter->fontMetrics().averageCharWidth(), 0, 0, 0 ); + + QPen origpen = painter->pen(); + QPen pen = origpen; + pen.setWidth( 1.0 ); + painter->setPen( pen ); + painter->drawRect( figRect ); + + // circles look bad. make it an oval. (thanks, apple) + const int bulgeWidth = 8; + const int offset = 0; // number of pixels to begin, counting inwards from figRect.x() and figRect.width(). 0 means start at each end, negative means start inside the rect. + + QPainterPath ppath; + ppath.moveTo( QPoint( figRect.x() + offset, figRect.y() + figRect.height() / 2 ) ); + QRect leftArcRect( figRect.x() + offset - bulgeWidth, figRect.y(), 2*bulgeWidth, figRect.height() ); + ppath.arcTo( leftArcRect, 90, 180 ); + painter->drawPath( ppath ); + + ppath = QPainterPath(); + ppath.moveTo( figRect.x() + figRect.width() - offset, figRect.y() + figRect.height() / 2 ); + leftArcRect = QRect( figRect.x() + figRect.width() - offset - bulgeWidth, figRect.y(), 2*bulgeWidth, figRect.height() ); + ppath.arcTo( leftArcRect, 270, 180 ); + painter->drawPath( ppath ); + + painter->setPen( origpen ); + + QTextOption to( Qt::AlignCenter ); + painter->setPen( Qt::white ); + painter->drawText( figRect.adjusted( -5, 0, 6, 0 ), text, to ); +} + void unmarginLayout( QLayout* layout ) diff --git a/src/libtomahawk/utils/tomahawkutils.h b/src/libtomahawk/utils/tomahawkutils.h index d72fcd015..238e63143 100644 --- a/src/libtomahawk/utils/tomahawkutils.h +++ b/src/libtomahawk/utils/tomahawkutils.h @@ -25,9 +25,11 @@ #include #include #include +#include #define RESPATH ":/data/" +class QPainter; class QColor; class QDir; class QDateTime; @@ -74,6 +76,8 @@ namespace TomahawkUtils DLLEXPORT QColor alphaBlend( const QColor& colorFrom, const QColor& colorTo, float opacity ); DLLEXPORT QPixmap createDragPixmap( int itemCount = 1 ); + DLLEXPORT void drawBackgroundAndNumbers( QPainter* p, const QString& text, const QRect& rect ); + DLLEXPORT void unmarginLayout( QLayout* layout ); DLLEXPORT NetworkProxyFactory* proxyFactory(); diff --git a/src/libtomahawk/widgets/welcomeplaylistmodel.cpp b/src/libtomahawk/widgets/welcomeplaylistmodel.cpp index fbb8fcacf..618354562 100644 --- a/src/libtomahawk/widgets/welcomeplaylistmodel.cpp +++ b/src/libtomahawk/widgets/welcomeplaylistmodel.cpp @@ -167,10 +167,27 @@ WelcomePlaylistModel::playlistRevisionLoaded() void WelcomePlaylistModel::onSourceAdded( const Tomahawk::source_ptr& source ) { + connect( source.data(), SIGNAL( online() ), this, SLOT( sourceOnline() ) ); connect( source->collection().data(), SIGNAL( playlistsAdded( QList ) ), SLOT( loadFromSettings() ) ); connect( source->collection().data(), SIGNAL( playlistsDeleted( QList ) ), SLOT( onPlaylistsRemoved( QList ) ) ); } +void +WelcomePlaylistModel::sourceOnline() +{ + Source* s = qobject_cast< Source* >( sender() ); + Q_ASSERT( s ); + + for ( int i = 0; i < m_recplaylists.size(); i++ ) + { + if ( m_recplaylists[ i ]->author().data() == s ) + { + QModelIndex idx = index( i, 0, QModelIndex() ); + emit dataChanged( idx, idx ); + } + } +} + void WelcomePlaylistModel::onPlaylistsRemoved( QList< playlist_ptr > playlists ) diff --git a/src/libtomahawk/widgets/welcomeplaylistmodel.h b/src/libtomahawk/widgets/welcomeplaylistmodel.h index 08d8ffcc6..c30d83ea0 100644 --- a/src/libtomahawk/widgets/welcomeplaylistmodel.h +++ b/src/libtomahawk/widgets/welcomeplaylistmodel.h @@ -60,6 +60,8 @@ private: unsigned int m_maxPlaylists; bool m_waitingForSome; + public slots: + void sourceOnline(); }; #endif // WELCOMEPLAYLISTMODEL_H diff --git a/src/libtomahawk/widgets/welcomewidget.cpp b/src/libtomahawk/widgets/welcomewidget.cpp index c408e7fed..8c423d6ad 100644 --- a/src/libtomahawk/widgets/welcomewidget.cpp +++ b/src/libtomahawk/widgets/welcomewidget.cpp @@ -221,8 +221,6 @@ PlaylistDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, QFont font = opt.font; QFont boldFont = opt.font; boldFont.setBold( true ); - QFont italicFont = opt.font; - italicFont.setItalic( true ); QPixmap icon; WelcomePlaylistModel::PlaylistTypes type = (WelcomePlaylistModel::PlaylistTypes)index.data( WelcomePlaylistModel::PlaylistTypeRole ).toInt(); @@ -246,16 +244,40 @@ PlaylistDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, { descText = index.data( WelcomePlaylistModel::ArtistRole ).toString(); } - painter->drawText( option.rect.adjusted( 56, 26, -100, -8 ), descText ); + QColor c = painter->pen().color(); + painter->setPen( QColor( Qt::gray ).darker() ); + painter->drawText( option.rect.adjusted( 66, 19, -100, -8 ), descText ); + painter->setPen( c ); - QString trackCount = tr( "%1 tracks" ).arg( index.data( WelcomePlaylistModel::TrackCountRole ).toString() ); - painter->drawText( option.rect.adjusted( option.rect.width() - 96, 12, 0, -2 - opt.rect.height() / 2 ), trackCount, to ); + if ( type != WelcomePlaylistModel::Station ) + { + painter->save(); + QString tracks = index.data( WelcomePlaylistModel::TrackCountRole ).toString(); + int width = painter->fontMetrics().width( tracks ); +// int bottomEdge = pixmapRect + // right edge 10px past right edge of pixmapRect + // bottom edge flush with bottom of pixmap + QRect rect( pixmapRect.right() - width, 0, width - 8, 0 ); + rect.adjust( 0, 0, -1, 0 ); + rect.setTop( pixmapRect.bottom() - painter->fontMetrics().height() - 1 ); + rect.setBottom( pixmapRect.bottom() + 1 ); - QString author = index.data( WelcomePlaylistModel::PlaylistRole ).value< Tomahawk::playlist_ptr >()->author()->friendlyName(); - QRect r = option.rect.adjusted( option.rect.width() - 96, 2 + opt.rect.height() / 2, 0, -12); - painter->setFont( italicFont ); - author = painter->fontMetrics().elidedText( author, Qt::ElideRight, r.width() ); - painter->drawText( r, author, to ); + QColor figColor( 191, 191, 191 ); + painter->setPen( figColor ); + painter->setBrush( figColor ); + painter->setFont( boldFont ); + + TomahawkUtils::drawBackgroundAndNumbers( painter, tracks, rect ); + painter->restore(); + } + + + QPixmap avatar = index.data( WelcomePlaylistModel::PlaylistRole ).value< Tomahawk::playlist_ptr >()->author()->avatar(); + if ( avatar.isNull() ) + avatar = m_defaultAvatar; + avatar = TomahawkUtils::createAvatarFrame( avatar ); + QRect r( option.rect.width() - avatar.width() - 10, option.rect.top() + option.rect.height()/2 - avatar.height()/2, avatar.width(), avatar.height() ); + painter->drawPixmap( r, avatar ); painter->setFont( boldFont ); painter->drawText( option.rect.adjusted( 56, 6, -100, -option.rect.height() + 20 ), index.data().toString() ); diff --git a/src/libtomahawk/widgets/welcomewidget.h b/src/libtomahawk/widgets/welcomewidget.h index 0f4de5c69..dcbd7837a 100644 --- a/src/libtomahawk/widgets/welcomewidget.h +++ b/src/libtomahawk/widgets/welcomewidget.h @@ -52,6 +52,7 @@ public: m_playlistIcon = QPixmap( RESPATH "images/playlist-icon.png" ); m_autoIcon = QPixmap( RESPATH "images/automatic-playlist.png" ); m_stationIcon = QPixmap( RESPATH "images/station.png" ); + m_defaultAvatar = QPixmap( RESPATH "images/user-avatar.png" ); } protected: @@ -59,7 +60,7 @@ protected: QSize sizeHint( const QStyleOptionViewItem& option, const QModelIndex& index ) const; private: - QPixmap m_playlistIcon, m_autoIcon, m_stationIcon; + QPixmap m_playlistIcon, m_autoIcon, m_stationIcon, m_defaultAvatar; }; class DLLEXPORT PlaylistWidget : public QListView diff --git a/src/sourcetree/sourcetreeview.cpp b/src/sourcetree/sourcetreeview.cpp index 4acbf7f56..3f169dc36 100644 --- a/src/sourcetree/sourcetreeview.cpp +++ b/src/sourcetree/sourcetreeview.cpp @@ -673,34 +673,16 @@ SourceDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, co { painter->setRenderHint( QPainter::Antialiasing ); - QRect figRect = o.rect.adjusted( o.rect.width() - figWidth - 18, 0, -10, -o.rect.height() + 16 ); + QRect figRect = o.rect.adjusted( o.rect.width() - figWidth - 6, 0, -15, -o.rect.height() + 16 ); int hd = ( option.rect.height() - figRect.height() ) / 2; figRect.adjust( 0, hd, 0, hd ); + painter->setFont( bold ); QColor figColor( 167, 183, 211 ); painter->setPen( figColor ); painter->setBrush( figColor ); - QPen origpen = painter->pen(); - QPen pen = origpen; - pen.setWidth( 1.0 ); - painter->setPen( pen ); - painter->drawRect( figRect ); - - QPainterPath ppath; - ppath.moveTo( QPoint( figRect.x(), figRect.y() ) ); - ppath.quadTo( QPoint( figRect.x() - 8, figRect.y() + figRect.height() / 2 ), QPoint( figRect.x(), figRect.y() + figRect.height() ) ); - painter->drawPath( ppath ); - ppath.moveTo( QPoint( figRect.x() + figRect.width(), figRect.y() ) ); - ppath.quadTo( QPoint( figRect.x() + figRect.width() + 8, figRect.y() + figRect.height() / 2 ), QPoint( figRect.x() + figRect.width(), figRect.y() + figRect.height() ) ); - painter->drawPath( ppath ); - - painter->setPen( origpen ); - - QTextOption to( Qt::AlignCenter ); - painter->setFont( bold ); - painter->setPen( Qt::white ); - painter->drawText( figRect, tracks, to ); + TomahawkUtils::drawBackgroundAndNumbers( painter, tracks, figRect ); } painter->restore();