Line | Source | Count |
1 | | - |
2 | | - |
3 | | - |
4 | | - |
5 | | - |
6 | | - |
7 | | - |
8 | | - |
9 | | - |
10 | | - |
11 | | - |
12 | | - |
13 | | - |
14 | | - |
15 | | - |
16 | | - |
17 | | - |
18 | | - |
19 | | - |
20 | | - |
21 | | - |
22 | | - |
23 | | - |
24 | | - |
25 | | - |
26 | | - |
27 | | - |
28 | | - |
29 | | - |
30 | | - |
31 | | - |
32 | | - |
33 | | - |
34 | | - |
35 | | - |
36 | | - |
37 | | - |
38 | | - |
39 | | - |
40 | #ifndef QSGSOFTWARERENDERABLENODEUPDATER_H | - |
41 | #define QSGSOFTWARERENDERABLENODEUPDATER_H | - |
42 | | - |
43 | | - |
44 | | - |
45 | | - |
46 | | - |
47 | | - |
48 | | - |
49 | | - |
50 | | - |
51 | | - |
52 | | - |
53 | | - |
54 | #include "qsgsoftwarerenderablenode_p.h" | - |
55 | #include "qsgabstractsoftwarerenderer_p.h" | - |
56 | | - |
57 | #include <private/qsgadaptationlayer_p.h> | - |
58 | | - |
59 | #include <QTransform> | - |
60 | #include <QStack> | - |
61 | #include <QRectF> | - |
62 | | - |
63 | QT_BEGIN_NAMESPACE | - |
64 | | - |
65 | class QSGSoftwareRenderableNodeUpdater : public QSGNodeVisitorEx | - |
66 | { | - |
67 | public: | - |
68 | QSGSoftwareRenderableNodeUpdater(QSGAbstractSoftwareRenderer *renderer); | - |
69 | virtual ~QSGSoftwareRenderableNodeUpdater(); | - |
70 | | - |
71 | bool visit(QSGTransformNode *) override; | - |
72 | void endVisit(QSGTransformNode *) override; | - |
73 | bool visit(QSGClipNode *) override; | - |
74 | void endVisit(QSGClipNode *) override; | - |
75 | bool visit(QSGGeometryNode *) override; | - |
76 | void endVisit(QSGGeometryNode *) override; | - |
77 | bool visit(QSGOpacityNode *) override; | - |
78 | void endVisit(QSGOpacityNode *) override; | - |
79 | bool visit(QSGInternalImageNode *) override; | - |
80 | void endVisit(QSGInternalImageNode *) override; | - |
81 | bool visit(QSGPainterNode *) override; | - |
82 | void endVisit(QSGPainterNode *) override; | - |
83 | bool visit(QSGInternalRectangleNode *) override; | - |
84 | void endVisit(QSGInternalRectangleNode *) override; | - |
85 | bool visit(QSGGlyphNode *) override; | - |
86 | void endVisit(QSGGlyphNode *) override; | - |
87 | bool visit(QSGRootNode *) override; | - |
88 | void endVisit(QSGRootNode *) override; | - |
89 | #if QT_CONFIG(quick_sprite) | - |
90 | bool visit(QSGSpriteNode *) override; | - |
91 | void endVisit(QSGSpriteNode *) override; | - |
92 | #endif | - |
93 | bool visit(QSGRenderNode *) override; | - |
94 | void endVisit(QSGRenderNode *) override; | - |
95 | | - |
96 | void updateNodes(QSGNode *node, bool isNodeRemoved = false); | - |
97 | | - |
98 | private: | - |
99 | struct NodeState { | - |
100 | float opacity; | - |
101 | QRegion clip; | - |
102 | bool hasClip; | - |
103 | QTransform transform; | - |
104 | QSGNode *parent; | - |
105 | }; | - |
106 | | - |
107 | NodeState currentState(QSGNode *node) const; | - |
108 | | - |
109 | template<class NODE> | - |
110 | bool updateRenderableNode(QSGSoftwareRenderableNode::NodeType type, NODE *node); | - |
111 | | - |
112 | QSGAbstractSoftwareRenderer *m_renderer; | - |
113 | QStack<float> m_opacityState; | - |
114 | QStack<QRegion> m_clipState; | - |
115 | bool m_hasClip; | - |
116 | QStack<QTransform> m_transformState; | - |
117 | QHash<QSGNode*,NodeState> m_stateMap; | - |
118 | }; | - |
119 | | - |
120 | template<class NODE> | - |
121 | bool QSGSoftwareRenderableNodeUpdater::updateRenderableNode(QSGSoftwareRenderableNode::NodeType type, NODE *node) | - |
122 | { | - |
123 | | - |
124 | auto renderableNode = m_renderer->renderableNode(node); | - |
125 | if (renderableNode == nullptr) {TRUE | evaluated 8 times by 1 test | FALSE | never evaluated |
| 0-8 |
126 | renderableNode = new QSGSoftwareRenderableNode(type, node); | - |
127 | m_renderer->addNodeMapping(node, renderableNode); | - |
128 | }executed 8 times by 1 test: end of block | 8 |
129 | | - |
130 | | - |
131 | renderableNode->setTransform(m_transformState.top()); | - |
132 | renderableNode->setOpacity(m_opacityState.top()); | - |
133 | renderableNode->setClipRegion(m_clipState.top(), m_hasClip); | - |
134 | | - |
135 | renderableNode->update(); | - |
136 | m_stateMap[node] = currentState(node); | - |
137 | | - |
138 | return true;executed 8 times by 1 test: return true; | 8 |
139 | } | - |
140 | | - |
141 | QT_END_NAMESPACE | - |
142 | | - |
143 | #endif // QSGSOFTWARERENDERABLENODEUPDATER_H | - |
| | |