diff -r 2f34d5167611 -r fcece45ef507 src/gui/painting/qwindowsurface_s60.cpp --- a/src/gui/painting/qwindowsurface_s60.cpp Fri Apr 16 15:50:13 2010 +0300 +++ b/src/gui/painting/qwindowsurface_s60.cpp Mon May 03 13:17:34 2010 +0300 @@ -70,13 +70,13 @@ // We create empty CFbsBitmap here -> it will be resized in setGeometry CFbsBitmap *bitmap = q_check_ptr(new CFbsBitmap); // CBase derived object needs check on new qt_symbian_throwIfError( bitmap->Create( TSize(0, 0), mode ) ); - + QS60PixmapData *data = new QS60PixmapData(QPixmapData::PixmapType); if (data) { data->fromSymbianBitmap(bitmap, true); d_ptr->device = QPixmap(data); } - + setStaticContentsSupport(true); } QS60WindowSurface::~QS60WindowSurface() @@ -89,24 +89,15 @@ if (!qt_widget_private(window())->isOpaque) { QS60PixmapData *pixmapData = static_cast(d_ptr->device.data_ptr().data()); pixmapData->beginDataAccess(); - QImage &image = pixmapData->image; - QRgb *data = reinterpret_cast(image.bits()); - const int row_stride = image.bytesPerLine() / 4; - - const QVector rects = rgn.rects(); - for (QVector::const_iterator it = rects.begin(); it != rects.end(); ++it) { - const int x_start = it->x(); - const int width = it->width(); - const int y_start = it->y(); - const int height = it->height(); + QPainter p(&pixmapData->image); + p.setCompositionMode(QPainter::CompositionMode_Source); + const QVector rects = rgn.rects(); + const QColor blank = Qt::transparent; + for (QVector::const_iterator it = rects.begin(); it != rects.end(); ++it) { + p.fillRect(*it, blank); + } - QRgb *row = data + row_stride * y_start; - for (int y = 0; y < height; ++y) { - qt_memfill(row + x_start, 0U, width); - row += row_stride; - } - } pixmapData->endDataAccess(); } } @@ -128,7 +119,7 @@ const QPoint off = offset(widget); QImage *img = &(static_cast(d_ptr->device.data_ptr().data())->image); - + QRect rect(off, widget->size()); rect &= QRect(QPoint(), img->size());