[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: extragear/multimedia/amarok/src
From: Kevin Funk <krf () gmx ! de>
Date: 2009-01-12 13:47:39
Message-ID: 1231768059.334263.5246.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 909945 by kfunk:
Show play/pause indicator on system tray icon
M +42 -4 Systray.cpp
M +3 -1 Systray.h
--- trunk/extragear/multimedia/amarok/src/Systray.cpp #909944:909945
@@ -35,6 +35,7 @@
#include <KAction>
#include <KApplication>
+#include <KIcon>
#include <KIconEffect>
#include <KLocale>
#include <KMenu>
@@ -48,6 +49,19 @@
#include <QTextDocument> // for Qt::escape()
#include <QToolTip>
+namespace Amarok
+{
+ static QPixmap
+ loadOverlay( const QString &iconName )
+ {
+ KIcon icon = KIcon( iconName );
+ if ( !icon.isNull() )
+ return icon.pixmap( 10, 10 ); // overlay size, adjust here
+
+ return 0;
+ }
+}
+
Amarok::TrayIcon::TrayIcon( QWidget *playerWidget )
: KSystemTrayIcon( playerWidget )
, EngineObserver( The::engineController() )
@@ -69,6 +83,9 @@
contextMenu()->addAction( ac->action( "stop" ) );
contextMenu()->addAction( ac->action( "next" ) );
+ m_playOverlay = loadOverlay( "media-playback-start" );
+ m_pauseOverlay = loadOverlay( "media-playback-pause" );
+
PERF_LOG( "Adding system tray icon" );
paintIcon();
@@ -243,6 +260,7 @@
case Phonon::PlayingState:
m_track = The::engineController()->currentTrack();
m_trackLength = m_track->length();
+
paintIcon();
setupMenu();
break;
@@ -254,6 +272,10 @@
break;
case Phonon::PausedState:
+ paintIcon();
+ blendOverlay( m_pauseOverlay );
+ break;
+
case Phonon::LoadingState:
case Phonon::ErrorState:
case Phonon::BufferingState:
@@ -314,8 +336,8 @@
if( m_baseIcon.isNull() )
{
QIcon icon = KSystemTrayIcon::loadIcon( "amarok" );
+ m_baseIcon = icon.pixmap( geometry().size() );
setIcon( icon ); // show icon
- m_baseIcon = icon.pixmap( geometry().size() );
return; // return because m_baseIcon is still null after first startup
}
@@ -340,16 +362,32 @@
return;
// draw m_baseIcon on top of the gray version
- QPixmap pixmap = m_grayedIcon; // copies object
- QPainter p( &pixmap );
+ m_icon = m_grayedIcon; // copies object
+ QPainter p( &m_icon );
p.drawPixmap( 0, 0, m_baseIcon, 0, 0, 0, geometry().height() - mergePos );
+ p.end();
oldMergePos = mergePos;
- setIcon( pixmap );
+ blendOverlay( m_playOverlay );
}
void
+Amarok::TrayIcon::blendOverlay( const QPixmap &overlay )
+{
+ if ( !overlay.isNull() )
+ {
+ // draw overlay at bottom right
+ const int x = geometry().size().width() - overlay.size().width();
+ const int y = geometry().size().height() - overlay.size().width();
+ QPainter p( &m_icon );
+ p.drawPixmap( x, y, overlay );
+ p.end();
+ setIcon( m_icon );
+ }
+}
+
+void
Amarok::TrayIcon::setupMenu()
{
if( !m_track )
--- trunk/extragear/multimedia/amarok/src/Systray.h #909944:909945
@@ -60,11 +60,13 @@
void setupToolTip();
void paintIcon( long trackPosition = -1 );
+ void blendOverlay( const QPixmap &overlay );
Meta::TrackPtr m_track;
long m_trackLength;
- QPixmap m_baseIcon, m_grayedIcon;
+ QPixmap m_baseIcon, m_grayedIcon, m_icon;
+ QPixmap m_playOverlay, m_pauseOverlay;
QList<PopupDropperAction *> m_extraActions;
};
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic