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( const QPixmap &pixmap ) : QPaintDevice( QInternal::Pixmap ) { if ( pixmap.paintingActive() ) { // make a deep copy data = 0; operator=( pixmap.copy() ); } else { data = pixmap.data; data->ref(); devFlags = pixmap.devFlags; // copy QPaintDevice flags #if defined(Q_WS_WIN) hdc = pixmap.hdc; // copy Windows device context #elif defined(Q_WS_X11) hd = pixmap.hd; // copy X11 drawable rendhd = pixmap.rendhd; copyX11Data( &pixmap ); // copy x11Data #elif defined(Q_WS_MAC) hd = pixmap.hd; #endif } }