From c29ce585a52f68ac6802043013388c26c33a2fee Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Tue, 9 Aug 2011 22:53:12 +0200 Subject: [PATCH] Added a frame to the avatars as requested in bug TWK-106. The frame image must be in displayed size and the avatar takes 80% of the available space centered. --- data/images/avatar_frame.png | Bin 0 -> 6360 bytes resources.qrc | 211 +++++++++--------- src/libtomahawk/network/controlconnection.cpp | 5 +- src/libtomahawk/source.cpp | 12 +- src/libtomahawk/source.h | 2 +- src/libtomahawk/utils/tomahawkutils.cpp | 12 + src/libtomahawk/utils/tomahawkutils.h | 2 + 7 files changed, 129 insertions(+), 115 deletions(-) create mode 100644 data/images/avatar_frame.png diff --git a/data/images/avatar_frame.png b/data/images/avatar_frame.png new file mode 100644 index 0000000000000000000000000000000000000000..29613f0dc8807a19f71f8b0cfef32e81e25f3253 GIT binary patch literal 6360 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 - - ./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