QWSHtml5CanvasSurface::QWSHtml5CanvasSurface(QWidget *widget) : QWSWindowSurface(widget), m_isServerSide(false), m_backingCanvasHandle(-1) { #ifdef QT_DEBUG_SURFACE qDebug() << "QWSHtml5CanvasSurface::QWSHtml5CanvasSurface(QWidget *widget)" << "(" << (void*)this << ")"; #endif SurfaceFlags flags = Buffered; if (isWidgetOpaque(widget)) flags |= Opaque; setSurfaceFlags(flags); }
QWSMemorySurface::QWSMemorySurface(QWidget *w) : QWSWindowSurface(w) { SurfaceFlags flags = Buffered; if (isWidgetOpaque(w)) flags |= Opaque; setSurfaceFlags(flags); #ifndef QT_NO_QWS_MULTIPROCESS memlock = QWSDisplay::Data::getClientLock(); #endif }
bool QWSMemorySurface::isValid() const { if (img.isNull()) return true; const QWidget *win = window(); if (preferredImageFormat(win) != img.format()) return false; if (isOpaque() != isWidgetOpaque(win)) // XXX: use QWidgetPrivate::isOpaque() return false; return true; }
// ### copied from qwindowsurface_raster.cpp -- should be cross-platform void QWSMemorySurface::beginPaint(const QRegion &rgn) { if (!isWidgetOpaque(window())) { QPainter p(&img); p.setCompositionMode(QPainter::CompositionMode_Source); const QVector<QRect> rects = rgn.rects(); const QColor blank = Qt::transparent; for (QVector<QRect>::const_iterator it = rects.begin(); it != rects.end(); ++it) { QRect r = *it; #ifdef Q_BACKINGSTORE_SUBSURFACES r.translate(painterOffset()); #endif p.fillRect(r, blank); } } QWSWindowSurface::beginPaint(rgn); }
QImage::Format QWSMemorySurface::preferredImageFormat(const QWidget *widget) const { QScreen *screen = getScreen(widget); const int depth = screen->depth(); const bool opaque = isWidgetOpaque(widget); if (!opaque) { if (depth <= 12) return QImage::Format_ARGB4444_Premultiplied; else if (depth <= 15) return QImage::Format_ARGB8555_Premultiplied; else if (depth <= 16) return QImage::Format_ARGB8565_Premultiplied; else if (depth <= 18) return QImage::Format_ARGB6666_Premultiplied; else return QImage::Format_ARGB32_Premultiplied; } QImage::Format format = screen->pixelFormat(); if (format > QImage::Format_Indexed8) // ### assumes all new image formats supports a QPainter return format; if (depth <= 12) return QImage::Format_RGB444; else if (depth <= 15) return QImage::Format_RGB555; else if (depth <= 16) return QImage::Format_RGB16; else if (depth <= 18) return QImage::Format_RGB666; else if (depth <= 24) return QImage::Format_RGB888; else return QImage::Format_ARGB32_Premultiplied; }