diff --git a/data/images/avatar_frame.png b/data/images/avatar_frame.png new file mode 100644 index 000000000..29613f0dc Binary files /dev/null and b/data/images/avatar_frame.png differ diff --git a/resources.qrc b/resources.qrc index 9b18f86cc..2360b353b 100644 --- a/resources.qrc +++ b/resources.qrc @@ -1,107 +1,108 @@ - - ./data/images/avatar-dude-plus.png - ./data/images/avatar-dude.png - ./data/images/back-pressed.png - ./data/images/back-rest.png - ./data/images/cover-shadow.png - ./data/images/filter.png - ./data/images/loved.png - ./data/images/not-loved.png - ./data/images/no-album-art-placeholder.png - ./data/images/no-artist-image-placeholder.png - ./data/images/now-playing-panel.png - ./data/images/now-playing-speaker.png - ./data/images/pause-pressed.png - ./data/images/pause-rest.png - ./data/images/play-pressed.png - ./data/images/play-rest.png - ./data/images/sipplugin-add.png - ./data/images/sipplugin-remove.png - ./data/images/playlist-icon.png - ./data/images/repeat-1-on-pressed.png - ./data/images/repeat-1-on-rest.png - ./data/images/repeat-all-on-pressed.png - ./data/images/repeat-all-on-rest.png - ./data/images/repeat-off-pressed.png - ./data/images/repeat-off-rest.png - ./data/images/search-box-dismiss-x.png - ./data/images/seek-and-volume-knob-pressed.png - ./data/images/seek-and-volume-knob-rest.png - ./data/images/seek-slider-bkg.png - ./data/images/seek-slider-level.png - ./data/images/shuffle-off-pressed.png - ./data/images/shuffle-off-rest.png - ./data/images/shuffle-on-pressed.png - ./data/images/shuffle-on-rest.png - ./data/images/skip-pressed.png - ./data/images/skip-rest.png - ./data/images/user-avatar.png - ./data/images/view-toggle-active-centre.png - ./data/images/view-toggle-active-left.png - ./data/images/view-toggle-active-right.png - ./data/images/view-toggle-icon-artist-active.png - ./data/images/view-toggle-icon-artist-inactive.png - ./data/images/view-toggle-icon-cloud-active.png - ./data/images/view-toggle-icon-cloud-inactive.png - ./data/images/view-toggle-icon-list-active.png - ./data/images/view-toggle-icon-list-inactive.png - ./data/images/view-toggle-inactive-centre.png - ./data/images/view-toggle-inactive-left.png - ./data/images/view-toggle-inactive-right.png - ./data/images/view-toggle-pressed-centre.png - ./data/images/view-toggle-pressed-left.png - ./data/images/view-toggle-pressed-right.png - ./data/images/list-add.png - ./data/images/list-remove.png - ./data/images/arrow-up-double.png - ./data/images/arrow-down-double.png - ./data/images/volume-icon-full.png - ./data/images/arrow-right-double.png - ./data/images/view-refresh.png - ./data/images/volume-icon-muted.png - ./data/images/volume-slider-bkg.png - ./data/images/volume-slider-level.png - ./data/images/echonest_logo.png - ./data/images/loading-animation.gif - ./data/images/info.png - ./data/images/home.png - ./data/images/back.png - ./data/images/forward.png - ./data/images/music-icon.png - ./data/images/configure.png - ./data/images/create-playlist.png - ./data/images/add.png - ./data/images/recently-played.png - ./data/images/supercollection.png - ./data/images/sipplugin-online.png - ./data/images/sipplugin-offline.png - ./data/images/advanced-settings.png - ./data/images/account-settings.png - ./data/images/music-settings.png - ./data/images/resolvers-settings.png - ./data/images/lastfm-settings.png - ./data/images/automatic-playlist.png - ./data/images/station.png - ./data/images/new-additions.png - ./data/images/loved_playlist.png - ./data/stylesheets/topbar-radiobuttons.css - ./data/icons/tomahawk-icon-16x16.png - ./data/icons/tomahawk-icon-32x32.png - ./data/icons/tomahawk-icon-64x64.png - ./data/icons/tomahawk-icon-128x128.png - ./data/icons/tomahawk-icon-256x256.png - ./data/icons/tomahawk-icon-512x512.png - ./data/icons/audio-x-generic-22x22.png - ./data/icons/audio-x-generic-32x32.png - ./data/icons/audio-x-generic-16x16.png - ./data/www/auth.html - ./data/www/auth.na.html - ./data/www/tomahawk_banner_small.png - ./data/sql/dbmigrate-22_to_23.sql - ./data/sql/dbmigrate-23_to_24.sql - ./data/sql/dbmigrate-24_to_25.sql - ./data/sql/dbmigrate-25_to_26.sql - ./data/js/tomahawk.js - + + data/images/avatar-dude-plus.png + data/images/avatar-dude.png + data/images/back-pressed.png + data/images/back-rest.png + data/images/cover-shadow.png + data/images/filter.png + data/images/loved.png + data/images/not-loved.png + data/images/no-album-art-placeholder.png + data/images/no-artist-image-placeholder.png + data/images/now-playing-panel.png + data/images/now-playing-speaker.png + data/images/pause-pressed.png + data/images/pause-rest.png + data/images/play-pressed.png + data/images/play-rest.png + data/images/sipplugin-add.png + data/images/sipplugin-remove.png + data/images/playlist-icon.png + data/images/repeat-1-on-pressed.png + data/images/repeat-1-on-rest.png + data/images/repeat-all-on-pressed.png + data/images/repeat-all-on-rest.png + data/images/repeat-off-pressed.png + data/images/repeat-off-rest.png + data/images/search-box-dismiss-x.png + data/images/seek-and-volume-knob-pressed.png + data/images/seek-and-volume-knob-rest.png + data/images/seek-slider-bkg.png + data/images/seek-slider-level.png + data/images/shuffle-off-pressed.png + data/images/shuffle-off-rest.png + data/images/shuffle-on-pressed.png + data/images/shuffle-on-rest.png + data/images/skip-pressed.png + data/images/skip-rest.png + data/images/user-avatar.png + data/images/view-toggle-active-centre.png + data/images/view-toggle-active-left.png + data/images/view-toggle-active-right.png + data/images/view-toggle-icon-artist-active.png + data/images/view-toggle-icon-artist-inactive.png + data/images/view-toggle-icon-cloud-active.png + data/images/view-toggle-icon-cloud-inactive.png + data/images/view-toggle-icon-list-active.png + data/images/view-toggle-icon-list-inactive.png + data/images/view-toggle-inactive-centre.png + data/images/view-toggle-inactive-left.png + data/images/view-toggle-inactive-right.png + data/images/view-toggle-pressed-centre.png + data/images/view-toggle-pressed-left.png + data/images/view-toggle-pressed-right.png + data/images/list-add.png + data/images/list-remove.png + data/images/arrow-up-double.png + data/images/arrow-down-double.png + data/images/volume-icon-full.png + data/images/arrow-right-double.png + data/images/view-refresh.png + data/images/volume-icon-muted.png + data/images/volume-slider-bkg.png + data/images/volume-slider-level.png + data/images/echonest_logo.png + data/images/loading-animation.gif + data/images/info.png + data/images/home.png + data/images/back.png + data/images/forward.png + data/images/music-icon.png + data/images/configure.png + data/images/create-playlist.png + data/images/add.png + data/images/recently-played.png + data/images/supercollection.png + data/images/sipplugin-online.png + data/images/sipplugin-offline.png + data/images/advanced-settings.png + data/images/account-settings.png + data/images/music-settings.png + data/images/resolvers-settings.png + data/images/lastfm-settings.png + data/images/automatic-playlist.png + data/images/station.png + data/images/new-additions.png + data/images/loved_playlist.png + data/stylesheets/topbar-radiobuttons.css + data/icons/tomahawk-icon-16x16.png + data/icons/tomahawk-icon-32x32.png + data/icons/tomahawk-icon-64x64.png + data/icons/tomahawk-icon-128x128.png + data/icons/tomahawk-icon-256x256.png + data/icons/tomahawk-icon-512x512.png + data/icons/audio-x-generic-22x22.png + data/icons/audio-x-generic-32x32.png + data/icons/audio-x-generic-16x16.png + data/www/auth.html + data/www/auth.na.html + data/www/tomahawk_banner_small.png + data/sql/dbmigrate-22_to_23.sql + data/sql/dbmigrate-23_to_24.sql + data/sql/dbmigrate-24_to_25.sql + data/sql/dbmigrate-25_to_26.sql + data/js/tomahawk.js + data/images/avatar_frame.png + diff --git a/src/libtomahawk/network/controlconnection.cpp b/src/libtomahawk/network/controlconnection.cpp index 5284f3254..582e71564 100644 --- a/src/libtomahawk/network/controlconnection.cpp +++ b/src/libtomahawk/network/controlconnection.cpp @@ -124,7 +124,10 @@ ControlConnection::registerSource() Q_ASSERT( source == m_source.data() ); // qDebug() << Q_FUNC_INFO << "Setting avatar ... " << name() << !SipHandler::instance()->avatar( name() ).isNull(); - source->setAvatar( SipHandler::instance()->avatar( name() ) ); + if( !SipHandler::instance()->avatar( name() ).isNull() ) + { + source->setAvatar( SipHandler::instance()->avatar( name() ) ); + } m_registered = true; m_servent->registerControlConnection( this ); diff --git a/src/libtomahawk/source.cpp b/src/libtomahawk/source.cpp index be0317a8f..191906833 100644 --- a/src/libtomahawk/source.cpp +++ b/src/libtomahawk/source.cpp @@ -30,6 +30,7 @@ #include #include "utils/logger.h" +#include "utils/tomahawkutils.h" using namespace Tomahawk; @@ -41,7 +42,6 @@ Source::Source( int id, const QString& username ) , m_username( username ) , m_id( id ) , m_cc( 0 ) - , m_avatar( 0 ) { qDebug() << Q_FUNC_INFO << id << username; @@ -62,7 +62,6 @@ Source::Source( int id, const QString& username ) Source::~Source() { qDebug() << Q_FUNC_INFO << friendlyName(); - delete m_avatar; } @@ -123,18 +122,15 @@ Source::friendlyName() const void Source::setAvatar( const QPixmap& avatar ) { - //FIXME: use a proper pixmap store that's thread-safe - delete m_avatar; - m_avatar = new QPixmap( avatar ); + m_avatar = avatar; } QPixmap Source::avatar() const { - //FIXME: use a proper pixmap store that's thread-safe - if ( m_avatar ) - return QPixmap( *m_avatar ); + if( !m_avatar.isNull() ) + return TomahawkUtils::createAvatarFrame( m_avatar ); else return QPixmap(); } diff --git a/src/libtomahawk/source.h b/src/libtomahawk/source.h index 9d67c6212..b18dbe407 100644 --- a/src/libtomahawk/source.h +++ b/src/libtomahawk/source.h @@ -131,7 +131,7 @@ private: ControlConnection* m_cc; - QPixmap* m_avatar; + QPixmap m_avatar; Tomahawk::playlistinterface_ptr m_playlistInterface; }; diff --git a/src/libtomahawk/utils/tomahawkutils.cpp b/src/libtomahawk/utils/tomahawkutils.cpp index 3d74347db..35bed69ab 100644 --- a/src/libtomahawk/utils/tomahawkutils.cpp +++ b/src/libtomahawk/utils/tomahawkutils.cpp @@ -472,4 +472,16 @@ bringToFront() { } #endif +QPixmap +createAvatarFrame( const QPixmap &avatar ) +{ + QPixmap frame( ":/data/images/avatar_frame.png" ); + QPixmap scaledAvatar = avatar.scaled( frame.height() * 80 / 100, frame.width() * 80 / 100, Qt::KeepAspectRatio, Qt::SmoothTransformation ); + + QPainter painter( &frame ); + painter.drawPixmap( (frame.height() - scaledAvatar.height()) / 2, (frame.width() - scaledAvatar.width()) / 2, scaledAvatar ); + + return frame; +} + } // ns diff --git a/src/libtomahawk/utils/tomahawkutils.h b/src/libtomahawk/utils/tomahawkutils.h index 933f5c05c..d72fcd015 100644 --- a/src/libtomahawk/utils/tomahawkutils.h +++ b/src/libtomahawk/utils/tomahawkutils.h @@ -84,6 +84,8 @@ namespace TomahawkUtils /// Platform-specific bringing tomahawk mainwindow to front, b/c qt's activate() and such don't seem to work well enough for us DLLEXPORT void bringToFront(); + + DLLEXPORT QPixmap createAvatarFrame(const QPixmap &avatar); } #endif // TOMAHAWKUTILS_H