void amaroK::TrayIcon::blendOverlay( QPixmap &sourcePixmap ) { if ( !overlayVisible || !overlay || overlay->isNull() ) return setPixmap( sourcePixmap ); // @since 3.2 // 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, opY = sourcePixmap.height() - opH; // get the rectangle where blending will take place QPixmap sourceCropped( opW, opH, sourcePixmap.depth() ); copyBlt( &sourceCropped, 0,0, &sourcePixmap, opX,opY, opW,opH ); //speculative fix for a bactrace we received //crash was in covertToImage() somewhere in this function if( sourceCropped.isNull() ) return setPixmap( sourcePixmap ); // blend the overlay image over the cropped rectangle QImage blendedImage = sourceCropped.convertToImage(); QImage overlayImage = overlay->convertToImage(); KIconEffect::overlay( blendedImage, overlayImage ); sourceCropped.convertFromImage( blendedImage ); // put back the blended rectangle to the original image QPixmap sourcePixmapCopy = sourcePixmap; copyBlt( &sourcePixmapCopy, opX,opY, &sourceCropped, 0,0, opW,opH ); setPixmap( sourcePixmapCopy ); // @since 3.2 }
QPixmap &QPixmap::operator=( const QPixmap &pixmap ) { if ( paintingActive() ) { #if defined(QT_CHECK_STATE) qWarning("QPixmap::operator=: Cannot assign to pixmap during painting"); #endif return *this; } pixmap.data->ref(); // avoid 'x = x' deref(); if ( pixmap.paintingActive() ) { // make a deep copy init( pixmap.width(), pixmap.height(), pixmap.depth(), pixmap.data->bitmap, pixmap.data->optim ); data->uninit = FALSE; if ( !isNull() ) copyBlt( this, 0, 0, &pixmap, 0, 0, pixmap.width(), pixmap.height() ); pixmap.data->deref(); } else { data = pixmap.data; devFlags = pixmap.devFlags; // copy QPaintDevice flags #if defined(Q_WS_WIN) hdc = pixmap.hdc; #elif defined(Q_WS_PM) hps = pixmap.hps; #elif defined(Q_WS_X11) hd = pixmap.hd; // copy QPaintDevice drawable rendhd = pixmap.rendhd; copyX11Data( &pixmap ); // copy x11Data #elif defined(Q_WS_MACX) || defined(Q_OS_MAC9) hd = pixmap.hd; #endif } return *this; }
QPixmap QPixmap::copy( bool ignoreMask ) const { #if defined(Q_WS_X11) int old = x11SetDefaultScreen( x11Screen() ); #endif // Q_WS_X11 QPixmap pm( data->w, data->h, data->d, data->bitmap, data->optim ); if ( !pm.isNull() ) { // copy the bitmap #if defined(Q_WS_X11) pm.cloneX11Data( this ); #endif // Q_WS_X11 if ( ignoreMask ) bitBlt( &pm, 0, 0, this, 0, 0, data->w, data->h, Qt::CopyROP, TRUE ); else copyBlt( &pm, 0, 0, this, 0, 0, data->w, data->h ); } #if defined(Q_WS_X11) x11SetDefaultScreen( old ); #endif // Q_WS_X11 return pm; }
void BGMonitorArrangement::setPixmap( const KPixmap & pm ) { for (unsigned screen = 0; screen < m_pBGMonitor.size(); ++screen) { QRect position = m_pBGMonitor[screen]->previewPosition(); QPixmap monitorPixmap( position.size(), pm.depth() ); copyBlt( &monitorPixmap, 0, 0, &pm, position.x(), position.y(), position.width(), position.height() ); m_pBGMonitor[screen]->monitor()->setPixmap(monitorPixmap); } }
static QPixmap scalePixmap( const QPixmap& pm, int w, int h ) { #if QT_VERSION >= 0x030200 QPixmap result( 20, 20, pm.depth() ); result.setMask( QBitmap( 20, 20, true ) ); QPixmap scaled( pm.convertToImage().smoothScale( w, h ) ); copyBlt( &result, (20 - w) / 2, (20 - h) / 2, &scaled, 0, 0, w, h ); return result; #else Q_UNUSED(w); Q_UNUSED(h); return pm; #endif }
void amaroK::TrayIcon::paintIcon( int mergePixels, bool force ) { // skip redrawing the same pixmap static int mergePixelsCache = 0; if ( mergePixels == mergePixelsCache && !force ) return; mergePixelsCache = mergePixels; if ( mergePixels < 0 ) return blendOverlay( baseIcon ); // make up the grayed icon if ( grayedIcon.isNull() ) { QImage tmpTrayIcon = baseIcon.convertToImage(); KIconEffect::semiTransparent( tmpTrayIcon ); grayedIcon = tmpTrayIcon; } if ( mergePixels == 0 ) return blendOverlay( grayedIcon ); // make up the alternate icon (use hilight color but more saturated) if ( alternateIcon.isNull() ) { QImage tmpTrayIcon = baseIcon.convertToImage(); // eros: this looks cool with dark red blue or green but sucks with // other colors (such as kde default's pale pink..). maybe the effect // or the blended color has to be changed.. QColor saturatedColor = palette().active().highlight(); int hue, sat, value; saturatedColor.getHsv( &hue, &sat, &value ); saturatedColor.setHsv( hue, sat > 200 ? 200 : sat, value < 100 ? 100 : value ); KIconEffect::colorize( tmpTrayIcon, saturatedColor/* Qt::blue */, 0.9 ); alternateIcon = tmpTrayIcon; } if ( mergePixels >= alternateIcon.height() ) return blendOverlay( alternateIcon ); // mix [ grayed <-> colored ] icons QPixmap tmpTrayPixmap = alternateIcon; copyBlt( &tmpTrayPixmap, 0,0, &grayedIcon, 0,0, alternateIcon.width(), alternateIcon.height() - mergePixels ); blendOverlay( tmpTrayPixmap ); }
void PanelBrowserMenu::slotMimeCheck() { // get the first map entry QMap<int, bool>::Iterator it = _mimemap.begin(); // no mime types left to check -> stop timer if(it == _mimemap.end()) { _mimecheckTimer->stop(); return; } int id = it.key(); QString file = _filemap[id]; _mimemap.remove(it); KURL url; url.setPath( path() + '/' + file ); // KMimeType::Ptr mt = KMimeType::findByURL(url, 0, true, false); // QString icon(mt->icon(url, true)); QString icon = KMimeType::iconForURL( url ); // kdDebug() << url.url() << ": " << icon << endl; file = KStringHandler::cEmSqueeze( file, fontMetrics(), 20 ); file.replace("&", "&&"); if(!_icons->contains(icon)) { QPixmap pm = SmallIcon(icon); if( pm.height() > 16 ) { QPixmap cropped( 16, 16 ); copyBlt( &cropped, 0, 0, &pm, 0, 0, 16, 16 ); pm = cropped; } _icons->insert(icon, pm); changeItem(id, pm, file); } else changeItem(id, CICON(icon), file); }
void ResultViewPic::showPiece( const QRect &piece ) { copyBlt ( &mCurrentPic, piece.x(), piece.y(), &mFullPic, piece.x(), piece.y(), piece.width(), piece.height() ); mPicLabel->setPixmap( mCurrentPic ); }
const QPixmap& LayoutIcon::findPixmap(const QString& code_, bool showFlag, const QString& displayName_) { QPixmap* pm = NULL; if( code_ == ERROR_CODE ) { pm = m_pixmapCache[ERROR_CODE]; if( pm == NULL ) { pm = createErrorPixmap(); m_pixmapCache.insert(ERROR_CODE, pm); } return *pm; } QString displayName(displayName_); if( displayName.isEmpty() ) { displayName = KxkbConfig::getDefaultDisplayName(code_); } if( displayName.length() > 3 ) displayName = displayName.left(3); const QString pixmapKey( showFlag ? code_ + "." + displayName : displayName ); pm = m_pixmapCache[pixmapKey]; if( pm ) return *pm; QString flag; if( showFlag ) { QString countryCode = getCountryFromLayoutName( code_ ); flag = locate("locale", flagTemplate.arg(countryCode)); } if( flag.isEmpty() ) { pm = new QPixmap(FLAG_MAX_WIDTH, FLAG_MAX_HEIGHT); pm->fill(Qt::gray); } else { pm = new QPixmap(flag); dimPixmap( *pm ); #if 0 if( pm->height() < FLAG_MAX_HEIGHT ) { QPixmap* pix = new QPixmap(FLAG_MAX_WIDTH, FLAG_MAX_HEIGHT); pix->fill( Qt::lightGray ); // pix->fill( QColor(qRgba(127,127,127,255)) ); // QBitmap mask; // mask.fill(1); // pix->setMask(mask); int dy = (pix->height() - pm->height()) / 2; copyBlt( pix, 0, dy, pm, 0, 0, -1, -1 ); // QPixmap* px = new QPixmap(21, 14); // px->convertFromImage(img);*/ delete pm; pm = pix; } #endif } QPainter p(pm); p.setFont(m_labelFont); p.setPen(Qt::black); p.drawText(1, 1, pm->width(), pm->height()-2, Qt::AlignCenter, displayName); p.setPen(Qt::white); p.drawText(0, 0, pm->width(), pm->height()-2, Qt::AlignCenter, displayName); m_pixmapCache.insert(pixmapKey, pm); return *pm; }