ListBoxDevice::ListBoxDevice(const QPixmap & pixmap, const QString & title, const QString & url, const QString & name, const QString & mountPoint, bool mounted, bool ejectable, bool removable, int id) : ListBoxLink(pixmap, title, url), name_(name), mountPoint_(mountPoint), mounted_(mounted), ejectable_(ejectable), removable_(removable),id_(id) { if (!eject.mask()) eject.setMask(eject); if (!locked.mask()) locked.setMask(locked); }
void QPixmap::setMask( const QBitmap &newmask ) { const QPixmap *tmp = &newmask; // dec cxx bug if ( (data == tmp->data) || ( newmask.handle() && newmask.handle() == handle() ) ) { QPixmap m = tmp->copy( TRUE ); setMask( *((QBitmap*)&m) ); data->selfmask = TRUE; // mask == pixmap return; } if ( newmask.isNull() ) { // reset the mask if (data->mask) { detach(); data->selfmask = FALSE; delete data->mask; data->mask = 0; } return; } detach(); data->selfmask = FALSE; if ( newmask.width() != width() || newmask.height() != height() ) { #if defined(QT_CHECK_RANGE) qWarning( "QPixmap::setMask: The pixmap and the mask must have " "the same size" ); #endif return; } #if defined(Q_WS_MAC) || (defined(Q_WS_X11) && !defined(QT_NO_XFTFREETYPE)) // when setting the mask, we get rid of the alpha channel completely delete data->alphapm; data->alphapm = 0; #endif // Q_WS_X11 && !QT_NO_XFTFREETYPE delete data->mask; QBitmap* newmaskcopy; if ( newmask.mask() ) newmaskcopy = (QBitmap*)new QPixmap( tmp->copy( TRUE ) ); else newmaskcopy = new QBitmap( newmask ); #ifdef Q_WS_X11 newmaskcopy->x11SetScreen( x11Screen() ); #endif data->mask = newmaskcopy; }
/*! Returns a pixmap with size \a s and mode \a m, generating one if needed. Generated pixmaps are cached. */ QPixmap QIconSet::pixmap( Size s, Mode m ) const { if ( !d ) { QPixmap r; return r; } QImage i; QIconSetPrivate * p = ((QIconSet *)this)->d; QPixmap * pm = 0; if ( s == Large ) { switch( m ) { case Normal: if ( !p->large.pm ) { ASSERT( p->small.pm ); i = p->small.pm->convertToImage(); i = i.smoothScale( i.width() * 3 / 2, i.height() * 3 / 2 ); p->large.pm = new QPixmap; p->large.generated = TRUE; p->large.pm->convertFromImage( i ); if ( !p->large.pm->mask() ) { i = i.createHeuristicMask(); QBitmap tmp; tmp.convertFromImage( i, Qt::MonoOnly + Qt::ThresholdDither ); p->large.pm->setMask( tmp ); } } pm = p->large.pm; break; case Active: if ( !p->largeActive.pm ) { p->largeActive.pm = new QPixmap( pixmap( Large, Normal ) ); p->largeActive.generated = TRUE; } pm = p->largeActive.pm; break; case Disabled: if ( !p->largeDisabled.pm ) { #if defined(_WS_QWS_) && !defined(QT_NO_DEPTH_32) p->largeDisabled.pm = newDisablePixmap(pixmap(Large,Normal)); #else QBitmap tmp; if ( p->large.generated && !p->smallDisabled.generated && p->smallDisabled.pm && !p->smallDisabled.pm->isNull() ) { // if there's a hand-drawn disabled small image, // but the normal big one is generated, use the // hand-drawn one to generate this one. i = p->smallDisabled.pm->convertToImage(); i = i.smoothScale( i.width() * 3 / 2, i.height() * 3 / 2 ); p->largeDisabled.pm = new QPixmap; p->largeDisabled.pm->convertFromImage( i ); if ( !p->largeDisabled.pm->mask() ) { i = i.createHeuristicMask(); tmp.convertFromImage( i, Qt::MonoOnly + Qt::ThresholdDither ); } } else { if (pixmap( Large, Normal).mask()) tmp = *pixmap( Large, Normal).mask(); else { QPixmap conv = pixmap( Large, Normal ); if ( !conv.isNull() ) { i = conv.convertToImage(); i = i.createHeuristicMask(); tmp.convertFromImage( i, Qt::MonoOnly + Qt::ThresholdDither ); } } p->largeDisabled.pm = new QPixmap( p->large.pm->width()+1, p->large.pm->height()+1); QColorGroup dis( QApplication::palette().disabled() ); p->largeDisabled.pm->fill( dis.background() ); QPainter painter( p->largeDisabled.pm ); painter.setPen( dis.base() ); painter.drawPixmap( 1, 1, tmp ); painter.setPen( dis.foreground() ); painter.drawPixmap( 0, 0, tmp ); } if ( !p->largeDisabled.pm->mask() ) { if ( !tmp.mask() ) tmp.setMask( tmp ); QBitmap mask( d->largeDisabled.pm->size() ); mask.fill( Qt::color0 ); QPainter painter( &mask ); painter.drawPixmap( 0, 0, tmp ); painter.drawPixmap( 1, 1, tmp ); painter.end(); p->largeDisabled.pm->setMask( mask ); } #endif p->largeDisabled.generated = TRUE; } pm = p->largeDisabled.pm; break; } } else { switch( m ) { case Normal: if ( !p->small.pm ) { ASSERT( p->large.pm ); i = p->large.pm->convertToImage(); i = i.smoothScale( i.width() * 2 / 3, i.height() * 2 / 3 ); p->small.pm = new QPixmap; p->small.generated = TRUE; p->small.pm->convertFromImage( i ); if ( !p->small.pm->mask() ) { i = i.createHeuristicMask(); QBitmap tmp; tmp.convertFromImage( i, Qt::MonoOnly + Qt::ThresholdDither ); p->small.pm->setMask( tmp ); } } pm = p->small.pm; break; case Active: if ( !p->smallActive.pm ) { p->smallActive.pm = new QPixmap( pixmap( Small, Normal ) ); p->smallActive.generated = TRUE; } pm = p->smallActive.pm; break; case Disabled: if ( !p->smallDisabled.pm ) { #if defined(_WS_QWS_) && !defined(QT_NO_DEPTH_32) p->smallDisabled.pm = newDisablePixmap(pixmap(Small,Normal)); #else QBitmap tmp; if ( p->small.generated && !p->largeDisabled.generated && p->largeDisabled.pm && !p->largeDisabled.pm->isNull() ) { // if there's a hand-drawn disabled large image, // but the normal small one is generated, use the // hand-drawn one to generate this one. i = p->largeDisabled.pm->convertToImage(); i = i.smoothScale( i.width() * 3 / 2, i.height() * 3 / 2 ); p->smallDisabled.pm = new QPixmap; p->smallDisabled.pm->convertFromImage( i ); if ( !p->smallDisabled.pm->mask() ) { i = i.createHeuristicMask(); tmp.convertFromImage( i, Qt::MonoOnly + Qt::ThresholdDither ); } } else { if ( pixmap( Small, Normal).mask()) tmp = *pixmap( Small, Normal).mask(); else { QPixmap conv = pixmap( Small, Normal ); if ( !conv.isNull() ) { i = conv.convertToImage(); i = i.createHeuristicMask(); tmp.convertFromImage( i, Qt::MonoOnly + Qt::ThresholdDither ); } } p->smallDisabled.pm = new QPixmap( p->small.pm->width()+1, p->small.pm->height()+1); QColorGroup dis( QApplication::palette().disabled() ); p->smallDisabled.pm->fill( dis.background() ); QPainter painter( p->smallDisabled.pm ); painter.setPen( dis.base() ); painter.drawPixmap( 1, 1, tmp ); painter.setPen( dis.foreground() ); painter.drawPixmap( 0, 0, tmp ); } if ( !p->smallDisabled.pm->mask() ) { if ( !tmp.mask() ) tmp.setMask( tmp ); QBitmap mask( d->smallDisabled.pm->size() ); mask.fill( Qt::color0 ); QPainter painter( &mask ); painter.drawPixmap( 0, 0, tmp ); painter.drawPixmap( 1, 1, tmp ); painter.end(); p->smallDisabled.pm->setMask( mask ); } #endif p->smallDisabled.generated = TRUE; } pm = p->smallDisabled.pm; break; } } ASSERT( pm ); return *pm; }