1 | /* |
2 | * SPDX-FileCopyrightText: 2025 Arjen Hiemstra <ahiemstra@heimr.nl> |
3 | * |
4 | * SPDX-License-Identifier: LGPL-2.0-or-later |
5 | */ |
6 | |
7 | #pragma once |
8 | |
9 | #include <QImage> |
10 | #include <QQuickWindow> |
11 | #include <QSGRenderNode> |
12 | |
13 | #include "shadernode.h" |
14 | |
15 | class ShaderMaterial; |
16 | |
17 | /*! |
18 | * A scene graph node that implements rendering a rectangle with a color and |
19 | * texture for the software renderer. |
20 | */ |
21 | class SoftwareRectangleNode : public QSGRenderNode |
22 | { |
23 | public: |
24 | SoftwareRectangleNode(); |
25 | |
26 | void setWindow(QQuickWindow *window); |
27 | |
28 | QRectF rect() const override; |
29 | void setRect(const QRectF &rect); |
30 | void setColor(const QColor &color); |
31 | void setImage(const QImage &image); |
32 | void setTextureProvider(QSGTextureProvider *provider); |
33 | void setRadius(qreal radius); |
34 | void setBorderWidth(qreal width); |
35 | void setBorderColor(const QColor &color); |
36 | |
37 | RenderingFlags flags() const override; |
38 | void preprocess() override; |
39 | void render(const RenderState *state) override; |
40 | |
41 | private: |
42 | void cleanupImageNode(); |
43 | |
44 | QQuickWindow *m_window = nullptr; |
45 | |
46 | QSGImageNode *m_imageNode = nullptr; |
47 | ShaderNode::TextureInfo m_textureInfo; |
48 | |
49 | QRectF m_rect; |
50 | // QImage m_image; |
51 | qreal m_radius = 0.0; |
52 | qreal m_borderWidth = 0.0; |
53 | QColor m_color = Qt::transparent; |
54 | QColor m_borderColor = Qt::transparent; |
55 | }; |
56 | |