OpenCoverage

qsgsoftwareinternalimagenode.cpp

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/qtdeclarative/src/qtdeclarative/src/quick/scenegraph/adaptations/software/qsgsoftwareinternalimagenode.cpp
Source codeSwitch to Preprocessed file
LineSourceCount
1/****************************************************************************-
2**-
3** Copyright (C) 2016 The Qt Company Ltd.-
4** Contact: https://www.qt.io/licensing/-
5**-
6** This file is part of the QtQuick module of the Qt Toolkit.-
7**-
8** $QT_BEGIN_LICENSE:LGPL$-
9** Commercial License Usage-
10** Licensees holding valid commercial Qt licenses may use this file in-
11** accordance with the commercial license agreement provided with the-
12** Software or, alternatively, in accordance with the terms contained in-
13** a written agreement between you and The Qt Company. For licensing terms-
14** and conditions see https://www.qt.io/terms-conditions. For further-
15** information use the contact form at https://www.qt.io/contact-us.-
16**-
17** GNU Lesser General Public License Usage-
18** Alternatively, this file may be used under the terms of the GNU Lesser-
19** General Public License version 3 as published by the Free Software-
20** Foundation and appearing in the file LICENSE.LGPL3 included in the-
21** packaging of this file. Please review the following information to-
22** ensure the GNU Lesser General Public License version 3 requirements-
23** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.-
24**-
25** GNU General Public License Usage-
26** Alternatively, this file may be used under the terms of the GNU-
27** General Public License version 2.0 or (at your option) the GNU General-
28** Public license version 3 or any later version approved by the KDE Free-
29** Qt Foundation. The licenses are as published by the Free Software-
30** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3-
31** included in the packaging of this file. Please review the following-
32** information to ensure the GNU General Public License requirements will-
33** be met: https://www.gnu.org/licenses/gpl-2.0.html and-
34** https://www.gnu.org/licenses/gpl-3.0.html.-
35**-
36** $QT_END_LICENSE$-
37**-
38****************************************************************************/-
39-
40#include "qsgsoftwareinternalimagenode_p.h"-
41-
42#include "qsgsoftwarepixmaptexture_p.h"-
43#include "qsgsoftwarelayer_p.h"-
44#include <QPainter>-
45#include <qmath.h>-
46-
47QT_BEGIN_NAMESPACE-
48-
49namespace QSGSoftwareHelpers {-
50// Helper from widgets/styles/qdrawutil.cpp-
51-
52static inline QMargins normalizedMargins(const QMargins &m)-
53{-
54 return QMargins(qMax(m.left(), 0), qMax(m.top(), 0), qMax(m.right(), 0), qMax(m.bottom(), 0));
never executed: return QMargins(qMax(m.left(), 0), qMax(m.top(), 0), qMax(m.right(), 0), qMax(m.bottom(), 0));
0
55}-
56-
57void qDrawBorderPixmap(QPainter *painter, const QRect &targetRect, const QMargins &targetMarginsIn,-
58 const QPixmap &pixmap, const QRect &sourceRect, const QMargins &sourceMarginsIn,-
59 const QTileRules &rules, QDrawBorderPixmap::DrawingHints hints)-
60{-
61 QPainter::PixmapFragment d;-
62 d.opacity = 1.0;-
63 d.rotation = 0.0;-
64-
65 QPixmapFragmentsArray opaqueData;-
66 QPixmapFragmentsArray translucentData;-
67-
68 QMargins sourceMargins = normalizedMargins(sourceMarginsIn);-
69 QMargins targetMargins = normalizedMargins(targetMarginsIn);-
70-
71 const qreal sourceDpr = pixmap.devicePixelRatioF();-
72 sourceMargins *= sourceDpr;-
73-
74 // source center-
75 const int sourceCenterTop = sourceRect.top() + sourceMargins.top();-
76 const int sourceCenterLeft = sourceRect.left() + sourceMargins.left();-
77 const int sourceCenterBottom = sourceRect.bottom() - sourceMargins.bottom() + 1;-
78 const int sourceCenterRight = sourceRect.right() - sourceMargins.right() + 1;-
79 const int sourceCenterWidth = sourceCenterRight - sourceCenterLeft;-
80 const int sourceCenterHeight = sourceCenterBottom - sourceCenterTop;-
81 // target center-
82 const int targetCenterTop = targetRect.top() + targetMargins.top();-
83 const int targetCenterLeft = targetRect.left() + targetMargins.left();-
84 const int targetCenterBottom = targetRect.bottom() - targetMargins.bottom() + 1;-
85 const int targetCenterRight = targetRect.right() - targetMargins.right() + 1;-
86 const int targetCenterWidth = targetCenterRight - targetCenterLeft;-
87 const int targetCenterHeight = targetCenterBottom - targetCenterTop;-
88-
89 QVarLengthArray<qreal, 16> xTarget; // x-coordinates of target rectangles-
90 QVarLengthArray<qreal, 16> yTarget; // y-coordinates of target rectangles-
91-
92 int columns = 3;-
93 int rows = 3;-
94 if (rules.horizontal != Qt::StretchTile && sourceCenterWidth != 0)
rules.horizont...t::StretchTileDescription
TRUEnever evaluated
FALSEnever evaluated
sourceCenterWidth != 0Description
TRUEnever evaluated
FALSEnever evaluated
0
95 columns = qMax(3, 2 + qCeil((targetCenterWidth * sourceDpr) / qreal(sourceCenterWidth)));
never executed: columns = qMax(3, 2 + qCeil((targetCenterWidth * sourceDpr) / qreal(sourceCenterWidth)));
0
96 if (rules.vertical != Qt::StretchTile && sourceCenterHeight != 0)
rules.vertical...t::StretchTileDescription
TRUEnever evaluated
FALSEnever evaluated
sourceCenterHeight != 0Description
TRUEnever evaluated
FALSEnever evaluated
0
97 rows = qMax(3, 2 + qCeil((targetCenterHeight * sourceDpr) / qreal(sourceCenterHeight)));
never executed: rows = qMax(3, 2 + qCeil((targetCenterHeight * sourceDpr) / qreal(sourceCenterHeight)));
0
98-
99 xTarget.resize(columns + 1);-
100 yTarget.resize(rows + 1);-
101-
102 bool oldAA = painter->testRenderHint(QPainter::Antialiasing);-
103 if (painter->paintEngine()->type() != QPaintEngine::OpenGL
painter->paint...Engine::OpenGLDescription
TRUEnever evaluated
FALSEnever evaluated
0
104 && painter->paintEngine()->type() != QPaintEngine::OpenGL2
painter->paint...ngine::OpenGL2Description
TRUEnever evaluated
FALSEnever evaluated
0
105 && oldAA && painter->combinedTransform().type() != QTransform::TxNone) {
oldAADescription
TRUEnever evaluated
FALSEnever evaluated
painter->combi...nsform::TxNoneDescription
TRUEnever evaluated
FALSEnever evaluated
0
106 painter->setRenderHint(QPainter::Antialiasing, false);-
107 }
never executed: end of block
0
108-
109 xTarget[0] = targetRect.left();-
110 xTarget[1] = targetCenterLeft;-
111 xTarget[columns - 1] = targetCenterRight;-
112 xTarget[columns] = targetRect.left() + targetRect.width();-
113-
114 yTarget[0] = targetRect.top();-
115 yTarget[1] = targetCenterTop;-
116 yTarget[rows - 1] = targetCenterBottom;-
117 yTarget[rows] = targetRect.top() + targetRect.height();-
118-
119 qreal dx = targetCenterWidth;-
120 qreal dy = targetCenterHeight;-
121-
122 switch (rules.horizontal) {-
123 case Qt::StretchTile:
never executed: case Qt::StretchTile:
0
124 dx = targetCenterWidth;-
125 break;
never executed: break;
0
126 case Qt::RepeatTile:
never executed: case Qt::RepeatTile:
0
127 dx = sourceCenterWidth / sourceDpr;-
128 break;
never executed: break;
0
129 case Qt::RoundTile:
never executed: case Qt::RoundTile:
0
130 dx = targetCenterWidth / qreal(columns - 2);-
131 break;
never executed: break;
0
132 }-
133-
134 for (int i = 2; i < columns - 1; ++i)
i < columns - 1Description
TRUEnever evaluated
FALSEnever evaluated
0
135 xTarget[i] = xTarget[i - 1] + dx;
never executed: xTarget[i] = xTarget[i - 1] + dx;
0
136-
137 switch (rules.vertical) {-
138 case Qt::StretchTile:
never executed: case Qt::StretchTile:
0
139 dy = targetCenterHeight;-
140 break;
never executed: break;
0
141 case Qt::RepeatTile:
never executed: case Qt::RepeatTile:
0
142 dy = sourceCenterHeight / sourceDpr;-
143 break;
never executed: break;
0
144 case Qt::RoundTile:
never executed: case Qt::RoundTile:
0
145 dy = targetCenterHeight / qreal(rows - 2);-
146 break;
never executed: break;
0
147 }-
148-
149 for (int i = 2; i < rows - 1; ++i)
i < rows - 1Description
TRUEnever evaluated
FALSEnever evaluated
0
150 yTarget[i] = yTarget[i - 1] + dy;
never executed: yTarget[i] = yTarget[i - 1] + dy;
0
151-
152 // corners-
153 if (targetMargins.top() > 0 && targetMargins.left() > 0 && sourceMargins.top() > 0 && sourceMargins.left() > 0) { // top left
targetMargins.top() > 0Description
TRUEnever evaluated
FALSEnever evaluated
targetMargins.left() > 0Description
TRUEnever evaluated
FALSEnever evaluated
sourceMargins.top() > 0Description
TRUEnever evaluated
FALSEnever evaluated
sourceMargins.left() > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
154 d.x = (0.5 * (xTarget[1] + xTarget[0]));-
155 d.y = (0.5 * (yTarget[1] + yTarget[0]));-
156 d.sourceLeft = sourceRect.left();-
157 d.sourceTop = sourceRect.top();-
158 d.width = sourceMargins.left();-
159 d.height = sourceMargins.top();-
160 d.scaleX = qreal(xTarget[1] - xTarget[0]) / d.width;-
161 d.scaleY = qreal(yTarget[1] - yTarget[0]) / d.height;-
162 if (hints & QDrawBorderPixmap::OpaqueTopLeft)
hints & QDrawB...:OpaqueTopLeftDescription
TRUEnever evaluated
FALSEnever evaluated
0
163 opaqueData.append(d);
never executed: opaqueData.append(d);
0
164 else-
165 translucentData.append(d);
never executed: translucentData.append(d);
0
166 }-
167 if (targetMargins.top() > 0 && targetMargins.right() > 0 && sourceMargins.top() > 0 && sourceMargins.right() > 0) { // top right
targetMargins.top() > 0Description
TRUEnever evaluated
FALSEnever evaluated
targetMargins.right() > 0Description
TRUEnever evaluated
FALSEnever evaluated
sourceMargins.top() > 0Description
TRUEnever evaluated
FALSEnever evaluated
sourceMargins.right() > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
168 d.x = (0.5 * (xTarget[columns] + xTarget[columns - 1]));-
169 d.y = (0.5 * (yTarget[1] + yTarget[0]));-
170 d.sourceLeft = sourceCenterRight;-
171 d.sourceTop = sourceRect.top();-
172 d.width = sourceMargins.right();-
173 d.height = sourceMargins.top();-
174 d.scaleX = qreal(xTarget[columns] - xTarget[columns - 1]) / d.width;-
175 d.scaleY = qreal(yTarget[1] - yTarget[0]) / d.height;-
176 if (hints & QDrawBorderPixmap::OpaqueTopRight)
hints & QDrawB...OpaqueTopRightDescription
TRUEnever evaluated
FALSEnever evaluated
0
177 opaqueData.append(d);
never executed: opaqueData.append(d);
0
178 else-
179 translucentData.append(d);
never executed: translucentData.append(d);
0
180 }-
181 if (targetMargins.bottom() > 0 && targetMargins.left() > 0 && sourceMargins.bottom() > 0 && sourceMargins.left() > 0) { // bottom left
targetMargins.bottom() > 0Description
TRUEnever evaluated
FALSEnever evaluated
targetMargins.left() > 0Description
TRUEnever evaluated
FALSEnever evaluated
sourceMargins.bottom() > 0Description
TRUEnever evaluated
FALSEnever evaluated
sourceMargins.left() > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
182 d.x = (0.5 * (xTarget[1] + xTarget[0]));-
183 d.y =(0.5 * (yTarget[rows] + yTarget[rows - 1]));-
184 d.sourceLeft = sourceRect.left();-
185 d.sourceTop = sourceCenterBottom;-
186 d.width = sourceMargins.left();-
187 d.height = sourceMargins.bottom();-
188 d.scaleX = qreal(xTarget[1] - xTarget[0]) / d.width;-
189 d.scaleY = qreal(yTarget[rows] - yTarget[rows - 1]) / d.height;-
190 if (hints & QDrawBorderPixmap::OpaqueBottomLeft)
hints & QDrawB...aqueBottomLeftDescription
TRUEnever evaluated
FALSEnever evaluated
0
191 opaqueData.append(d);
never executed: opaqueData.append(d);
0
192 else-
193 translucentData.append(d);
never executed: translucentData.append(d);
0
194 }-
195 if (targetMargins.bottom() > 0 && targetMargins.right() > 0 && sourceMargins.bottom() > 0 && sourceMargins.right() > 0) { // bottom right
targetMargins.bottom() > 0Description
TRUEnever evaluated
FALSEnever evaluated
targetMargins.right() > 0Description
TRUEnever evaluated
FALSEnever evaluated
sourceMargins.bottom() > 0Description
TRUEnever evaluated
FALSEnever evaluated
sourceMargins.right() > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
196 d.x = (0.5 * (xTarget[columns] + xTarget[columns - 1]));-
197 d.y = (0.5 * (yTarget[rows] + yTarget[rows - 1]));-
198 d.sourceLeft = sourceCenterRight;-
199 d.sourceTop = sourceCenterBottom;-
200 d.width = sourceMargins.right();-
201 d.height = sourceMargins.bottom();-
202 d.scaleX = qreal(xTarget[columns] - xTarget[columns - 1]) / d.width;-
203 d.scaleY = qreal(yTarget[rows] - yTarget[rows - 1]) / d.height;-
204 if (hints & QDrawBorderPixmap::OpaqueBottomRight)
hints & QDrawB...queBottomRightDescription
TRUEnever evaluated
FALSEnever evaluated
0
205 opaqueData.append(d);
never executed: opaqueData.append(d);
0
206 else-
207 translucentData.append(d);
never executed: translucentData.append(d);
0
208 }-
209-
210 // horizontal edges-
211 if (targetCenterWidth > 0 && sourceCenterWidth > 0) {
targetCenterWidth > 0Description
TRUEnever evaluated
FALSEnever evaluated
sourceCenterWidth > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
212 if (targetMargins.top() > 0 && sourceMargins.top() > 0) { // top
targetMargins.top() > 0Description
TRUEnever evaluated
FALSEnever evaluated
sourceMargins.top() > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
213 QPixmapFragmentsArray &data = hints & QDrawBorderPixmap::OpaqueTop ? opaqueData : translucentData;
hints & QDrawB...map::OpaqueTopDescription
TRUEnever evaluated
FALSEnever evaluated
0
214 d.sourceLeft = sourceCenterLeft;-
215 d.sourceTop = sourceRect.top();-
216 d.width = sourceCenterWidth;-
217 d.height = sourceMargins.top();-
218 d.y = (0.5 * (yTarget[1] + yTarget[0]));-
219 d.scaleX = dx / d.width;-
220 d.scaleY = qreal(yTarget[1] - yTarget[0]) / d.height;-
221 for (int i = 1; i < columns - 1; ++i) {
i < columns - 1Description
TRUEnever evaluated
FALSEnever evaluated
0
222 d.x = (0.5 * (xTarget[i + 1] + xTarget[i]));-
223 data.append(d);-
224 }
never executed: end of block
0
225 if (rules.horizontal == Qt::RepeatTile)
rules.horizont...Qt::RepeatTileDescription
TRUEnever evaluated
FALSEnever evaluated
0
226 data[data.size() - 1].width = ((xTarget[columns - 1] - xTarget[columns - 2]) / d.scaleX);
never executed: data[data.size() - 1].width = ((xTarget[columns - 1] - xTarget[columns - 2]) / d.scaleX);
0
227 }
never executed: end of block
0
228 if (targetMargins.bottom() > 0 && sourceMargins.bottom() > 0) { // bottom
targetMargins.bottom() > 0Description
TRUEnever evaluated
FALSEnever evaluated
sourceMargins.bottom() > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
229 QPixmapFragmentsArray &data = hints & QDrawBorderPixmap::OpaqueBottom ? opaqueData : translucentData;
hints & QDrawB...::OpaqueBottomDescription
TRUEnever evaluated
FALSEnever evaluated
0
230 d.sourceLeft = sourceCenterLeft;-
231 d.sourceTop = sourceCenterBottom;-
232 d.width = sourceCenterWidth;-
233 d.height = sourceMargins.bottom();-
234 d.y = (0.5 * (yTarget[rows] + yTarget[rows - 1]));-
235 d.scaleX = dx / d.width;-
236 d.scaleY = qreal(yTarget[rows] - yTarget[rows - 1]) / d.height;-
237 for (int i = 1; i < columns - 1; ++i) {
i < columns - 1Description
TRUEnever evaluated
FALSEnever evaluated
0
238 d.x = (0.5 * (xTarget[i + 1] + xTarget[i]));-
239 data.append(d);-
240 }
never executed: end of block
0
241 if (rules.horizontal == Qt::RepeatTile)
rules.horizont...Qt::RepeatTileDescription
TRUEnever evaluated
FALSEnever evaluated
0
242 data[data.size() - 1].width = ((xTarget[columns - 1] - xTarget[columns - 2]) / d.scaleX);
never executed: data[data.size() - 1].width = ((xTarget[columns - 1] - xTarget[columns - 2]) / d.scaleX);
0
243 }
never executed: end of block
0
244 }
never executed: end of block
0
245-
246 // vertical edges-
247 if (targetCenterHeight > 0 && sourceCenterHeight > 0) {
targetCenterHeight > 0Description
TRUEnever evaluated
FALSEnever evaluated
sourceCenterHeight > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
248 if (targetMargins.left() > 0 && sourceMargins.left() > 0) { // left
targetMargins.left() > 0Description
TRUEnever evaluated
FALSEnever evaluated
sourceMargins.left() > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
249 QPixmapFragmentsArray &data = hints & QDrawBorderPixmap::OpaqueLeft ? opaqueData : translucentData;
hints & QDrawB...ap::OpaqueLeftDescription
TRUEnever evaluated
FALSEnever evaluated
0
250 d.sourceLeft = sourceRect.left();-
251 d.sourceTop = sourceCenterTop;-
252 d.width = sourceMargins.left();-
253 d.height = sourceCenterHeight;-
254 d.x = (0.5 * (xTarget[1] + xTarget[0]));-
255 d.scaleX = qreal(xTarget[1] - xTarget[0]) / d.width;-
256 d.scaleY = dy / d.height;-
257 for (int i = 1; i < rows - 1; ++i) {
i < rows - 1Description
TRUEnever evaluated
FALSEnever evaluated
0
258 d.y = (0.5 * (yTarget[i + 1] + yTarget[i]));-
259 data.append(d);-
260 }
never executed: end of block
0
261 if (rules.vertical == Qt::RepeatTile)
rules.vertical...Qt::RepeatTileDescription
TRUEnever evaluated
FALSEnever evaluated
0
262 data[data.size() - 1].height = ((yTarget[rows - 1] - yTarget[rows - 2]) / d.scaleY);
never executed: data[data.size() - 1].height = ((yTarget[rows - 1] - yTarget[rows - 2]) / d.scaleY);
0
263 }
never executed: end of block
0
264 if (targetMargins.right() > 0 && sourceMargins.right() > 0) { // right
targetMargins.right() > 0Description
TRUEnever evaluated
FALSEnever evaluated
sourceMargins.right() > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
265 QPixmapFragmentsArray &data = hints & QDrawBorderPixmap::OpaqueRight ? opaqueData : translucentData;
hints & QDrawB...p::OpaqueRightDescription
TRUEnever evaluated
FALSEnever evaluated
0
266 d.sourceLeft = sourceCenterRight;-
267 d.sourceTop = sourceCenterTop;-
268 d.width = sourceMargins.right();-
269 d.height = sourceCenterHeight;-
270 d.x = (0.5 * (xTarget[columns] + xTarget[columns - 1]));-
271 d.scaleX = qreal(xTarget[columns] - xTarget[columns - 1]) / d.width;-
272 d.scaleY = dy / d.height;-
273 for (int i = 1; i < rows - 1; ++i) {
i < rows - 1Description
TRUEnever evaluated
FALSEnever evaluated
0
274 d.y = (0.5 * (yTarget[i + 1] + yTarget[i]));-
275 data.append(d);-
276 }
never executed: end of block
0
277 if (rules.vertical == Qt::RepeatTile)
rules.vertical...Qt::RepeatTileDescription
TRUEnever evaluated
FALSEnever evaluated
0
278 data[data.size() - 1].height = ((yTarget[rows - 1] - yTarget[rows - 2]) / d.scaleY);
never executed: data[data.size() - 1].height = ((yTarget[rows - 1] - yTarget[rows - 2]) / d.scaleY);
0
279 }
never executed: end of block
0
280 }
never executed: end of block
0
281-
282 // center-
283 if (targetCenterWidth > 0 && targetCenterHeight > 0 && sourceCenterWidth > 0 && sourceCenterHeight > 0) {
targetCenterWidth > 0Description
TRUEnever evaluated
FALSEnever evaluated
targetCenterHeight > 0Description
TRUEnever evaluated
FALSEnever evaluated
sourceCenterWidth > 0Description
TRUEnever evaluated
FALSEnever evaluated
sourceCenterHeight > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
284 QPixmapFragmentsArray &data = hints & QDrawBorderPixmap::OpaqueCenter ? opaqueData : translucentData;
hints & QDrawB...::OpaqueCenterDescription
TRUEnever evaluated
FALSEnever evaluated
0
285 d.sourceLeft = sourceCenterLeft;-
286 d.sourceTop = sourceCenterTop;-
287 d.width = sourceCenterWidth;-
288 d.height = sourceCenterHeight;-
289 d.scaleX = dx / d.width;-
290 d.scaleY = dy / d.height;-
291-
292 qreal repeatWidth = (xTarget[columns - 1] - xTarget[columns - 2]) / d.scaleX;-
293 qreal repeatHeight = (yTarget[rows - 1] - yTarget[rows - 2]) / d.scaleY;-
294-
295 for (int j = 1; j < rows - 1; ++j) {
j < rows - 1Description
TRUEnever evaluated
FALSEnever evaluated
0
296 d.y = (0.5 * (yTarget[j + 1] + yTarget[j]));-
297 for (int i = 1; i < columns - 1; ++i) {
i < columns - 1Description
TRUEnever evaluated
FALSEnever evaluated
0
298 d.x = (0.5 * (xTarget[i + 1] + xTarget[i]));-
299 data.append(d);-
300 }
never executed: end of block
0
301 if (rules.horizontal == Qt::RepeatTile)
rules.horizont...Qt::RepeatTileDescription
TRUEnever evaluated
FALSEnever evaluated
0
302 data[data.size() - 1].width = repeatWidth;
never executed: data[data.size() - 1].width = repeatWidth;
0
303 }
never executed: end of block
0
304 if (rules.vertical == Qt::RepeatTile) {
rules.vertical...Qt::RepeatTileDescription
TRUEnever evaluated
FALSEnever evaluated
0
305 for (int i = 1; i < columns - 1; ++i)
i < columns - 1Description
TRUEnever evaluated
FALSEnever evaluated
0
306 data[data.size() - i].height = repeatHeight;
never executed: data[data.size() - i].height = repeatHeight;
0
307 }
never executed: end of block
0
308 }
never executed: end of block
0
309-
310 if (opaqueData.size())
opaqueData.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
311 painter->drawPixmapFragments(opaqueData.data(), opaqueData.size(), pixmap, QPainter::OpaqueHint);
never executed: painter->drawPixmapFragments(opaqueData.data(), opaqueData.size(), pixmap, QPainter::OpaqueHint);
0
312 if (translucentData.size())
translucentData.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
313 painter->drawPixmapFragments(translucentData.data(), translucentData.size(), pixmap);
never executed: painter->drawPixmapFragments(translucentData.data(), translucentData.size(), pixmap);
0
314-
315 if (oldAA)
oldAADescription
TRUEnever evaluated
FALSEnever evaluated
0
316 painter->setRenderHint(QPainter::Antialiasing, true);
never executed: painter->setRenderHint(QPainter::Antialiasing, true);
0
317}
never executed: end of block
0
318-
319} // QSGSoftwareHelpers namespace-
320-
321QSGSoftwareInternalImageNode::QSGSoftwareInternalImageNode()-
322 : m_innerSourceRect(0, 0, 1, 1)-
323 , m_subSourceRect(0, 0, 1, 1)-
324 , m_texture(nullptr)-
325 , m_mirror(false)-
326 , m_textureIsLayer(false)-
327 , m_smooth(true)-
328 , m_tileHorizontal(false)-
329 , m_tileVertical(false)-
330 , m_cachedMirroredPixmapIsDirty(false)-
331{-
332 setMaterial((QSGMaterial*)1);-
333 setGeometry((QSGGeometry*)1);-
334}
never executed: end of block
0
335-
336-
337void QSGSoftwareInternalImageNode::setTargetRect(const QRectF &rect)-
338{-
339 if (rect == m_targetRect)
rect == m_targetRectDescription
TRUEnever evaluated
FALSEnever evaluated
0
340 return;
never executed: return;
0
341 m_targetRect = rect;-
342 markDirty(DirtyGeometry);-
343}
never executed: end of block
0
344-
345void QSGSoftwareInternalImageNode::setInnerTargetRect(const QRectF &rect)-
346{-
347 if (rect == m_innerTargetRect)
rect == m_innerTargetRectDescription
TRUEnever evaluated
FALSEnever evaluated
0
348 return;
never executed: return;
0
349 m_innerTargetRect = rect;-
350 markDirty(DirtyGeometry);-
351}
never executed: end of block
0
352-
353void QSGSoftwareInternalImageNode::setInnerSourceRect(const QRectF &rect)-
354{-
355 if (rect == m_innerSourceRect)
rect == m_innerSourceRectDescription
TRUEnever evaluated
FALSEnever evaluated
0
356 return;
never executed: return;
0
357 m_innerSourceRect = rect;-
358 markDirty(DirtyGeometry);-
359}
never executed: end of block
0
360-
361void QSGSoftwareInternalImageNode::setSubSourceRect(const QRectF &rect)-
362{-
363 if (rect == m_subSourceRect)
rect == m_subSourceRectDescription
TRUEnever evaluated
FALSEnever evaluated
0
364 return;
never executed: return;
0
365 m_subSourceRect = rect;-
366 markDirty(DirtyGeometry);-
367}
never executed: end of block
0
368-
369void QSGSoftwareInternalImageNode::setTexture(QSGTexture *texture)-
370{-
371 m_texture = texture;-
372 m_cachedMirroredPixmapIsDirty = true;-
373 m_textureIsLayer = static_cast<bool>(qobject_cast<QSGSoftwareLayer*>(texture));-
374 markDirty(DirtyMaterial);-
375}
never executed: end of block
0
376-
377void QSGSoftwareInternalImageNode::setMirror(bool mirror)-
378{-
379 if (m_mirror != mirror) {
m_mirror != mirrorDescription
TRUEnever evaluated
FALSEnever evaluated
0
380 m_mirror = mirror;-
381 m_cachedMirroredPixmapIsDirty = true;-
382 markDirty(DirtyMaterial);-
383 }
never executed: end of block
0
384}
never executed: end of block
0
385-
386void QSGSoftwareInternalImageNode::setMipmapFiltering(QSGTexture::Filtering /*filtering*/)-
387{-
388}-
389-
390void QSGSoftwareInternalImageNode::setFiltering(QSGTexture::Filtering filtering)-
391{-
392 bool smooth = (filtering == QSGTexture::Linear);-
393 if (smooth == m_smooth)
smooth == m_smoothDescription
TRUEnever evaluated
FALSEnever evaluated
0
394 return;
never executed: return;
0
395-
396 m_smooth = smooth;-
397 markDirty(DirtyMaterial);-
398}
never executed: end of block
0
399-
400void QSGSoftwareInternalImageNode::setHorizontalWrapMode(QSGTexture::WrapMode wrapMode)-
401{-
402 bool tileHorizontal = (wrapMode == QSGTexture::Repeat);-
403 if (tileHorizontal == m_tileHorizontal)
tileHorizontal...tileHorizontalDescription
TRUEnever evaluated
FALSEnever evaluated
0
404 return;
never executed: return;
0
405-
406 m_tileHorizontal = tileHorizontal;-
407 markDirty(DirtyMaterial);-
408}
never executed: end of block
0
409-
410void QSGSoftwareInternalImageNode::setVerticalWrapMode(QSGTexture::WrapMode wrapMode)-
411{-
412 bool tileVertical = (wrapMode == QSGTexture::Repeat);-
413 if (tileVertical == m_tileVertical)
tileVertical == m_tileVerticalDescription
TRUEnever evaluated
FALSEnever evaluated
0
414 return;
never executed: return;
0
415-
416 m_tileVertical = (wrapMode == QSGTexture::Repeat);-
417 markDirty(DirtyMaterial);-
418}
never executed: end of block
0
419-
420void QSGSoftwareInternalImageNode::update()-
421{-
422 if (m_cachedMirroredPixmapIsDirty) {
m_cachedMirroredPixmapIsDirtyDescription
TRUEnever evaluated
FALSEnever evaluated
0
423 if (m_mirror || m_textureIsLayer) {
m_mirrorDescription
TRUEnever evaluated
FALSEnever evaluated
m_textureIsLayerDescription
TRUEnever evaluated
FALSEnever evaluated
0
424 QTransform transform(-
425 (m_mirror ? -1 : 1), 0,-
426 0 , (m_textureIsLayer ? -1 :1),-
427 0 , 0-
428 );-
429 m_cachedMirroredPixmap = pixmap().transformed(transform);-
430 } else {
never executed: end of block
0
431 //Cleanup cached pixmap if necessary-
432 if (!m_cachedMirroredPixmap.isNull())
!m_cachedMirro...ixmap.isNull()Description
TRUEnever evaluated
FALSEnever evaluated
0
433 m_cachedMirroredPixmap = QPixmap();
never executed: m_cachedMirroredPixmap = QPixmap();
0
434 }
never executed: end of block
0
435 m_cachedMirroredPixmapIsDirty = false;-
436 }
never executed: end of block
0
437}
never executed: end of block
0
438-
439void QSGSoftwareInternalImageNode::preprocess()-
440{-
441 bool doDirty = false;-
442 QSGLayer *t = qobject_cast<QSGLayer *>(m_texture);-
443 if (t) {
tDescription
TRUEnever evaluated
FALSEnever evaluated
0
444 doDirty = t->updateTexture();-
445 markDirty(DirtyGeometry);-
446 }
never executed: end of block
0
447 if (doDirty)
doDirtyDescription
TRUEnever evaluated
FALSEnever evaluated
0
448 markDirty(DirtyMaterial);
never executed: markDirty(DirtyMaterial);
0
449 m_cachedMirroredPixmapIsDirty = doDirty;-
450}
never executed: end of block
0
451-
452static Qt::TileRule getTileRule(qreal factor)-
453{-
454 int ifactor = qRound(factor);-
455 if (qFuzzyCompare(factor, ifactor )) {
qFuzzyCompare(...tor, ifactor )Description
TRUEnever evaluated
FALSEnever evaluated
0
456 if (ifactor == 1 || ifactor == 0)
ifactor == 1Description
TRUEnever evaluated
FALSEnever evaluated
ifactor == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
457 return Qt::StretchTile;
never executed: return Qt::StretchTile;
0
458 return Qt::RoundTile;
never executed: return Qt::RoundTile;
0
459 }-
460 return Qt::RepeatTile;
never executed: return Qt::RepeatTile;
0
461}-
462-
463-
464void QSGSoftwareInternalImageNode::paint(QPainter *painter)-
465{-
466 painter->setRenderHint(QPainter::SmoothPixmapTransform, m_smooth);-
467-
468 const QPixmap &pm = m_mirror || m_textureIsLayer ? m_cachedMirroredPixmap : pixmap();
m_mirrorDescription
TRUEnever evaluated
FALSEnever evaluated
m_textureIsLayerDescription
TRUEnever evaluated
FALSEnever evaluated
0
469-
470 if (m_innerTargetRect != m_targetRect) {
m_innerTargetR...= m_targetRectDescription
TRUEnever evaluated
FALSEnever evaluated
0
471 // border image-
472 QMargins margins(m_innerTargetRect.left() - m_targetRect.left(), m_innerTargetRect.top() - m_targetRect.top(),-
473 m_targetRect.right() - m_innerTargetRect.right(), m_targetRect.bottom() - m_innerTargetRect.bottom());-
474 QSGSoftwareHelpers::QTileRules tilerules(getTileRule(m_subSourceRect.width()), getTileRule(m_subSourceRect.height()));-
475 QSGSoftwareHelpers::qDrawBorderPixmap(painter, m_targetRect.toRect(), margins, pm, QRect(0, 0, pm.width(), pm.height()),-
476 margins, tilerules, QSGSoftwareHelpers::QDrawBorderPixmap::DrawingHints(nullptr));-
477 return;
never executed: return;
0
478 }-
479-
480 if (m_tileHorizontal || m_tileVertical) {
m_tileHorizontalDescription
TRUEnever evaluated
FALSEnever evaluated
m_tileVerticalDescription
TRUEnever evaluated
FALSEnever evaluated
0
481 painter->save();-
482 qreal sx = m_targetRect.width()/(m_subSourceRect.width()*pm.width());-
483 qreal sy = m_targetRect.height()/(m_subSourceRect.height()*pm.height());-
484 QMatrix transform(sx, 0, 0, sy, 0, 0);-
485 painter->setMatrix(transform, true);-
486 painter->drawTiledPixmap(QRectF(m_targetRect.x()/sx, m_targetRect.y()/sy, m_targetRect.width()/sx, m_targetRect.height()/sy),-
487 pm,-
488 QPointF(m_subSourceRect.left()*pm.width(), m_subSourceRect.top()*pm.height()));-
489 painter->restore();-
490 } else {
never executed: end of block
0
491 QRectF sr(m_subSourceRect.left()*pm.width(), m_subSourceRect.top()*pm.height(),-
492 m_subSourceRect.width()*pm.width(), m_subSourceRect.height()*pm.height());-
493 painter->drawPixmap(m_targetRect, pm, sr);-
494 }
never executed: end of block
0
495}-
496-
497QRectF QSGSoftwareInternalImageNode::rect() const-
498{-
499 return m_targetRect;
never executed: return m_targetRect;
0
500}-
501-
502const QPixmap &QSGSoftwareInternalImageNode::pixmap() const-
503{-
504 if (QSGSoftwarePixmapTexture *pt = qobject_cast<QSGSoftwarePixmapTexture*>(m_texture))
QSGSoftwarePix...e*>(m_texture)Description
TRUEnever evaluated
FALSEnever evaluated
0
505 return pt->pixmap();
never executed: return pt->pixmap();
0
506 if (QSGSoftwareLayer *layer = qobject_cast<QSGSoftwareLayer*>(m_texture))
QSGSoftwareLay...r*>(m_texture)Description
TRUEnever evaluated
FALSEnever evaluated
0
507 return layer->pixmap();
never executed: return layer->pixmap();
0
508 Q_ASSERT(m_texture == nullptr);-
509 static const QPixmap nullPixmap;-
510 return nullPixmap;
never executed: return nullPixmap;
0
511}-
512-
513QT_END_NAMESPACE-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.0