Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/qtdeclarative/src/qtdeclarative/src/quick/scenegraph/adaptations/software/qsgsoftwarerenderablenode.cpp |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | - | |||||||||||||||||||
2 | - | |||||||||||||||||||
3 | - | |||||||||||||||||||
4 | - | |||||||||||||||||||
5 | - | |||||||||||||||||||
6 | - | |||||||||||||||||||
7 | const QLoggingCategory &lcRenderable() { static const QLoggingCategory category("qt.scenegraph.softwarecontext.renderable"); return executed 26 times by 1 test: category;return category; Executed by:
executed 26 times by 1 test: }return category; Executed by:
| 26 | ||||||||||||||||||
8 | - | |||||||||||||||||||
9 | - | |||||||||||||||||||
10 | - | |||||||||||||||||||
11 | - | |||||||||||||||||||
12 | inline QRect toRectMin(const QRectF & r) | - | ||||||||||||||||||
13 | { | - | ||||||||||||||||||
14 | int x1 = qCeil(r.left()); | - | ||||||||||||||||||
15 | int x2 = qFloor(r.right()); | - | ||||||||||||||||||
16 | int y1 = qCeil(r.top()); | - | ||||||||||||||||||
17 | int y2 = qFloor(r.bottom()); | - | ||||||||||||||||||
18 | return executed 16 times by 1 test: QRect(x1, y1, x2 - x1, y2 - y1);return QRect(x1, y1, x2 - x1, y2 - y1); Executed by:
executed 16 times by 1 test: return QRect(x1, y1, x2 - x1, y2 - y1); Executed by:
| 16 | ||||||||||||||||||
19 | } | - | ||||||||||||||||||
20 | - | |||||||||||||||||||
21 | - | |||||||||||||||||||
22 | inline QRect toRectMax(const QRectF & r) | - | ||||||||||||||||||
23 | { | - | ||||||||||||||||||
24 | return executed 16 times by 1 test: r.toAlignedRect();return r.toAlignedRect(); Executed by:
executed 16 times by 1 test: return r.toAlignedRect(); Executed by:
| 16 | ||||||||||||||||||
25 | } | - | ||||||||||||||||||
26 | - | |||||||||||||||||||
27 | QSGSoftwareRenderableNode::QSGSoftwareRenderableNode(NodeType type, QSGNode *node) | - | ||||||||||||||||||
28 | : m_nodeType(type) | - | ||||||||||||||||||
29 | , m_isOpaque(true) | - | ||||||||||||||||||
30 | , m_isDirty(true) | - | ||||||||||||||||||
31 | , m_hasClipRegion(false) | - | ||||||||||||||||||
32 | , m_opacity(1.0f) | - | ||||||||||||||||||
33 | { | - | ||||||||||||||||||
34 | switch (m_nodeType) { | - | ||||||||||||||||||
35 | case executed 8 times by 1 test: QSGSoftwareRenderableNode::SimpleRect:case QSGSoftwareRenderableNode::SimpleRect: Executed by:
executed 8 times by 1 test: case QSGSoftwareRenderableNode::SimpleRect: Executed by:
| 8 | ||||||||||||||||||
36 | m_handle.simpleRectNode = static_cast<QSGSimpleRectNode*>(node); | - | ||||||||||||||||||
37 | break; executed 8 times by 1 test: break; Executed by:
| 8 | ||||||||||||||||||
38 | case never executed: QSGSoftwareRenderableNode::SimpleTexture:case QSGSoftwareRenderableNode::SimpleTexture: never executed: case QSGSoftwareRenderableNode::SimpleTexture: | 0 | ||||||||||||||||||
39 | m_handle.simpleTextureNode = static_cast<QSGSimpleTextureNode*>(node); | - | ||||||||||||||||||
40 | break; never executed: break; | 0 | ||||||||||||||||||
41 | case never executed: QSGSoftwareRenderableNode::Image:case QSGSoftwareRenderableNode::Image: never executed: case QSGSoftwareRenderableNode::Image: | 0 | ||||||||||||||||||
42 | m_handle.imageNode = static_cast<QSGSoftwareInternalImageNode*>(node); | - | ||||||||||||||||||
43 | break; never executed: break; | 0 | ||||||||||||||||||
44 | case never executed: QSGSoftwareRenderableNode::Painter:case QSGSoftwareRenderableNode::Painter: never executed: case QSGSoftwareRenderableNode::Painter: | 0 | ||||||||||||||||||
45 | m_handle.painterNode = static_cast<QSGSoftwarePainterNode*>(node); | - | ||||||||||||||||||
46 | break; never executed: break; | 0 | ||||||||||||||||||
47 | case never executed: QSGSoftwareRenderableNode::Rectangle:case QSGSoftwareRenderableNode::Rectangle: never executed: case QSGSoftwareRenderableNode::Rectangle: | 0 | ||||||||||||||||||
48 | m_handle.rectangleNode = static_cast<QSGSoftwareInternalRectangleNode*>(node); | - | ||||||||||||||||||
49 | break; never executed: break; | 0 | ||||||||||||||||||
50 | case never executed: QSGSoftwareRenderableNode::Glyph:case QSGSoftwareRenderableNode::Glyph: never executed: case QSGSoftwareRenderableNode::Glyph: | 0 | ||||||||||||||||||
51 | m_handle.glpyhNode = static_cast<QSGSoftwareGlyphNode*>(node); | - | ||||||||||||||||||
52 | break; never executed: break; | 0 | ||||||||||||||||||
53 | case never executed: QSGSoftwareRenderableNode::NinePatch:case QSGSoftwareRenderableNode::NinePatch: never executed: case QSGSoftwareRenderableNode::NinePatch: | 0 | ||||||||||||||||||
54 | m_handle.ninePatchNode = static_cast<QSGSoftwareNinePatchNode*>(node); | - | ||||||||||||||||||
55 | break; never executed: break; | 0 | ||||||||||||||||||
56 | case never executed: QSGSoftwareRenderableNode::SimpleRectangle:case QSGSoftwareRenderableNode::SimpleRectangle: never executed: case QSGSoftwareRenderableNode::SimpleRectangle: | 0 | ||||||||||||||||||
57 | m_handle.simpleRectangleNode = static_cast<QSGRectangleNode*>(node); | - | ||||||||||||||||||
58 | break; never executed: break; | 0 | ||||||||||||||||||
59 | case never executed: QSGSoftwareRenderableNode::SimpleImage:case QSGSoftwareRenderableNode::SimpleImage: never executed: case QSGSoftwareRenderableNode::SimpleImage: | 0 | ||||||||||||||||||
60 | m_handle.simpleImageNode = static_cast<QSGImageNode*>(node); | - | ||||||||||||||||||
61 | break; never executed: break; | 0 | ||||||||||||||||||
62 | - | |||||||||||||||||||
63 | case never executed: QSGSoftwareRenderableNode::SpriteNode:case QSGSoftwareRenderableNode::SpriteNode: never executed: case QSGSoftwareRenderableNode::SpriteNode: | 0 | ||||||||||||||||||
64 | m_handle.spriteNode = static_cast<QSGSoftwareSpriteNode*>(node); | - | ||||||||||||||||||
65 | break; never executed: break; | 0 | ||||||||||||||||||
66 | - | |||||||||||||||||||
67 | case executed 8 times by 1 test: QSGSoftwareRenderableNode::RenderNode:case QSGSoftwareRenderableNode::RenderNode: Executed by:
executed 8 times by 1 test: case QSGSoftwareRenderableNode::RenderNode: Executed by:
| 8 | ||||||||||||||||||
68 | m_handle.renderNode = static_cast<QSGRenderNode*>(node); | - | ||||||||||||||||||
69 | break; executed 8 times by 1 test: break; Executed by:
| 8 | ||||||||||||||||||
70 | case never executed: QSGSoftwareRenderableNode::Invalid:case QSGSoftwareRenderableNode::Invalid: never executed: case QSGSoftwareRenderableNode::Invalid: | 0 | ||||||||||||||||||
71 | m_handle.simpleRectNode = nullptr; | - | ||||||||||||||||||
72 | break; never executed: break; | 0 | ||||||||||||||||||
73 | } | - | ||||||||||||||||||
74 | } executed 16 times by 1 test: end of block Executed by:
| 16 | ||||||||||||||||||
75 | - | |||||||||||||||||||
76 | QSGSoftwareRenderableNode::~QSGSoftwareRenderableNode() | - | ||||||||||||||||||
77 | { | - | ||||||||||||||||||
78 | - | |||||||||||||||||||
79 | } | - | ||||||||||||||||||
80 | - | |||||||||||||||||||
81 | void QSGSoftwareRenderableNode::update() | - | ||||||||||||||||||
82 | { | - | ||||||||||||||||||
83 | - | |||||||||||||||||||
84 | m_isDirty = true; | - | ||||||||||||||||||
85 | m_isOpaque = false; | - | ||||||||||||||||||
86 | - | |||||||||||||||||||
87 | QRectF boundingRect; | - | ||||||||||||||||||
88 | - | |||||||||||||||||||
89 | switch (m_nodeType) { | - | ||||||||||||||||||
90 | case executed 8 times by 1 test: QSGSoftwareRenderableNode::SimpleRect:case QSGSoftwareRenderableNode::SimpleRect: Executed by:
executed 8 times by 1 test: case QSGSoftwareRenderableNode::SimpleRect: Executed by:
| 8 | ||||||||||||||||||
91 | if (m_handle.simpleRectNode->color().alpha() == 255
| 0-8 | ||||||||||||||||||
92 | m_isOpaque = true; executed 8 times by 1 test: m_isOpaque = true; Executed by:
| 8 | ||||||||||||||||||
93 | - | |||||||||||||||||||
94 | boundingRect = m_handle.simpleRectNode->rect(); | - | ||||||||||||||||||
95 | break; executed 8 times by 1 test: break; Executed by:
| 8 | ||||||||||||||||||
96 | case never executed: QSGSoftwareRenderableNode::SimpleTexture:case QSGSoftwareRenderableNode::SimpleTexture: never executed: case QSGSoftwareRenderableNode::SimpleTexture: | 0 | ||||||||||||||||||
97 | if (!m_handle.simpleTextureNode->texture()->hasAlphaChannel()
| 0 | ||||||||||||||||||
98 | m_isOpaque = true; never executed: m_isOpaque = true; | 0 | ||||||||||||||||||
99 | - | |||||||||||||||||||
100 | boundingRect = m_handle.simpleTextureNode->rect(); | - | ||||||||||||||||||
101 | break; never executed: break; | 0 | ||||||||||||||||||
102 | case never executed: QSGSoftwareRenderableNode::Image:case QSGSoftwareRenderableNode::Image: never executed: case QSGSoftwareRenderableNode::Image: | 0 | ||||||||||||||||||
103 | m_isOpaque = !m_handle.imageNode->pixmap().hasAlphaChannel(); | - | ||||||||||||||||||
104 | - | |||||||||||||||||||
105 | boundingRect = m_handle.imageNode->rect().toRect(); | - | ||||||||||||||||||
106 | break; never executed: break; | 0 | ||||||||||||||||||
107 | case never executed: QSGSoftwareRenderableNode::Painter:case QSGSoftwareRenderableNode::Painter: never executed: case QSGSoftwareRenderableNode::Painter: | 0 | ||||||||||||||||||
108 | if (m_handle.painterNode->opaquePainting()
| 0 | ||||||||||||||||||
109 | m_isOpaque = true; never executed: m_isOpaque = true; | 0 | ||||||||||||||||||
110 | - | |||||||||||||||||||
111 | boundingRect = QRectF(0, 0, m_handle.painterNode->size().width(), m_handle.painterNode->size().height()); | - | ||||||||||||||||||
112 | break; never executed: break; | 0 | ||||||||||||||||||
113 | case never executed: QSGSoftwareRenderableNode::Rectangle:case QSGSoftwareRenderableNode::Rectangle: never executed: case QSGSoftwareRenderableNode::Rectangle: | 0 | ||||||||||||||||||
114 | if (m_handle.rectangleNode->isOpaque()
| 0 | ||||||||||||||||||
115 | m_isOpaque = true; never executed: m_isOpaque = true; | 0 | ||||||||||||||||||
116 | - | |||||||||||||||||||
117 | boundingRect = m_handle.rectangleNode->rect(); | - | ||||||||||||||||||
118 | break; never executed: break; | 0 | ||||||||||||||||||
119 | case never executed: QSGSoftwareRenderableNode::Glyph:case QSGSoftwareRenderableNode::Glyph: never executed: case QSGSoftwareRenderableNode::Glyph: | 0 | ||||||||||||||||||
120 | - | |||||||||||||||||||
121 | boundingRect = m_handle.glpyhNode->boundingRect(); | - | ||||||||||||||||||
122 | break; never executed: break; | 0 | ||||||||||||||||||
123 | case never executed: QSGSoftwareRenderableNode::NinePatch:case QSGSoftwareRenderableNode::NinePatch: never executed: case QSGSoftwareRenderableNode::NinePatch: | 0 | ||||||||||||||||||
124 | m_isOpaque = m_handle.ninePatchNode->isOpaque(); | - | ||||||||||||||||||
125 | - | |||||||||||||||||||
126 | boundingRect = m_handle.ninePatchNode->bounds(); | - | ||||||||||||||||||
127 | break; never executed: break; | 0 | ||||||||||||||||||
128 | case never executed: QSGSoftwareRenderableNode::SimpleRectangle:case QSGSoftwareRenderableNode::SimpleRectangle: never executed: case QSGSoftwareRenderableNode::SimpleRectangle: | 0 | ||||||||||||||||||
129 | if (m_handle.simpleRectangleNode->color().alpha() == 255
| 0 | ||||||||||||||||||
130 | m_isOpaque = true; never executed: m_isOpaque = true; | 0 | ||||||||||||||||||
131 | - | |||||||||||||||||||
132 | boundingRect = m_handle.simpleRectangleNode->rect(); | - | ||||||||||||||||||
133 | break; never executed: break; | 0 | ||||||||||||||||||
134 | case never executed: QSGSoftwareRenderableNode::SimpleImage:case QSGSoftwareRenderableNode::SimpleImage: never executed: case QSGSoftwareRenderableNode::SimpleImage: | 0 | ||||||||||||||||||
135 | if (!m_handle.simpleImageNode->texture()->hasAlphaChannel()
| 0 | ||||||||||||||||||
136 | m_isOpaque = true; never executed: m_isOpaque = true; | 0 | ||||||||||||||||||
137 | - | |||||||||||||||||||
138 | boundingRect = m_handle.simpleImageNode->rect(); | - | ||||||||||||||||||
139 | break; never executed: break; | 0 | ||||||||||||||||||
140 | - | |||||||||||||||||||
141 | case never executed: QSGSoftwareRenderableNode::SpriteNode:case QSGSoftwareRenderableNode::SpriteNode: never executed: case QSGSoftwareRenderableNode::SpriteNode: | 0 | ||||||||||||||||||
142 | m_isOpaque = m_handle.spriteNode->isOpaque(); | - | ||||||||||||||||||
143 | boundingRect = m_handle.spriteNode->rect(); | - | ||||||||||||||||||
144 | break; never executed: break; | 0 | ||||||||||||||||||
145 | - | |||||||||||||||||||
146 | case executed 8 times by 1 test: QSGSoftwareRenderableNode::RenderNode:case QSGSoftwareRenderableNode::RenderNode: Executed by:
executed 8 times by 1 test: case QSGSoftwareRenderableNode::RenderNode: Executed by:
| 8 | ||||||||||||||||||
147 | if (m_handle.renderNode->flags().testFlag(QSGRenderNode::OpaqueRendering)
| 0-8 | ||||||||||||||||||
148 | m_isOpaque = true; never executed: m_isOpaque = true; | 0 | ||||||||||||||||||
149 | - | |||||||||||||||||||
150 | boundingRect = m_handle.renderNode->rect(); | - | ||||||||||||||||||
151 | break; executed 8 times by 1 test: break; Executed by:
| 8 | ||||||||||||||||||
152 | default never executed: :default: never executed: default: | 0 | ||||||||||||||||||
153 | break; never executed: break; | 0 | ||||||||||||||||||
154 | } | - | ||||||||||||||||||
155 | - | |||||||||||||||||||
156 | if (m_transform.isRotating()
| 0-16 | ||||||||||||||||||
157 | m_isOpaque = false; never executed: m_isOpaque = false; | 0 | ||||||||||||||||||
158 | - | |||||||||||||||||||
159 | const QRectF transformedRect = m_transform.mapRect(boundingRect); | - | ||||||||||||||||||
160 | m_boundingRectMin = toRectMin(transformedRect); | - | ||||||||||||||||||
161 | m_boundingRectMax = toRectMax(transformedRect); | - | ||||||||||||||||||
162 | - | |||||||||||||||||||
163 | if (m_hasClipRegion
| 0-16 | ||||||||||||||||||
164 | - | |||||||||||||||||||
165 | if (m_clipRegion.isEmpty()
| 0 | ||||||||||||||||||
166 | m_boundingRectMin = QRect(); | - | ||||||||||||||||||
167 | m_boundingRectMax = QRect(); | - | ||||||||||||||||||
168 | } never executed: else {end of block | 0 | ||||||||||||||||||
169 | const auto rects = m_clipRegion.begin(); | - | ||||||||||||||||||
170 | m_boundingRectMin = m_boundingRectMin.intersected(rects[0]); | - | ||||||||||||||||||
171 | m_boundingRectMax = m_boundingRectMax.intersected(rects[0]); | - | ||||||||||||||||||
172 | } never executed: end of block | 0 | ||||||||||||||||||
173 | } | - | ||||||||||||||||||
174 | - | |||||||||||||||||||
175 | - | |||||||||||||||||||
176 | if (m_opacity < 1.0f
| 0-16 | ||||||||||||||||||
177 | m_isOpaque = false; never executed: m_isOpaque = false; | 0 | ||||||||||||||||||
178 | - | |||||||||||||||||||
179 | m_dirtyRegion = QRegion(m_boundingRectMax); | - | ||||||||||||||||||
180 | } executed 16 times by 1 test: end of block Executed by:
| 16 | ||||||||||||||||||
181 | - | |||||||||||||||||||
182 | struct RenderNodeState : public QSGRenderNode::RenderState | - | ||||||||||||||||||
183 | { | - | ||||||||||||||||||
184 | const QMatrix4x4 *projectionMatrix() const override { return never executed: &ident;return &ident; never executed: }return &ident; | 0 | ||||||||||||||||||
185 | QRect scissorRect() const override { return never executed: QRect();return QRect(); never executed: }return QRect(); | 0 | ||||||||||||||||||
186 | bool scissorEnabled() const override { return never executed: false;return false; never executed: }return false; | 0 | ||||||||||||||||||
187 | int stencilValue() const override { return never executed: 0;return 0; never executed: }return 0; | 0 | ||||||||||||||||||
188 | bool stencilEnabled() const override { return never executed: false;return false; never executed: }return false; | 0 | ||||||||||||||||||
189 | const QRegion *clipRegion() const override { return executed 8 times by 1 test: &cr;return &cr; Executed by:
executed 8 times by 1 test: }return &cr; Executed by:
| 8 | ||||||||||||||||||
190 | QMatrix4x4 ident; | - | ||||||||||||||||||
191 | QRegion cr; | - | ||||||||||||||||||
192 | }; | - | ||||||||||||||||||
193 | - | |||||||||||||||||||
194 | QRegion QSGSoftwareRenderableNode::renderNode(QPainter *painter, bool forceOpaquePainting) | - | ||||||||||||||||||
195 | { | - | ||||||||||||||||||
196 | ((painter) ? static_cast<void>(0) : qt_assert("painter", __FILE__, 248)); | - | ||||||||||||||||||
197 | - | |||||||||||||||||||
198 | - | |||||||||||||||||||
199 | if (m_nodeType != RenderNode
| 24 | ||||||||||||||||||
200 | if (!m_isDirty
| 0-16 | ||||||||||||||||||
201 | m_isDirty = false; | - | ||||||||||||||||||
202 | m_dirtyRegion = QRegion(); | - | ||||||||||||||||||
203 | return executed 16 times by 1 test: QRegion();return QRegion(); Executed by:
executed 16 times by 1 test: return QRegion(); Executed by:
| 16 | ||||||||||||||||||
204 | } | - | ||||||||||||||||||
205 | } executed 8 times by 1 test: else {end of block Executed by:
| 8 | ||||||||||||||||||
206 | if (!m_isDirty
| 0-16 | ||||||||||||||||||
207 | m_isDirty = false; | - | ||||||||||||||||||
208 | m_dirtyRegion = QRegion(); | - | ||||||||||||||||||
209 | return executed 16 times by 1 test: QRegion();return QRegion(); Executed by:
executed 16 times by 1 test: return QRegion(); Executed by:
| 16 | ||||||||||||||||||
210 | } else { | - | ||||||||||||||||||
211 | QSGRenderNodePrivate *rd = QSGRenderNodePrivate::get(m_handle.renderNode); | - | ||||||||||||||||||
212 | QMatrix4x4 m = m_transform; | - | ||||||||||||||||||
213 | rd->m_matrix = &m; | - | ||||||||||||||||||
214 | rd->m_opacity = m_opacity; | - | ||||||||||||||||||
215 | - | |||||||||||||||||||
216 | - | |||||||||||||||||||
217 | QRegion cr = m_dirtyRegion; | - | ||||||||||||||||||
218 | if (m_clipRegion.rectCount() > 1
| 0-8 | ||||||||||||||||||
219 | cr &= m_clipRegion; never executed: cr &= m_clipRegion; | 0 | ||||||||||||||||||
220 | - | |||||||||||||||||||
221 | painter->save(); | - | ||||||||||||||||||
222 | RenderNodeState rs; | - | ||||||||||||||||||
223 | rs.cr = cr; | - | ||||||||||||||||||
224 | m_handle.renderNode->render(&rs); | - | ||||||||||||||||||
225 | painter->restore(); | - | ||||||||||||||||||
226 | - | |||||||||||||||||||
227 | const QRect br = m_handle.renderNode->flags().testFlag(QSGRenderNode::BoundedRectRendering)
| 0-8 | ||||||||||||||||||
228 | ? m_boundingRectMax | - | ||||||||||||||||||
229 | : QRect(0, 0, painter->device()->width(), painter->device()->height()); | - | ||||||||||||||||||
230 | m_previousDirtyRegion = QRegion(br); | - | ||||||||||||||||||
231 | m_isDirty = false; | - | ||||||||||||||||||
232 | m_dirtyRegion = QRegion(); | - | ||||||||||||||||||
233 | return executed 8 times by 1 test: br;return br; Executed by:
executed 8 times by 1 test: return br; Executed by:
| 8 | ||||||||||||||||||
234 | } | - | ||||||||||||||||||
235 | } | - | ||||||||||||||||||
236 | - | |||||||||||||||||||
237 | painter->save(); | - | ||||||||||||||||||
238 | painter->setOpacity(m_opacity); | - | ||||||||||||||||||
239 | - | |||||||||||||||||||
240 | - | |||||||||||||||||||
241 | - | |||||||||||||||||||
242 | painter->setClipRegion(m_dirtyRegion, Qt::ReplaceClip); | - | ||||||||||||||||||
243 | if (m_clipRegion.rectCount() > 1
| 0-8 | ||||||||||||||||||
244 | painter->setClipRegion(m_clipRegion, Qt::IntersectClip); never executed: painter->setClipRegion(m_clipRegion, Qt::IntersectClip); | 0 | ||||||||||||||||||
245 | - | |||||||||||||||||||
246 | painter->setTransform(m_transform, false); | - | ||||||||||||||||||
247 | if (forceOpaquePainting
| 0-8 | ||||||||||||||||||
248 | painter->setCompositionMode(QPainter::CompositionMode_Source); executed 8 times by 1 test: painter->setCompositionMode(QPainter::CompositionMode_Source); Executed by:
| 8 | ||||||||||||||||||
249 | - | |||||||||||||||||||
250 | switch (m_nodeType) { | - | ||||||||||||||||||
251 | case executed 8 times by 1 test: QSGSoftwareRenderableNode::SimpleRect:case QSGSoftwareRenderableNode::SimpleRect: Executed by:
executed 8 times by 1 test: case QSGSoftwareRenderableNode::SimpleRect: Executed by:
| 8 | ||||||||||||||||||
252 | painter->fillRect(m_handle.simpleRectNode->rect(), m_handle.simpleRectNode->color()); | - | ||||||||||||||||||
253 | break; executed 8 times by 1 test: break; Executed by:
| 8 | ||||||||||||||||||
254 | case never executed: QSGSoftwareRenderableNode::SimpleTexture:case QSGSoftwareRenderableNode::SimpleTexture: never executed: case QSGSoftwareRenderableNode::SimpleTexture: | 0 | ||||||||||||||||||
255 | { | - | ||||||||||||||||||
256 | QSGTexture *texture = m_handle.simpleTextureNode->texture(); | - | ||||||||||||||||||
257 | if (QSGSoftwarePixmapTexture *pt = qobject_cast<QSGSoftwarePixmapTexture *>(texture)
| 0 | ||||||||||||||||||
258 | const QPixmap &pm = pt->pixmap(); | - | ||||||||||||||||||
259 | painter->drawPixmap(m_handle.simpleTextureNode->rect(), pm, m_handle.simpleTextureNode->sourceRect()); | - | ||||||||||||||||||
260 | } never executed: else if (QSGPlainTexture *pt = qobject_cast<QSGPlainTexture *>(texture)end of block
| 0 | ||||||||||||||||||
261 | const QImage &im = pt->image(); | - | ||||||||||||||||||
262 | painter->drawImage(m_handle.simpleTextureNode->rect(), im, m_handle.simpleTextureNode->sourceRect()); | - | ||||||||||||||||||
263 | } never executed: end of block | 0 | ||||||||||||||||||
264 | } | - | ||||||||||||||||||
265 | break; never executed: break; | 0 | ||||||||||||||||||
266 | case never executed: QSGSoftwareRenderableNode::Image:case QSGSoftwareRenderableNode::Image: never executed: case QSGSoftwareRenderableNode::Image: | 0 | ||||||||||||||||||
267 | m_handle.imageNode->paint(painter); | - | ||||||||||||||||||
268 | break; never executed: break; | 0 | ||||||||||||||||||
269 | case never executed: QSGSoftwareRenderableNode::Painter:case QSGSoftwareRenderableNode::Painter: never executed: case QSGSoftwareRenderableNode::Painter: | 0 | ||||||||||||||||||
270 | m_handle.painterNode->paint(painter); | - | ||||||||||||||||||
271 | break; never executed: break; | 0 | ||||||||||||||||||
272 | case never executed: QSGSoftwareRenderableNode::Rectangle:case QSGSoftwareRenderableNode::Rectangle: never executed: case QSGSoftwareRenderableNode::Rectangle: | 0 | ||||||||||||||||||
273 | m_handle.rectangleNode->paint(painter); | - | ||||||||||||||||||
274 | break; never executed: break; | 0 | ||||||||||||||||||
275 | case never executed: QSGSoftwareRenderableNode::Glyph:case QSGSoftwareRenderableNode::Glyph: never executed: case QSGSoftwareRenderableNode::Glyph: | 0 | ||||||||||||||||||
276 | m_handle.glpyhNode->paint(painter); | - | ||||||||||||||||||
277 | break; never executed: break; | 0 | ||||||||||||||||||
278 | case never executed: QSGSoftwareRenderableNode::NinePatch:case QSGSoftwareRenderableNode::NinePatch: never executed: case QSGSoftwareRenderableNode::NinePatch: | 0 | ||||||||||||||||||
279 | m_handle.ninePatchNode->paint(painter); | - | ||||||||||||||||||
280 | break; never executed: break; | 0 | ||||||||||||||||||
281 | case never executed: QSGSoftwareRenderableNode::SimpleRectangle:case QSGSoftwareRenderableNode::SimpleRectangle: never executed: case QSGSoftwareRenderableNode::SimpleRectangle: | 0 | ||||||||||||||||||
282 | static_cast<QSGSoftwareRectangleNode *>(m_handle.simpleRectangleNode)->paint(painter); | - | ||||||||||||||||||
283 | break; never executed: break; | 0 | ||||||||||||||||||
284 | case never executed: QSGSoftwareRenderableNode::SimpleImage:case QSGSoftwareRenderableNode::SimpleImage: never executed: case QSGSoftwareRenderableNode::SimpleImage: | 0 | ||||||||||||||||||
285 | static_cast<QSGSoftwareImageNode *>(m_handle.simpleImageNode)->paint(painter); | - | ||||||||||||||||||
286 | break; never executed: break; | 0 | ||||||||||||||||||
287 | - | |||||||||||||||||||
288 | case never executed: QSGSoftwareRenderableNode::SpriteNode:case QSGSoftwareRenderableNode::SpriteNode: never executed: case QSGSoftwareRenderableNode::SpriteNode: | 0 | ||||||||||||||||||
289 | static_cast<QSGSoftwareSpriteNode *>(m_handle.spriteNode)->paint(painter); | - | ||||||||||||||||||
290 | break; never executed: break; | 0 | ||||||||||||||||||
291 | - | |||||||||||||||||||
292 | default never executed: :default: never executed: default: | 0 | ||||||||||||||||||
293 | break; never executed: break; | 0 | ||||||||||||||||||
294 | } | - | ||||||||||||||||||
295 | - | |||||||||||||||||||
296 | painter->restore(); | - | ||||||||||||||||||
297 | - | |||||||||||||||||||
298 | QRegion areaToBeFlushed = m_dirtyRegion; | - | ||||||||||||||||||
299 | m_previousDirtyRegion = QRegion(m_boundingRectMax); | - | ||||||||||||||||||
300 | m_isDirty = false; | - | ||||||||||||||||||
301 | m_dirtyRegion = QRegion(); | - | ||||||||||||||||||
302 | - | |||||||||||||||||||
303 | return executed 8 times by 1 test: areaToBeFlushed;return areaToBeFlushed; Executed by:
executed 8 times by 1 test: return areaToBeFlushed; Executed by:
| 8 | ||||||||||||||||||
304 | } | - | ||||||||||||||||||
305 | - | |||||||||||||||||||
306 | bool QSGSoftwareRenderableNode::isDirtyRegionEmpty() const | - | ||||||||||||||||||
307 | { | - | ||||||||||||||||||
308 | return never executed: m_dirtyRegion.isEmpty();return m_dirtyRegion.isEmpty(); never executed: return m_dirtyRegion.isEmpty(); | 0 | ||||||||||||||||||
309 | } | - | ||||||||||||||||||
310 | - | |||||||||||||||||||
311 | void QSGSoftwareRenderableNode::setTransform(const QTransform &transform) | - | ||||||||||||||||||
312 | { | - | ||||||||||||||||||
313 | if (m_transform == transform
| 0-8 | ||||||||||||||||||
314 | return; executed 8 times by 1 test: return; Executed by:
| 8 | ||||||||||||||||||
315 | m_transform = transform; | - | ||||||||||||||||||
316 | update(); | - | ||||||||||||||||||
317 | } never executed: end of block | 0 | ||||||||||||||||||
318 | - | |||||||||||||||||||
319 | void QSGSoftwareRenderableNode::setClipRegion(const QRegion &clipRect, bool hasClipRegion) | - | ||||||||||||||||||
320 | { | - | ||||||||||||||||||
321 | if (m_clipRegion == clipRect
| 0-8 | ||||||||||||||||||
322 | return; executed 8 times by 1 test: return; Executed by:
| 8 | ||||||||||||||||||
323 | - | |||||||||||||||||||
324 | m_clipRegion = clipRect; | - | ||||||||||||||||||
325 | m_hasClipRegion = hasClipRegion; | - | ||||||||||||||||||
326 | update(); | - | ||||||||||||||||||
327 | } never executed: end of block | 0 | ||||||||||||||||||
328 | - | |||||||||||||||||||
329 | void QSGSoftwareRenderableNode::setOpacity(float opacity) | - | ||||||||||||||||||
330 | { | - | ||||||||||||||||||
331 | if (qFuzzyCompare(m_opacity, opacity)
| 0-8 | ||||||||||||||||||
332 | return; executed 8 times by 1 test: return; Executed by:
| 8 | ||||||||||||||||||
333 | - | |||||||||||||||||||
334 | m_opacity = opacity; | - | ||||||||||||||||||
335 | update(); | - | ||||||||||||||||||
336 | } never executed: end of block | 0 | ||||||||||||||||||
337 | - | |||||||||||||||||||
338 | void QSGSoftwareRenderableNode::markGeometryDirty() | - | ||||||||||||||||||
339 | { | - | ||||||||||||||||||
340 | update(); | - | ||||||||||||||||||
341 | } executed 8 times by 1 test: end of block Executed by:
| 8 | ||||||||||||||||||
342 | - | |||||||||||||||||||
343 | void QSGSoftwareRenderableNode::markMaterialDirty() | - | ||||||||||||||||||
344 | { | - | ||||||||||||||||||
345 | update(); | - | ||||||||||||||||||
346 | } never executed: end of block | 0 | ||||||||||||||||||
347 | - | |||||||||||||||||||
348 | void QSGSoftwareRenderableNode::addDirtyRegion(const QRegion &dirtyRegion, bool forceDirty) | - | ||||||||||||||||||
349 | { | - | ||||||||||||||||||
350 | - | |||||||||||||||||||
351 | QRegion prev = m_dirtyRegion; | - | ||||||||||||||||||
352 | if (dirtyRegion.intersects(m_boundingRectMax)
| 0-24 | ||||||||||||||||||
353 | if (forceDirty
| 0-24 | ||||||||||||||||||
354 | m_isDirty = true; executed 24 times by 1 test: m_isDirty = true; Executed by:
| 24 | ||||||||||||||||||
355 | m_dirtyRegion += dirtyRegion.intersected(m_boundingRectMax); | - | ||||||||||||||||||
356 | } executed 24 times by 1 test: end of block Executed by:
| 24 | ||||||||||||||||||
357 | for (bool qt_category_enabled = lcRenderable().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 409, __PRETTY_FUNCTION__, lcRenderable().categoryName()).debug() << "addDirtyRegion: " << dirtyRegion << "old dirtyRegion: " << prev << "new dirtyRegion: " << m_dirtyRegion; | 0-24 | ||||||||||||||||||
358 | } executed 24 times by 1 test: end of block Executed by:
| 24 | ||||||||||||||||||
359 | - | |||||||||||||||||||
360 | void QSGSoftwareRenderableNode::subtractDirtyRegion(const QRegion &dirtyRegion) | - | ||||||||||||||||||
361 | { | - | ||||||||||||||||||
362 | QRegion prev = m_dirtyRegion; | - | ||||||||||||||||||
363 | if (m_isDirty
| 0-2 | ||||||||||||||||||
364 | - | |||||||||||||||||||
365 | if (dirtyRegion.intersects(m_boundingRectMax)
| 0-2 | ||||||||||||||||||
366 | m_dirtyRegion -= dirtyRegion; | - | ||||||||||||||||||
367 | if (m_dirtyRegion.isEmpty()
| 0-2 | ||||||||||||||||||
368 | m_isDirty = false; never executed: m_isDirty = false; | 0 | ||||||||||||||||||
369 | } executed 2 times by 1 test: end of block Executed by:
| 2 | ||||||||||||||||||
370 | } executed 2 times by 1 test: end of block Executed by:
| 2 | ||||||||||||||||||
371 | for (bool qt_category_enabled = lcRenderable().isDebugEnabled(); qt_category_enabled
never executed: QMessageLogger(__FILE__, 423, __PRETTY_FUNCTION__, lcRenderable().categoryName()).debug() << "subtractDirtyRegion: " << dirtyRegion << "old dirtyRegion" << prev << "new dirtyRegion: " << m_dirtyRegion; | 0-2 | ||||||||||||||||||
372 | } executed 2 times by 1 test: end of block Executed by:
| 2 | ||||||||||||||||||
373 | - | |||||||||||||||||||
374 | QRegion QSGSoftwareRenderableNode::previousDirtyRegion(bool wasRemoved) const | - | ||||||||||||||||||
375 | { | - | ||||||||||||||||||
376 | - | |||||||||||||||||||
377 | - | |||||||||||||||||||
378 | if (wasRemoved
| 8-16 | ||||||||||||||||||
379 | return executed 8 times by 1 test: m_previousDirtyRegion;return m_previousDirtyRegion; Executed by:
executed 8 times by 1 test: return m_previousDirtyRegion; Executed by:
| 8 | ||||||||||||||||||
380 | - | |||||||||||||||||||
381 | return executed 16 times by 1 test: m_previousDirtyRegion.subtracted(QRegion(m_boundingRectMax));return m_previousDirtyRegion.subtracted(QRegion(m_boundingRectMax)); Executed by:
executed 16 times by 1 test: return m_previousDirtyRegion.subtracted(QRegion(m_boundingRectMax)); Executed by:
| 16 | ||||||||||||||||||
382 | } | - | ||||||||||||||||||
383 | - | |||||||||||||||||||
384 | QRegion QSGSoftwareRenderableNode::dirtyRegion() const | - | ||||||||||||||||||
385 | { | - | ||||||||||||||||||
386 | return executed 66 times by 1 test: m_dirtyRegion;return m_dirtyRegion; Executed by:
executed 66 times by 1 test: return m_dirtyRegion; Executed by:
| 66 | ||||||||||||||||||
387 | } | - | ||||||||||||||||||
388 | - | |||||||||||||||||||
389 | - | |||||||||||||||||||
Switch to Source code | Preprocessed file |