|
|
@ -39,6 +39,7 @@
|
|
|
|
#include <kconfig.h>
|
|
|
|
#include <kconfig.h>
|
|
|
|
|
|
|
|
|
|
|
|
#include <tqapplication.h>
|
|
|
|
#include <tqapplication.h>
|
|
|
|
|
|
|
|
#include <tqbitmap.h>
|
|
|
|
|
|
|
|
|
|
|
|
class KSystemTrayPrivate
|
|
|
|
class KSystemTrayPrivate
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -327,8 +328,33 @@ TQPixmap KSystemTray::loadSizedIcon( const TQString &icon, int iconWidth, KInsta
|
|
|
|
void KSystemTray::setPixmap( const TQPixmap& p )
|
|
|
|
void KSystemTray::setPixmap( const TQPixmap& p )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
TQPixmap iconPixmapToSet = p;
|
|
|
|
TQPixmap iconPixmapToSet = p;
|
|
|
|
if (TQPaintDevice::x11AppDepth() == 32) iconPixmapToSet.convertFromImage(KImageEffect::convertToPremultipliedAlpha( iconPixmapToSet.convertToImage() ));
|
|
|
|
if (TQPaintDevice::x11AppDepth() == 32) {
|
|
|
|
if (TQPaintDevice::x11AppDepth() == 32) setBackgroundMode( NoBackground );
|
|
|
|
// Since full ARGB visuals are in use, we must handle the three primary data
|
|
|
|
|
|
|
|
// channel types (color, alpha, and mask) separately.
|
|
|
|
|
|
|
|
// First, make the actual color and internal alpha of the icon is correct
|
|
|
|
|
|
|
|
TQImage correctedImage = KImageEffect::convertToPremultipliedAlpha( iconPixmapToSet.convertToImage() );
|
|
|
|
|
|
|
|
iconPixmapToSet.convertFromImage(correctedImage);
|
|
|
|
|
|
|
|
// Next, handle the mask channel to make sure that the transparent
|
|
|
|
|
|
|
|
// sections remain transparent when drawn on the screen
|
|
|
|
|
|
|
|
TQBitmap maskBitmap;
|
|
|
|
|
|
|
|
// Generate the mask utilizing ONLY the pixels that are fully opaque
|
|
|
|
|
|
|
|
TQImage newMaskImage = correctedImage;
|
|
|
|
|
|
|
|
int w = newMaskImage.width();
|
|
|
|
|
|
|
|
int h = newMaskImage.height();
|
|
|
|
|
|
|
|
for (int y = 0; y < h; ++y) {
|
|
|
|
|
|
|
|
TQRgb *ls = (TQRgb *)newMaskImage.scanLine( y );
|
|
|
|
|
|
|
|
for (int x = 0; x < w; ++x) {
|
|
|
|
|
|
|
|
TQRgb l = ls[x];
|
|
|
|
|
|
|
|
int r = int( tqRed( l ) );
|
|
|
|
|
|
|
|
int g = int( tqGreen( l ) );
|
|
|
|
|
|
|
|
int b = int( tqBlue( l ) );
|
|
|
|
|
|
|
|
int a = int( (tqAlpha( l ) == 255) ? 255 : 0 );
|
|
|
|
|
|
|
|
ls[x] = tqRgba( r, g, b, a );
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
maskBitmap.convertFromImage(newMaskImage.createAlphaMask());
|
|
|
|
|
|
|
|
setMask(maskBitmap);
|
|
|
|
|
|
|
|
}
|
|
|
|
TQLabel::setPixmap( iconPixmapToSet );
|
|
|
|
TQLabel::setPixmap( iconPixmapToSet );
|
|
|
|
#ifdef Q_WS_X11
|
|
|
|
#ifdef Q_WS_X11
|
|
|
|
KWin::setIcons( winId(), iconPixmapToSet, TQPixmap());
|
|
|
|
KWin::setIcons( winId(), iconPixmapToSet, TQPixmap());
|
|
|
|