painting/qoutlinemapper.cpp

Switch to Source codePreprocessed file
LineSource CodeCoverage
1 -
2 -
3 -
4 -
5 -
6static const qreal aliasedCoordinateDelta = 0.5 - 0.015625; -
7 -
8 -
9 -
10 -
11 -
12 -
13static const QRectF boundingRect(const QPointF *points, int pointCount) -
14{ -
15 const QPointF *e = points; -
16 const QPointF *last = points + pointCount; -
17 qreal minx, maxx, miny, maxy; -
18 minx = maxx = e->x(); -
19 miny = maxy = e->y(); -
20 while (++e < last) {
evaluated: ++e < last
TRUEFALSE
yes
Evaluation Count:864080
yes
Evaluation Count:135139
135139-864080
21 if (e->x() < minx)
evaluated: e->x() < minx
TRUEFALSE
yes
Evaluation Count:104322
yes
Evaluation Count:759758
104322-759758
22 minx = e->x();
executed: minx = e->x();
Execution Count:104322
104322
23 else if (e->x() > maxx)
evaluated: e->x() > maxx
TRUEFALSE
yes
Evaluation Count:204022
yes
Evaluation Count:555736
204022-555736
24 maxx = e->x();
executed: maxx = e->x();
Execution Count:204022
204022
25 if (e->y() < miny)
evaluated: e->y() < miny
TRUEFALSE
yes
Evaluation Count:85227
yes
Evaluation Count:778853
85227-778853
26 miny = e->y();
executed: miny = e->y();
Execution Count:85227
85227
27 else if (e->y() > maxy)
evaluated: e->y() > maxy
TRUEFALSE
yes
Evaluation Count:189515
yes
Evaluation Count:589338
189515-589338
28 maxy = e->y();
executed: maxy = e->y();
Execution Count:189515
189515
29 } -
30 return QRectF(QPointF(minx, miny), QPointF(maxx, maxy));
executed: return QRectF(QPointF(minx, miny), QPointF(maxx, maxy));
Execution Count:135139
135139
31} -
32 -
33void QOutlineMapper::curveTo(const QPointF &cp1, const QPointF &cp2, const QPointF &ep) { -
34 -
35 -
36 -
37 -
38 QBezier bezier = QBezier::fromPoints(m_elements.last(), cp1, cp2, ep); -
39 bezier.addToPolygon(m_elements, m_curve_threshold); -
40 m_element_types.reserve(m_elements.size()); -
41 for (int i = m_elements.size() - m_element_types.size(); i; --i)
evaluated: i
TRUEFALSE
yes
Evaluation Count:6698
yes
Evaluation Count:1228
1228-6698
42 m_element_types << QPainterPath::LineToElement;
executed: m_element_types << QPainterPath::LineToElement;
Execution Count:6698
6698
43 qt_noop(); -
44}
executed: }
Execution Count:1228
1228
45 -
46 -
47QT_FT_Outline *QOutlineMapper::convertPath(const QPainterPath &path) -
48{ -
49 qt_noop(); -
50 int elmCount = path.elementCount(); -
51 -
52 -
53 -
54 beginOutline(path.fillRule()); -
55 -
56 for (int index=0; index<elmCount; ++index) {
evaluated: index<elmCount
TRUEFALSE
yes
Evaluation Count:40
yes
Evaluation Count:8
8-40
57 const QPainterPath::Element &elm = path.elementAt(index); -
58 -
59 switch (elm.type) { -
60 -
61 case QPainterPath::MoveToElement: -
62 if (index == elmCount - 1)
partially evaluated: index == elmCount - 1
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:8
0-8
63 continue;
never executed: continue;
0
64 moveTo(elm); -
65 break;
executed: break;
Execution Count:8
8
66 -
67 case QPainterPath::LineToElement: -
68 lineTo(elm); -
69 break;
executed: break;
Execution Count:32
32
70 -
71 case QPainterPath::CurveToElement: -
72 curveTo(elm, path.elementAt(index + 1), path.elementAt(index + 2)); -
73 index += 2; -
74 break;
never executed: break;
0
75 -
76 default: -
77 break;
never executed: break;
0
78 } -
79 }
executed: }
Execution Count:40
40
80 -
81 endOutline(); -
82 return outline();
executed: return outline();
Execution Count:8
8
83} -
84 -
85QT_FT_Outline *QOutlineMapper::convertPath(const QVectorPath &path) -
86{ -
87 int count = path.elementCount(); -
88 -
89 -
90 -
91 -
92 beginOutline(path.hasWindingFill() ? Qt::WindingFill : Qt::OddEvenFill); -
93 -
94 if (path.elements()) {
evaluated: path.elements()
TRUEFALSE
yes
Evaluation Count:133634
yes
Evaluation Count:760
760-133634
95 -
96 -
97 const QPainterPath::ElementType *elements = path.elements(); -
98 const QPointF *points = reinterpret_cast<const QPointF *>(path.points()); -
99 -
100 for (int index = 0; index < count; ++index) {
evaluated: index < count
TRUEFALSE
yes
Evaluation Count:885320
yes
Evaluation Count:133634
133634-885320
101 switch (elements[index]) { -
102 case QPainterPath::MoveToElement: -
103 if (index == count - 1)
partially evaluated: index == count - 1
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:216626
0-216626
104 continue;
never executed: continue;
0
105 moveTo(points[index]); -
106 break;
executed: break;
Execution Count:216626
216626
107 -
108 case QPainterPath::LineToElement: -
109 lineTo(points[index]); -
110 break;
executed: break;
Execution Count:667466
667466
111 -
112 case QPainterPath::CurveToElement: -
113 curveTo(points[index], points[index+1], points[index+2]); -
114 index += 2; -
115 break;
executed: break;
Execution Count:1228
1228
116 -
117 default: -
118 break;
never executed: break;
0
119 } -
120 }
executed: }
Execution Count:885320
885320
121 -
122 } else {
executed: }
Execution Count:133634
133634
123 -
124 -
125 m_elements.resize(count); -
126 if (count)
evaluated: count
TRUEFALSE
yes
Evaluation Count:752
yes
Evaluation Count:8
8-752
127 memcpy(m_elements.data(), path.points(), count* sizeof(QPointF));
executed: memcpy(m_elements.data(), path.points(), count* sizeof(QPointF));
Execution Count:752
752
128 -
129 m_element_types.resize(0); -
130 }
executed: }
Execution Count:760
760
131 -
132 endOutline(); -
133 return outline();
executed: return outline();
Execution Count:134394
134394
134} -
135 -
136 -
137void QOutlineMapper::endOutline() -
138{ -
139 closeSubpath(); -
140 -
141 if (m_elements.isEmpty()) {
evaluated: m_elements.isEmpty()
TRUEFALSE
yes
Evaluation Count:10
yes
Evaluation Count:135143
10-135143
142 memset(&m_outline, 0, sizeof(m_outline)); -
143 return;
executed: return;
Execution Count:10
10
144 } -
145 -
146 QPointF *elements = m_elements.data(); -
147 -
148 -
149 if (m_txop == QTransform::TxNone) {
evaluated: m_txop == QTransform::TxNone
TRUEFALSE
yes
Evaluation Count:100280
yes
Evaluation Count:34863
34863-100280
150 -
151 } else if (m_txop == QTransform::TxTranslate) {
executed: }
Execution Count:100280
evaluated: m_txop == QTransform::TxTranslate
TRUEFALSE
yes
Evaluation Count:34482
yes
Evaluation Count:381
381-100280
152 for (int i = 0; i < m_elements.size(); ++i) {
evaluated: i < m_elements.size()
TRUEFALSE
yes
Evaluation Count:501910
yes
Evaluation Count:34482
34482-501910
153 QPointF &e = elements[i]; -
154 e = QPointF(e.x() + m_dx, e.y() + m_dy); -
155 }
executed: }
Execution Count:501910
501910
156 } else if (m_txop == QTransform::TxScale) {
executed: }
Execution Count:34482
evaluated: m_txop == QTransform::TxScale
TRUEFALSE
yes
Evaluation Count:3
yes
Evaluation Count:378
3-34482
157 for (int i = 0; i < m_elements.size(); ++i) {
evaluated: i < m_elements.size()
TRUEFALSE
yes
Evaluation Count:49
yes
Evaluation Count:3
3-49
158 QPointF &e = elements[i]; -
159 e = QPointF(m_m11 * e.x() + m_dx, m_m22 * e.y() + m_dy); -
160 }
executed: }
Execution Count:49
49
161 } else if (m_txop < QTransform::TxProject) {
executed: }
Execution Count:3
evaluated: m_txop < QTransform::TxProject
TRUEFALSE
yes
Evaluation Count:374
yes
Evaluation Count:4
3-374
162 for (int i = 0; i < m_elements.size(); ++i) {
evaluated: i < m_elements.size()
TRUEFALSE
yes
Evaluation Count:4810
yes
Evaluation Count:374
374-4810
163 QPointF &e = elements[i]; -
164 e = QPointF(m_m11 * e.x() + m_m21 * e.y() + m_dx, -
165 m_m22 * e.y() + m_m12 * e.x() + m_dy); -
166 }
executed: }
Execution Count:4810
4810
167 } else {
executed: }
Execution Count:374
374
168 const QVectorPath vp((qreal *)elements, m_elements.size(), -
169 m_element_types.size() ? m_element_types.data() : 0); -
170 QPainterPath path = vp.convertToPainterPath(); -
171 path = QTransform(m_m11, m_m12, m_m13, m_m21, m_m22, m_m23, m_dx, m_dy, m_m33).map(path); -
172 if (!(m_outline.flags & 0x2))
partially evaluated: !(m_outline.flags & 0x2)
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:4
0-4
173 path.setFillRule(Qt::WindingFill);
never executed: path.setFillRule(Qt::WindingFill);
0
174 uint old_txop = m_txop; -
175 m_txop = QTransform::TxNone; -
176 if (path.isEmpty())
partially evaluated: path.isEmpty()
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:4
0-4
177 m_valid = false;
never executed: m_valid = false;
0
178 else -
179 convertPath(path);
executed: convertPath(path);
Execution Count:4
4
180 m_txop = old_txop; -
181 return;
executed: return;
Execution Count:4
4
182 } -
183 -
184 controlPointRect = boundingRect(elements, m_elements.size()); -
185 const bool do_clip = !m_in_clip_elements && ((controlPointRect.left() < -QT_RASTER_COORD_LIMIT
partially evaluated: !m_in_clip_elements
TRUEFALSE
yes
Evaluation Count:135139
no
Evaluation Count:0
partially evaluated: controlPointRect.left() < -QT_RASTER_COORD_LIMIT
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:135139
0-135139
186 || controlPointRect.right() > QT_RASTER_COORD_LIMIT
partially evaluated: controlPointRect.right() > QT_RASTER_COORD_LIMIT
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:135139
0-135139
187 || controlPointRect.top() < -QT_RASTER_COORD_LIMIT
partially evaluated: controlPointRect.top() < -QT_RASTER_COORD_LIMIT
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:135139
0-135139
188 || controlPointRect.bottom() > QT_RASTER_COORD_LIMIT
partially evaluated: controlPointRect.bottom() > QT_RASTER_COORD_LIMIT
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:135139
0-135139
189 || controlPointRect.width() > QT_RASTER_COORD_LIMIT
partially evaluated: controlPointRect.width() > QT_RASTER_COORD_LIMIT
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:135139
0-135139
190 || controlPointRect.height() > QT_RASTER_COORD_LIMIT));
partially evaluated: controlPointRect.height() > QT_RASTER_COORD_LIMIT
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:135139
0-135139
191 -
192 if (do_clip) {
partially evaluated: do_clip
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:135139
0-135139
193 clipElements(elements, elementTypes(), m_elements.size()); -
194 } else {
never executed: }
0
195 convertElements(elements, elementTypes(), m_elements.size()); -
196 }
executed: }
Execution Count:135139
135139
197} -
198 -
199void QOutlineMapper::convertElements(const QPointF *elements, -
200 const QPainterPath::ElementType *types, -
201 int element_count) -
202{ -
203 -
204 if (types) {
evaluated: types
TRUEFALSE
yes
Evaluation Count:134387
yes
Evaluation Count:752
752-134387
205 -
206 const QPointF *e = elements; -
207 for (int i=0; i<element_count; ++i) {
evaluated: i<element_count
TRUEFALSE
yes
Evaluation Count:995382
yes
Evaluation Count:134387
134387-995382
208 switch (*types) { -
209 case QPainterPath::MoveToElement: -
210 { -
211 QT_FT_Vector pt_fixed = { (int(e->x() * 64)), -
212 (int(e->y() * 64)) }; -
213 if (i != 0)
evaluated: i != 0
TRUEFALSE
yes
Evaluation Count:82994
yes
Evaluation Count:134387
82994-134387
214 m_contours << m_points.size() - 1;
executed: m_contours << m_points.size() - 1;
Execution Count:82994
82994
215 m_points << pt_fixed; -
216 m_tags << 1; -
217 } -
218 break;
executed: break;
Execution Count:217381
217381
219 -
220 case QPainterPath::LineToElement: -
221 { -
222 QT_FT_Vector pt_fixed = { (int(e->x() * 64)), -
223 (int(e->y() * 64)) }; -
224 m_points << pt_fixed; -
225 m_tags << 1; -
226 } -
227 break;
executed: break;
Execution Count:778001
778001
228 -
229 case QPainterPath::CurveToElement: -
230 { -
231 QT_FT_Vector cp1_fixed = { (int(e->x() * 64)), -
232 (int(e->y() * 64)) }; -
233 ++e; -
234 QT_FT_Vector cp2_fixed = { (int((e)->x() * 64)), -
235 (int((e)->y() * 64)) }; -
236 ++e; -
237 QT_FT_Vector ep_fixed = { (int((e)->x() * 64)), -
238 (int((e)->y() * 64)) }; -
239 -
240 m_points << cp1_fixed << cp2_fixed << ep_fixed; -
241 m_tags << 2 -
242 << 2 -
243 << 1; -
244 -
245 types += 2; -
246 i += 2; -
247 } -
248 break;
never executed: break;
0
249 default: -
250 break;
never executed: break;
0
251 } -
252 ++types; -
253 ++e; -
254 }
executed: }
Execution Count:995382
995382
255 } else {
executed: }
Execution Count:134387
134387
256 -
257 const QPointF *last = elements + element_count; -
258 const QPointF *e = elements; -
259 while (e < last) {
evaluated: e < last
TRUEFALSE
yes
Evaluation Count:3837
yes
Evaluation Count:752
752-3837
260 QT_FT_Vector pt_fixed = { (int(e->x() * 64)), -
261 (int(e->y() * 64)) }; -
262 m_points << pt_fixed; -
263 m_tags << 1; -
264 ++e; -
265 }
executed: }
Execution Count:3837
3837
266 }
executed: }
Execution Count:752
752
267 -
268 -
269 m_contours << m_points.size() - 1; -
270 -
271 m_outline.n_contours = m_contours.size(); -
272 m_outline.n_points = m_points.size(); -
273 -
274 m_outline.points = m_points.data(); -
275 m_outline.tags = m_tags.data(); -
276 m_outline.contours = m_contours.data(); -
277}
executed: }
Execution Count:135139
135139
278 -
279void QOutlineMapper::clipElements(const QPointF *elements, -
280 const QPainterPath::ElementType *types, -
281 int element_count) -
282{ -
283 -
284 -
285 -
286 -
287 m_in_clip_elements = true; -
288 -
289 QPainterPath path; -
290 -
291 if (!(m_outline.flags & 0x2))
never evaluated: !(m_outline.flags & 0x2)
0
292 path.setFillRule(Qt::WindingFill);
never executed: path.setFillRule(Qt::WindingFill);
0
293 -
294 if (types) {
never evaluated: types
0
295 for (int i=0; i<element_count; ++i) {
never evaluated: i<element_count
0
296 switch (types[i]) { -
297 case QPainterPath::MoveToElement: -
298 path.moveTo(elements[i]); -
299 break;
never executed: break;
0
300 -
301 case QPainterPath::LineToElement: -
302 path.lineTo(elements[i]); -
303 break;
never executed: break;
0
304 -
305 case QPainterPath::CurveToElement: -
306 path.cubicTo(elements[i], elements[i+1], elements[i+2]); -
307 i += 2; -
308 break;
never executed: break;
0
309 default: -
310 break;
never executed: break;
0
311 } -
312 }
never executed: }
0
313 } else {
never executed: }
0
314 path.moveTo(elements[0]); -
315 for (int i=1; i<element_count; ++i)
never evaluated: i<element_count
0
316 path.lineTo(elements[i]);
never executed: path.lineTo(elements[i]);
0
317 }
never executed: }
0
318 -
319 QPainterPath clipPath; -
320 clipPath.addRect(m_clip_rect); -
321 QPainterPath clippedPath = path.intersected(clipPath); -
322 uint old_txop = m_txop; -
323 m_txop = QTransform::TxNone; -
324 if (clippedPath.isEmpty())
never evaluated: clippedPath.isEmpty()
0
325 m_valid = false;
never executed: m_valid = false;
0
326 else -
327 convertPath(clippedPath);
never executed: convertPath(clippedPath);
0
328 m_txop = old_txop; -
329 -
330 m_in_clip_elements = false; -
331}
never executed: }
0
332 -
333 -
334 -
Switch to Source codePreprocessed file

Generated by Squish Coco Non-Commercial