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