Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qsgsoftwarerenderablenodeupdater_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#ifndef QSGSOFTWARERENDERABLENODEUPDATER_H
6#define QSGSOFTWARERENDERABLENODEUPDATER_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
21
22#include <private/qsgadaptationlayer_p.h>
23
24#include <QTransform>
25#include <QStack>
26#include <QRectF>
27
29
31{
32public:
33 QSGSoftwareRenderableNodeUpdater(QSGAbstractSoftwareRenderer *renderer);
35
36 bool visit(QSGTransformNode *) override;
37 void endVisit(QSGTransformNode *) override;
38 bool visit(QSGClipNode *) override;
39 void endVisit(QSGClipNode *) override;
40 bool visit(QSGGeometryNode *) override;
41 void endVisit(QSGGeometryNode *) override;
42 bool visit(QSGOpacityNode *) override;
43 void endVisit(QSGOpacityNode *) override;
44 bool visit(QSGInternalImageNode *) override;
45 void endVisit(QSGInternalImageNode *) override;
46 bool visit(QSGPainterNode *) override;
47 void endVisit(QSGPainterNode *) override;
48 bool visit(QSGInternalRectangleNode *) override;
49 void endVisit(QSGInternalRectangleNode *) override;
50 bool visit(QSGGlyphNode *) override;
51 void endVisit(QSGGlyphNode *) override;
52 bool visit(QSGRootNode *) override;
53 void endVisit(QSGRootNode *) override;
54#if QT_CONFIG(quick_sprite)
57#endif
58 bool visit(QSGRenderNode *) override;
59 void endVisit(QSGRenderNode *) override;
60
61 void updateNodes(QSGNode *node, bool isNodeRemoved = false);
62
63private:
64 struct NodeState {
65 float opacity;
66 QRegion clip;
67 bool hasClip;
68 QTransform transform;
69 QSGNode *parent;
70 };
71
72 NodeState currentState(QSGNode *node) const;
73
74 template<class NODE>
75 bool updateRenderableNode(QSGSoftwareRenderableNode::NodeType type, NODE *node);
76
77 QSGAbstractSoftwareRenderer *m_renderer;
78 QStack<float> m_opacityState;
79 QStack<QRegion> m_clipState;
80 bool m_hasClip;
81 QStack<QTransform> m_transformState;
82 QHash<QSGNode*,NodeState> m_stateMap;
83};
84
85template<class NODE>
86bool QSGSoftwareRenderableNodeUpdater::updateRenderableNode(QSGSoftwareRenderableNode::NodeType type, NODE *node)
87{
88 //Check if we already know about node
89 auto renderableNode = m_renderer->renderableNode(node);
90 if (renderableNode == nullptr) {
91 renderableNode = new QSGSoftwareRenderableNode(type, node);
92 m_renderer->addNodeMapping(node, renderableNode);
93 }
94
95 //Update the node
96 renderableNode->setTransform(m_transformState.top());
97 renderableNode->setOpacity(m_opacityState.top());
98 renderableNode->setClipRegion(m_clipState.top(), m_hasClip);
99
100 renderableNode->update();
101 m_stateMap[node] = currentState(node);
102
103 return true;
104}
105
106QT_END_NAMESPACE
107
108#endif // QSGSOFTWARERENDERABLENODEUPDATER_H
QSGSoftwareRenderableNodeUpdater(QSGAbstractSoftwareRenderer *renderer)
void updateNodes(QSGNode *node, bool isNodeRemoved=false)
Combined button and popup list for selecting options.
QT_BEGIN_NAMESPACE Q_STATIC_LOGGING_CATEGORY(lcSynthesizedIterableAccess, "qt.iterable.synthesized", QtWarningMsg)