Source code
Revision control
Copy as Markdown
// Copyright (C) 2025 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef PAINTERWINDOW_H
#define PAINTERWINDOW_H
#include <QColor>
#include <QWindow>
#if QT_CONFIG(opengl)
# include <QOffscreenSurface>
#endif
#include <rhi/qrhi.h>
QT_FORWARD_DECLARE_CLASS(QCanvasPainter)
QT_FORWARD_DECLARE_CLASS(QCanvasPainterFactory)
class PainterWindow : public QWindow
{
Q_OBJECT
public:
PainterWindow(QRhi::Implementation api);
~PainterWindow() override;
QColor fillColor() const;
void setFillColor(const QColor &color);
protected:
virtual void paint(QCanvasPainter *painter);
virtual void cleanup();
void exposeEvent(QExposeEvent *) override;
bool event(QEvent *) override;
private:
void updateSurfaceType();
void releaseSwapChain();
void init();
void resizeSwapChain();
void render();
QColor m_fillColor = { 0, 0, 0, 0 };
QCanvasPainterFactory *m_factory = nullptr;
QRhi::Implementation m_graphicsApi = QRhi::Null;
#if QT_CONFIG(opengl)
std::unique_ptr<QOffscreenSurface> m_fallbackSurface;
#endif
std::unique_ptr<QRhi> m_rhi;
std::unique_ptr<QRhiSwapChain> m_sc;
std::unique_ptr<QRhiRenderBuffer> m_ds;
std::unique_ptr<QRhiRenderPassDescriptor> m_rp;
bool m_hasSwapChain = false;
bool m_running = false;
bool m_notExposed = false;
bool m_newlyExposed = false;
};
#endif // PAINTERWINDOW_H