blob: f292344ca1ffd589cf80c0890f3bef7986b98e9e (
plain)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 | // Copyright (C) 2016 The Qt Company Ltd.// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only#include"qrasterwindow.h"#include <QtGui/private/qpaintdevicewindow_p.h>#include <QtGui/QBackingStore>#include <QtGui/QPainter> QT_BEGIN_NAMESPACE /*! \class QRasterWindow \inmodule QtGui \since 5.4 \brief QRasterWindow is a convenience class for using QPainter on a QWindow. QRasterWindow is a QWindow with a raster-based, non-OpenGL surface. On top of the functionality offered by QWindow, QRasterWindow adds a virtual paintEvent() function and the possibility to open a QPainter on itself. The underlying paint engine will be the raster one, meaning that all drawing will happen on the CPU. For performing accelerated, OpenGL-based drawing, use QOpenGLWindow instead. Internally the class is thin wrapper for QWindow and QBackingStore and is very similar to the \l{Raster Window Example}{Raster Window Example} that uses these classes directly. \sa QPaintDeviceWindow::paintEvent(), QPaintDeviceWindow::update()*/class QRasterWindowPrivate :public QPaintDeviceWindowPrivate {Q_DECLARE_PUBLIC(QRasterWindow)public:voidhandleResizeEvent() override {Q_Q(QRasterWindow);if(backingstore->size() != q->size())markWindowAsDirty();}voidbeginPaint(const QRegion ®ion) override {Q_Q(QRasterWindow);const QSize size = q->size();if(backingstore->size() != size) backingstore->resize(size); backingstore->beginPaint(region);}voidendPaint() override { backingstore->endPaint();}voidflush(const QRegion ®ion) override {Q_Q(QRasterWindow); backingstore->flush(region, q);} QScopedPointer<QBackingStore> backingstore;};/*! Constructs a new QRasterWindow with \a parent.*/QRasterWindow::QRasterWindow(QWindow *parent):QPaintDeviceWindow(*(new QRasterWindowPrivate), parent){setSurfaceType(QSurface::RasterSurface);d_func()->backingstore.reset(newQBackingStore(this));}QRasterWindow::~QRasterWindow(){Q_D(QRasterWindow);// Delete backingstore while window is still alive, as it// might need to reference the window in the process d->backingstore.reset(nullptr);}/*! \internal*/intQRasterWindow::metric(PaintDeviceMetric metric)const{Q_D(const QRasterWindow);switch(metric) {case PdmDepth:return d->backingstore->paintDevice()->depth();default:break;}returnQPaintDeviceWindow::metric(metric);}/*! \internal*/ QPaintDevice *QRasterWindow::redirected(QPoint *)const{Q_D(const QRasterWindow);return d->backingstore->paintDevice();}voidQRasterWindow::resizeEvent(QResizeEvent *){} QT_END_NAMESPACE #include"moc_qrasterwindow.cpp"
|