// 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 "qfbbackingstore_p.h" #include "qfbwindow_p.h" #include "qfbscreen_p.h" #include #include #include QT_BEGIN_NAMESPACE QFbBackingStore::QFbBackingStore(QWindow *window) : QPlatformBackingStore(window) { if (window->handle()) (static_cast(window->handle()))->setBackingStore(this); else (static_cast(window->screen()->handle()))->addPendingBackingStore(this); } QFbBackingStore::~QFbBackingStore() { } void QFbBackingStore::flush(QWindow *window, const QRegion ®ion, const QPoint &offset) { Q_UNUSED(window); Q_UNUSED(offset); (static_cast(window->handle()))->repaint(region); } void QFbBackingStore::resize(const QSize &size, const QRegion &staticContents) { Q_UNUSED(staticContents); if (mImage.size() != size) mImage = QImage(size, window()->screen()->handle()->format()); } const QImage QFbBackingStore::image() { return mImage; } QImage QFbBackingStore::toImage() const { return mImage; } void QFbBackingStore::lock() { mImageMutex.lock(); } void QFbBackingStore::unlock() { mImageMutex.unlock(); } void QFbBackingStore::beginPaint(const QRegion ®ion) { lock(); if (mImage.hasAlphaChannel()) { QPainter p(&mImage); p.setCompositionMode(QPainter::CompositionMode_Source); for (const QRect &r : region) p.fillRect(r, Qt::transparent); } } void QFbBackingStore::endPaint() { unlock(); } QT_END_NAMESPACE