[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kget
Subject:    Re: [Kget] [PATCH] KGet Tray Icon and its Overlay
From:       Fabian Henze <flyser42 () gmx ! de>
Date:       2009-04-23 20:57:35
Message-ID: 200904232257.37473.flyser42 () gmx ! de
[Download RAW message or body]

Sorry I forgot to attach the actual patch, so here it comes...

-- Fabian 'Flyser' Henze


["kget-stop-blinking.diff" (text/x-patch)]

--- kdenetwork-4.2.2/kget/ui/tray.cpp	2008-12-21 21:20:46.000000000 +0100
+++ kdenetwork-4.2.2/kget/ui/tray.cpp	2009-04-23 21:45:39.000000000 +0200
@@ -34,16 +34,15 @@
   */
 Tray::Tray(MainWindow * parent)
     : KSystemTrayIcon(parent),
-      blinkTimer( 0 ),
       grayedIcon( 0 ),
       alternateIcon( 0 ),
-      overlay( 0 ),
-      overlayVisible( false ),
+      playOverlay( 0 ),
+      playOverlayVisible( false ),
       m_running( false )
 {
     baseIcon = new QPixmap( KSystemTrayIcon::loadIcon("kget").pixmap(22) );
-    playOverlay = new QPixmap( SmallIcon( "media-playback-start" ) );
-    stopOverlay = new QPixmap( SmallIcon( "media-playback-pause" ) );
+    // 12x12 pixel overlay looks fine, amarok uses 10x10
+    playOverlay = new QPixmap( SmallIcon( "media-playback-start", 12 ) );
 
     paintIcon();
 
@@ -71,13 +70,11 @@
 // dtor: delete internal classes
 Tray::~Tray()
 {
-    delete blinkTimer;
     delete baseIcon;
     delete grayedIcon;
     delete alternateIcon;
     delete playOverlay;
-    delete stopOverlay;
-//    delete overlay;   // deleting overlay is wrong - it's either playOverlay or stopOverlay
+//  delete overlay;   // deleting overlay is wrong - it's either playOverlay or stopOverlay
 }
 
 // filter middle mouse clicks to ask scheduler to paste URL
@@ -107,26 +104,9 @@
     m_running = running;
     kDebug(5001) << "Tray::setDownloading";
 
-    if(!blinkTimer)
-    {
-        blinkTimer = new QTimer;
-        connect( blinkTimer, SIGNAL( timeout() ), this, SLOT( slotTimeout() ) );
-    }
-
-    overlayVisible = true;
-
-    if(running)
-    {
-        overlay = playOverlay;
-        blinkTimer->start( 1500 );  // start 'blink' timer
-        paintIcon( 50, true );
-    }
-    else
-    {
-        overlay = stopOverlay;
-        blinkTimer->start( 1500 );  // start 'hide' timer
+    playOverlayVisible = running;
+//    if(running)
         paintIcon( 50, true );
-    }
 }
 
 bool Tray::isDownloading()
@@ -134,23 +114,6 @@
     return m_running;
 }
 
-// slot executed every 1s: toggle icon pixmap
-void Tray::slotTimeout()
-{
-    if ( overlay == playOverlay )
-    {
-        overlayVisible = !overlayVisible;
-        paintIcon( 50/*mergeLevel*/, true );
-    }
-    else if( overlay == stopOverlay )
-    {
-        overlay = 0;
-        blinkTimer->stop();
-        paintIcon( -1, true );
-        overlayVisible = false;
-    }
-}
-
 void Tray::paintIcon( int mergePixels, bool force )
 {
     // skip redrawing the same pixmap
@@ -203,15 +166,15 @@
 
 void Tray::blendOverlay( QPixmap * sourcePixmap )
 {
-    if ( !overlayVisible || !overlay || overlay->isNull() )
+    if ( !playOverlayVisible || !playOverlay || playOverlay->isNull() )
         return setIcon( *sourcePixmap );
 
     // here comes the tricky part.. no kdefx functions are helping here.. :-(
     // we have to blend pixmaps with different sizes (blending will be done in
-    // the bottom-left corner of source pixmap with a smaller overlay pixmap)
-    int opW = overlay->width(),
-        opH = overlay->height(),
-        opX = 1,
+    // the bottom-right corner of source pixmap with a smaller overlay pixmap)
+    int opW = playOverlay->width(),
+        opH = playOverlay->height(),
+        opX = sourcePixmap->width() - opW,
         opY = sourcePixmap->height() - opH;
 
     // get the rectangle where blending will take place 
@@ -224,7 +187,7 @@
 
     // blend the overlay image over the cropped rectangle
     QImage blendedImage = sourceCropped.toImage();
-    QImage overlayImage = overlay->toImage();
+    QImage overlayImage = playOverlay->toImage();
     KIconEffect::overlay( blendedImage, overlayImage );
     sourceCropped = QPixmap().fromImage( blendedImage );
 
--- kdenetwork-4.2.2/kget/ui/tray.h	2008-01-05 00:59:18.000000000 +0100
+++ kdenetwork-4.2.2/kget/ui/tray.h	2009-04-23 20:53:54.000000000 +0200
@@ -50,17 +50,14 @@
      */
     void blendOverlay( QPixmap * sourcePixmap );
 
-    QTimer *blinkTimer;
     QPixmap *baseIcon, *grayedIcon, *alternateIcon;
-    QPixmap *playOverlay, *stopOverlay;
-    QPixmap *overlay;   //!< The current overlay (may be NULL)
+    QPixmap *playOverlay;
     bool iconOn;
-    bool overlayVisible;
+    bool playOverlayVisible;
     bool m_running;
 
 private slots:
     void slotActivated( QSystemTrayIcon::ActivationReason reason );
-    void slotTimeout();
 };
 
 #endif


_______________________________________________
Kget mailing list
Kget@kde.org
https://mail.kde.org/mailman/listinfo/kget


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic