Absolute File Name: | /home/qt/qt5_coco/qt5/qtbase/src/gui/painting/qgrayraster.c |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | - | |||||||||||||||||||||||||
2 | typedef int TCoord; | - | ||||||||||||||||||||||||
3 | typedef int TPos; | - | ||||||||||||||||||||||||
4 | typedef int TArea; | - | ||||||||||||||||||||||||
5 | typedef struct TCell_* PCell; | - | ||||||||||||||||||||||||
6 | - | |||||||||||||||||||||||||
7 | typedef struct TCell_ | - | ||||||||||||||||||||||||
8 | { | - | ||||||||||||||||||||||||
9 | int x; | - | ||||||||||||||||||||||||
10 | int cover; | - | ||||||||||||||||||||||||
11 | TArea area; | - | ||||||||||||||||||||||||
12 | PCell next; | - | ||||||||||||||||||||||||
13 | - | |||||||||||||||||||||||||
14 | } TCell; | - | ||||||||||||||||||||||||
15 | - | |||||||||||||||||||||||||
16 | - | |||||||||||||||||||||||||
17 | typedef struct TWorker_ | - | ||||||||||||||||||||||||
18 | { | - | ||||||||||||||||||||||||
19 | TCoord ex, ey; | - | ||||||||||||||||||||||||
20 | TPos min_ex, max_ex; | - | ||||||||||||||||||||||||
21 | TPos min_ey, max_ey; | - | ||||||||||||||||||||||||
22 | TPos count_ex, count_ey; | - | ||||||||||||||||||||||||
23 | - | |||||||||||||||||||||||||
24 | TArea area; | - | ||||||||||||||||||||||||
25 | int cover; | - | ||||||||||||||||||||||||
26 | int invalid; | - | ||||||||||||||||||||||||
27 | - | |||||||||||||||||||||||||
28 | PCell cells; | - | ||||||||||||||||||||||||
29 | int max_cells; | - | ||||||||||||||||||||||||
30 | int num_cells; | - | ||||||||||||||||||||||||
31 | - | |||||||||||||||||||||||||
32 | TCoord cx, cy; | - | ||||||||||||||||||||||||
33 | TPos x, y; | - | ||||||||||||||||||||||||
34 | - | |||||||||||||||||||||||||
35 | TPos last_ey; | - | ||||||||||||||||||||||||
36 | - | |||||||||||||||||||||||||
37 | QT_FT_Vector bez_stack[32 * 3 + 1]; | - | ||||||||||||||||||||||||
38 | int lev_stack[32]; | - | ||||||||||||||||||||||||
39 | - | |||||||||||||||||||||||||
40 | QT_FT_Outline outline; | - | ||||||||||||||||||||||||
41 | QT_FT_Bitmap target; | - | ||||||||||||||||||||||||
42 | QT_FT_BBox clip_box; | - | ||||||||||||||||||||||||
43 | - | |||||||||||||||||||||||||
44 | QT_FT_Span gray_spans[256]; | - | ||||||||||||||||||||||||
45 | int num_gray_spans; | - | ||||||||||||||||||||||||
46 | - | |||||||||||||||||||||||||
47 | QT_FT_SpanFunc render_span; | - | ||||||||||||||||||||||||
48 | void* render_span_data; | - | ||||||||||||||||||||||||
49 | - | |||||||||||||||||||||||||
50 | int band_size; | - | ||||||||||||||||||||||||
51 | int band_shoot; | - | ||||||||||||||||||||||||
52 | int conic_level; | - | ||||||||||||||||||||||||
53 | int cubic_level; | - | ||||||||||||||||||||||||
54 | - | |||||||||||||||||||||||||
55 | jmp_buf jump_buffer; | - | ||||||||||||||||||||||||
56 | - | |||||||||||||||||||||||||
57 | void* buffer; | - | ||||||||||||||||||||||||
58 | long buffer_size; | - | ||||||||||||||||||||||||
59 | - | |||||||||||||||||||||||||
60 | PCell* ycells; | - | ||||||||||||||||||||||||
61 | int ycount; | - | ||||||||||||||||||||||||
62 | - | |||||||||||||||||||||||||
63 | int skip_spans; | - | ||||||||||||||||||||||||
64 | } TWorker, *PWorker; | - | ||||||||||||||||||||||||
65 | - | |||||||||||||||||||||||||
66 | - | |||||||||||||||||||||||||
67 | typedef struct TRaster_ | - | ||||||||||||||||||||||||
68 | { | - | ||||||||||||||||||||||||
69 | void* buffer; | - | ||||||||||||||||||||||||
70 | long buffer_size; | - | ||||||||||||||||||||||||
71 | long buffer_allocated_size; | - | ||||||||||||||||||||||||
72 | int band_size; | - | ||||||||||||||||||||||||
73 | void* memory; | - | ||||||||||||||||||||||||
74 | PWorker worker; | - | ||||||||||||||||||||||||
75 | - | |||||||||||||||||||||||||
76 | } TRaster, *PRaster; | - | ||||||||||||||||||||||||
77 | - | |||||||||||||||||||||||||
78 | int q_gray_rendered_spans(TRaster *raster) | - | ||||||||||||||||||||||||
79 | { | - | ||||||||||||||||||||||||
80 | if ( raster
| 0 | ||||||||||||||||||||||||
81 | return never executed: raster->worker->skip_spans > 0 ? 0 : -raster->worker->skip_spans;return raster->worker->skip_spans > 0 ? 0 : -raster->worker->skip_spans; never executed: return raster->worker->skip_spans > 0 ? 0 : -raster->worker->skip_spans; | 0 | ||||||||||||||||||||||||
82 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||
83 | } | - | ||||||||||||||||||||||||
84 | - | |||||||||||||||||||||||||
85 | - | |||||||||||||||||||||||||
86 | - | |||||||||||||||||||||||||
87 | - | |||||||||||||||||||||||||
88 | - | |||||||||||||||||||||||||
89 | static void | - | ||||||||||||||||||||||||
90 | gray_init_cells( PWorker worker, void* buffer, | - | ||||||||||||||||||||||||
91 | long byte_size ) | - | ||||||||||||||||||||||||
92 | { | - | ||||||||||||||||||||||||
93 | (*worker).buffer = buffer; | - | ||||||||||||||||||||||||
94 | (*worker).buffer_size = byte_size; | - | ||||||||||||||||||||||||
95 | - | |||||||||||||||||||||||||
96 | (*worker).ycells = (PCell*) buffer; | - | ||||||||||||||||||||||||
97 | (*worker).cells = ((void *)0); | - | ||||||||||||||||||||||||
98 | (*worker).max_cells = 0; | - | ||||||||||||||||||||||||
99 | (*worker).num_cells = 0; | - | ||||||||||||||||||||||||
100 | (*worker).area = 0; | - | ||||||||||||||||||||||||
101 | (*worker).cover = 0; | - | ||||||||||||||||||||||||
102 | (*worker).invalid = 1; | - | ||||||||||||||||||||||||
103 | } never executed: end of block | 0 | ||||||||||||||||||||||||
104 | - | |||||||||||||||||||||||||
105 | - | |||||||||||||||||||||||||
106 | - | |||||||||||||||||||||||||
107 | - | |||||||||||||||||||||||||
108 | - | |||||||||||||||||||||||||
109 | - | |||||||||||||||||||||||||
110 | static void | - | ||||||||||||||||||||||||
111 | gray_compute_cbox( PWorker worker ) | - | ||||||||||||||||||||||||
112 | { | - | ||||||||||||||||||||||||
113 | QT_FT_Outline* outline = &(*worker).outline; | - | ||||||||||||||||||||||||
114 | QT_FT_Vector* vec = outline->points; | - | ||||||||||||||||||||||||
115 | QT_FT_Vector* limit = vec + outline->n_points; | - | ||||||||||||||||||||||||
116 | - | |||||||||||||||||||||||||
117 | - | |||||||||||||||||||||||||
118 | if ( outline->n_points <= 0
| 0 | ||||||||||||||||||||||||
119 | { | - | ||||||||||||||||||||||||
120 | (*worker).min_ex = (*worker).max_ex = 0; | - | ||||||||||||||||||||||||
121 | (*worker).min_ey = (*worker).max_ey = 0; | - | ||||||||||||||||||||||||
122 | return; never executed: return; | 0 | ||||||||||||||||||||||||
123 | } | - | ||||||||||||||||||||||||
124 | - | |||||||||||||||||||||||||
125 | (*worker).min_ex = (*worker).max_ex = vec->x; | - | ||||||||||||||||||||||||
126 | (*worker).min_ey = (*worker).max_ey = vec->y; | - | ||||||||||||||||||||||||
127 | - | |||||||||||||||||||||||||
128 | vec++; | - | ||||||||||||||||||||||||
129 | - | |||||||||||||||||||||||||
130 | for ( ; vec < limit
| 0 | ||||||||||||||||||||||||
131 | { | - | ||||||||||||||||||||||||
132 | TPos x = vec->x; | - | ||||||||||||||||||||||||
133 | TPos y = vec->y; | - | ||||||||||||||||||||||||
134 | - | |||||||||||||||||||||||||
135 | - | |||||||||||||||||||||||||
136 | if ( x < (*worker).min_ex
never executed: worker).min_ex = x;(*worker).min_ex = x; never executed: (*worker).min_ex = x; | 0 | ||||||||||||||||||||||||
137 | if ( x > (*worker).max_ex
never executed: worker).max_ex = x;(*worker).max_ex = x; never executed: (*worker).max_ex = x; | 0 | ||||||||||||||||||||||||
138 | if ( y < (*worker).min_ey
never executed: worker).min_ey = y;(*worker).min_ey = y; never executed: (*worker).min_ey = y; | 0 | ||||||||||||||||||||||||
139 | if ( y > (*worker).max_ey
never executed: worker).max_ey = y;(*worker).max_ey = y; never executed: (*worker).max_ey = y; | 0 | ||||||||||||||||||||||||
140 | } never executed: end of block | 0 | ||||||||||||||||||||||||
141 | - | |||||||||||||||||||||||||
142 | - | |||||||||||||||||||||||||
143 | (*worker).min_ex = (*worker).min_ex >> 6; | - | ||||||||||||||||||||||||
144 | (*worker).min_ey = (*worker).min_ey >> 6; | - | ||||||||||||||||||||||||
145 | (*worker).max_ex = ( (*worker).max_ex + 63 ) >> 6; | - | ||||||||||||||||||||||||
146 | (*worker).max_ey = ( (*worker).max_ey + 63 ) >> 6; | - | ||||||||||||||||||||||||
147 | } never executed: end of block | 0 | ||||||||||||||||||||||||
148 | - | |||||||||||||||||||||||||
149 | - | |||||||||||||||||||||||||
150 | - | |||||||||||||||||||||||||
151 | - | |||||||||||||||||||||||||
152 | - | |||||||||||||||||||||||||
153 | - | |||||||||||||||||||||||||
154 | static void | - | ||||||||||||||||||||||||
155 | gray_record_cell( PWorker worker ) | - | ||||||||||||||||||||||||
156 | { | - | ||||||||||||||||||||||||
157 | PCell *pcell, cell; | - | ||||||||||||||||||||||||
158 | int x = (*worker).ex; | - | ||||||||||||||||||||||||
159 | - | |||||||||||||||||||||||||
160 | if ( (*
| 0 | ||||||||||||||||||||||||
161 | return; never executed: return; | 0 | ||||||||||||||||||||||||
162 | - | |||||||||||||||||||||||||
163 | if ( x > (*worker).max_ex
| 0 | ||||||||||||||||||||||||
164 | x = (*worker).max_ex; never executed: x = (*worker).max_ex; | 0 | ||||||||||||||||||||||||
165 | - | |||||||||||||||||||||||||
166 | pcell = &(*worker).ycells[(*worker).ey]; | - | ||||||||||||||||||||||||
167 | - | |||||||||||||||||||||||||
168 | for (;;) | - | ||||||||||||||||||||||||
169 | { | - | ||||||||||||||||||||||||
170 | cell = *pcell; | - | ||||||||||||||||||||||||
171 | if ( cell == ((void *)0)
| 0 | ||||||||||||||||||||||||
172 | break; never executed: break; | 0 | ||||||||||||||||||||||||
173 | - | |||||||||||||||||||||||||
174 | if ( cell->x == x
| 0 | ||||||||||||||||||||||||
175 | cell->area += (*worker).area; | - | ||||||||||||||||||||||||
176 | cell->cover += (*worker).cover; | - | ||||||||||||||||||||||||
177 | return; never executed: return; | 0 | ||||||||||||||||||||||||
178 | } | - | ||||||||||||||||||||||||
179 | - | |||||||||||||||||||||||||
180 | pcell = &cell->next; | - | ||||||||||||||||||||||||
181 | } never executed: end of block | 0 | ||||||||||||||||||||||||
182 | - | |||||||||||||||||||||||||
183 | if ( (*
| 0 | ||||||||||||||||||||||||
184 | longjmp( (*worker).jump_buffer, 1 ); never executed: longjmp( (*worker).jump_buffer, 1 ); | 0 | ||||||||||||||||||||||||
185 | - | |||||||||||||||||||||||||
186 | cell = (*worker).cells + (*worker).num_cells++; | - | ||||||||||||||||||||||||
187 | cell->x = x; | - | ||||||||||||||||||||||||
188 | cell->area = (*worker).area; | - | ||||||||||||||||||||||||
189 | cell->cover = (*worker).cover; | - | ||||||||||||||||||||||||
190 | - | |||||||||||||||||||||||||
191 | cell->next = *pcell; | - | ||||||||||||||||||||||||
192 | *pcell = cell; | - | ||||||||||||||||||||||||
193 | } never executed: end of block | 0 | ||||||||||||||||||||||||
194 | - | |||||||||||||||||||||||||
195 | - | |||||||||||||||||||||||||
196 | - | |||||||||||||||||||||||||
197 | - | |||||||||||||||||||||||||
198 | - | |||||||||||||||||||||||||
199 | - | |||||||||||||||||||||||||
200 | static void | - | ||||||||||||||||||||||||
201 | gray_set_cell( PWorker worker, TCoord ex, | - | ||||||||||||||||||||||||
202 | TCoord ey ) | - | ||||||||||||||||||||||||
203 | { | - | ||||||||||||||||||||||||
204 | ey -= (*worker).min_ey; | - | ||||||||||||||||||||||||
205 | - | |||||||||||||||||||||||||
206 | if ( ex > (*worker).max_ex
| 0 | ||||||||||||||||||||||||
207 | ex = (*worker).max_ex; never executed: ex = (*worker).max_ex; | 0 | ||||||||||||||||||||||||
208 | - | |||||||||||||||||||||||||
209 | ex -= (*worker).min_ex; | - | ||||||||||||||||||||||||
210 | if ( ex < 0
| 0 | ||||||||||||||||||||||||
211 | ex = -1; never executed: ex = -1; | 0 | ||||||||||||||||||||||||
212 | - | |||||||||||||||||||||||||
213 | - | |||||||||||||||||||||||||
214 | if ( ex != (*worker).ex
| 0 | ||||||||||||||||||||||||
215 | { | - | ||||||||||||||||||||||||
216 | - | |||||||||||||||||||||||||
217 | if ( !(*worker).invalid
| 0 | ||||||||||||||||||||||||
218 | gray_record_cell( worker ); never executed: gray_record_cell( worker ); | 0 | ||||||||||||||||||||||||
219 | - | |||||||||||||||||||||||||
220 | (*worker).area = 0; | - | ||||||||||||||||||||||||
221 | (*worker).cover = 0; | - | ||||||||||||||||||||||||
222 | (*worker).ex = ex; | - | ||||||||||||||||||||||||
223 | (*worker).ey = ey; | - | ||||||||||||||||||||||||
224 | } never executed: end of block | 0 | ||||||||||||||||||||||||
225 | - | |||||||||||||||||||||||||
226 | (*worker).invalid = ( (
| 0 | ||||||||||||||||||||||||
227 | ex >= (*worker).count_ex
| 0 | ||||||||||||||||||||||||
228 | } never executed: end of block | 0 | ||||||||||||||||||||||||
229 | - | |||||||||||||||||||||||||
230 | - | |||||||||||||||||||||||||
231 | - | |||||||||||||||||||||||||
232 | - | |||||||||||||||||||||||||
233 | - | |||||||||||||||||||||||||
234 | - | |||||||||||||||||||||||||
235 | static void | - | ||||||||||||||||||||||||
236 | gray_start_cell( PWorker worker, TCoord ex, | - | ||||||||||||||||||||||||
237 | TCoord ey ) | - | ||||||||||||||||||||||||
238 | { | - | ||||||||||||||||||||||||
239 | if ( ex > (*worker).max_ex
| 0 | ||||||||||||||||||||||||
240 | ex = (TCoord)( (*worker).max_ex ); never executed: ex = (TCoord)( (*worker).max_ex ); | 0 | ||||||||||||||||||||||||
241 | - | |||||||||||||||||||||||||
242 | if ( ex < (*worker).min_ex
| 0 | ||||||||||||||||||||||||
243 | ex = (TCoord)( (*worker).min_ex - 1 ); never executed: ex = (TCoord)( (*worker).min_ex - 1 ); | 0 | ||||||||||||||||||||||||
244 | - | |||||||||||||||||||||||||
245 | (*worker).area = 0; | - | ||||||||||||||||||||||||
246 | (*worker).cover = 0; | - | ||||||||||||||||||||||||
247 | (*worker).ex = ex - (*worker).min_ex; | - | ||||||||||||||||||||||||
248 | (*worker).ey = ey - (*worker).min_ey; | - | ||||||||||||||||||||||||
249 | (*worker).last_ey = ( (TPos)(ey) * ( 1 << 8 ) ); | - | ||||||||||||||||||||||||
250 | (*worker).invalid = 0; | - | ||||||||||||||||||||||||
251 | - | |||||||||||||||||||||||||
252 | gray_set_cell( worker, ex, ey ); | - | ||||||||||||||||||||||||
253 | } never executed: end of block | 0 | ||||||||||||||||||||||||
254 | - | |||||||||||||||||||||||||
255 | - | |||||||||||||||||||||||||
256 | - | |||||||||||||||||||||||||
257 | - | |||||||||||||||||||||||||
258 | - | |||||||||||||||||||||||||
259 | - | |||||||||||||||||||||||||
260 | static void | - | ||||||||||||||||||||||||
261 | gray_render_scanline( PWorker worker, TCoord ey, | - | ||||||||||||||||||||||||
262 | TPos x1, | - | ||||||||||||||||||||||||
263 | TCoord y1, | - | ||||||||||||||||||||||||
264 | TPos x2, | - | ||||||||||||||||||||||||
265 | TCoord y2 ) | - | ||||||||||||||||||||||||
266 | { | - | ||||||||||||||||||||||||
267 | TCoord ex1, ex2, fx1, fx2, delta; | - | ||||||||||||||||||||||||
268 | int p, first, dx; | - | ||||||||||||||||||||||||
269 | int incr, lift, mod, rem; | - | ||||||||||||||||||||||||
270 | - | |||||||||||||||||||||||||
271 | - | |||||||||||||||||||||||||
272 | dx = x2 - x1; | - | ||||||||||||||||||||||||
273 | - | |||||||||||||||||||||||||
274 | ex1 = ( (TCoord)( (x1) >> 8 ) ); | - | ||||||||||||||||||||||||
275 | ex2 = ( (TCoord)( (x2) >> 8 ) ); | - | ||||||||||||||||||||||||
276 | fx1 = (TCoord)( x1 - ( (TPos)(ex1) * ( 1 << 8 ) ) ); | - | ||||||||||||||||||||||||
277 | fx2 = (TCoord)( x2 - ( (TPos)(ex2) * ( 1 << 8 ) ) ); | - | ||||||||||||||||||||||||
278 | - | |||||||||||||||||||||||||
279 | - | |||||||||||||||||||||||||
280 | if ( y1 == y2
| 0 | ||||||||||||||||||||||||
281 | { | - | ||||||||||||||||||||||||
282 | gray_set_cell( worker, ex2, ey ); | - | ||||||||||||||||||||||||
283 | return; never executed: return; | 0 | ||||||||||||||||||||||||
284 | } | - | ||||||||||||||||||||||||
285 | - | |||||||||||||||||||||||||
286 | - | |||||||||||||||||||||||||
287 | - | |||||||||||||||||||||||||
288 | if ( ex1 == ex2
| 0 | ||||||||||||||||||||||||
289 | { | - | ||||||||||||||||||||||||
290 | delta = y2 - y1; | - | ||||||||||||||||||||||||
291 | (*worker).area += (TArea)( fx1 + fx2 ) * delta; | - | ||||||||||||||||||||||||
292 | (*worker).cover += delta; | - | ||||||||||||||||||||||||
293 | return; never executed: return; | 0 | ||||||||||||||||||||||||
294 | } | - | ||||||||||||||||||||||||
295 | - | |||||||||||||||||||||||||
296 | - | |||||||||||||||||||||||||
297 | - | |||||||||||||||||||||||||
298 | - | |||||||||||||||||||||||||
299 | p = ( ( 1L << 8 ) - fx1 ) * ( y2 - y1 ); | - | ||||||||||||||||||||||||
300 | first = ( 1L << 8 ); | - | ||||||||||||||||||||||||
301 | incr = 1; | - | ||||||||||||||||||||||||
302 | - | |||||||||||||||||||||||||
303 | if ( dx < 0
| 0 | ||||||||||||||||||||||||
304 | { | - | ||||||||||||||||||||||||
305 | p = fx1 * ( y2 - y1 ); | - | ||||||||||||||||||||||||
306 | first = 0; | - | ||||||||||||||||||||||||
307 | incr = -1; | - | ||||||||||||||||||||||||
308 | dx = -dx; | - | ||||||||||||||||||||||||
309 | } never executed: end of block | 0 | ||||||||||||||||||||||||
310 | - | |||||||||||||||||||||||||
311 | delta = (TCoord)( p / dx ); | - | ||||||||||||||||||||||||
312 | mod = (TCoord)( p % dx ); | - | ||||||||||||||||||||||||
313 | if ( mod < 0
| 0 | ||||||||||||||||||||||||
314 | { | - | ||||||||||||||||||||||||
315 | delta--; | - | ||||||||||||||||||||||||
316 | mod += (TCoord)dx; | - | ||||||||||||||||||||||||
317 | } never executed: end of block | 0 | ||||||||||||||||||||||||
318 | - | |||||||||||||||||||||||||
319 | (*worker).area += (TArea)( fx1 + first ) * delta; | - | ||||||||||||||||||||||||
320 | (*worker).cover += delta; | - | ||||||||||||||||||||||||
321 | - | |||||||||||||||||||||||||
322 | ex1 += incr; | - | ||||||||||||||||||||||||
323 | gray_set_cell( worker, ex1, ey ); | - | ||||||||||||||||||||||||
324 | y1 += delta; | - | ||||||||||||||||||||||||
325 | - | |||||||||||||||||||||||||
326 | if ( ex1 != ex2
| 0 | ||||||||||||||||||||||||
327 | { | - | ||||||||||||||||||||||||
328 | p = ( 1L << 8 ) * ( y2 - y1 + delta ); | - | ||||||||||||||||||||||||
329 | lift = (TCoord)( p / dx ); | - | ||||||||||||||||||||||||
330 | rem = (TCoord)( p % dx ); | - | ||||||||||||||||||||||||
331 | if ( rem < 0
| 0 | ||||||||||||||||||||||||
332 | { | - | ||||||||||||||||||||||||
333 | lift--; | - | ||||||||||||||||||||||||
334 | rem += (TCoord)dx; | - | ||||||||||||||||||||||||
335 | } never executed: end of block | 0 | ||||||||||||||||||||||||
336 | - | |||||||||||||||||||||||||
337 | mod -= (int)dx; | - | ||||||||||||||||||||||||
338 | - | |||||||||||||||||||||||||
339 | while ( ex1 != ex2
| 0 | ||||||||||||||||||||||||
340 | { | - | ||||||||||||||||||||||||
341 | delta = lift; | - | ||||||||||||||||||||||||
342 | mod += rem; | - | ||||||||||||||||||||||||
343 | if ( mod >= 0
| 0 | ||||||||||||||||||||||||
344 | { | - | ||||||||||||||||||||||||
345 | mod -= (TCoord)dx; | - | ||||||||||||||||||||||||
346 | delta++; | - | ||||||||||||||||||||||||
347 | } never executed: end of block | 0 | ||||||||||||||||||||||||
348 | - | |||||||||||||||||||||||||
349 | (*worker).area += (TArea)( 1L << 8 ) * delta; | - | ||||||||||||||||||||||||
350 | (*worker).cover += delta; | - | ||||||||||||||||||||||||
351 | y1 += delta; | - | ||||||||||||||||||||||||
352 | ex1 += incr; | - | ||||||||||||||||||||||||
353 | gray_set_cell( worker, ex1, ey ); | - | ||||||||||||||||||||||||
354 | } never executed: end of block | 0 | ||||||||||||||||||||||||
355 | } never executed: end of block | 0 | ||||||||||||||||||||||||
356 | - | |||||||||||||||||||||||||
357 | delta = y2 - y1; | - | ||||||||||||||||||||||||
358 | (*worker).area += (TArea)( fx2 + ( 1L << 8 ) - first ) * delta; | - | ||||||||||||||||||||||||
359 | (*worker).cover += delta; | - | ||||||||||||||||||||||||
360 | } never executed: end of block | 0 | ||||||||||||||||||||||||
361 | - | |||||||||||||||||||||||||
362 | - | |||||||||||||||||||||||||
363 | - | |||||||||||||||||||||||||
364 | - | |||||||||||||||||||||||||
365 | - | |||||||||||||||||||||||||
366 | - | |||||||||||||||||||||||||
367 | static void | - | ||||||||||||||||||||||||
368 | gray_render_line( PWorker worker, TPos to_x, | - | ||||||||||||||||||||||||
369 | TPos to_y ) | - | ||||||||||||||||||||||||
370 | { | - | ||||||||||||||||||||||||
371 | TCoord ey1, ey2, fy1, fy2; | - | ||||||||||||||||||||||||
372 | TPos dx, dy, x, x2; | - | ||||||||||||||||||||||||
373 | int p, first; | - | ||||||||||||||||||||||||
374 | int delta, rem, mod, lift, incr; | - | ||||||||||||||||||||||||
375 | - | |||||||||||||||||||||||||
376 | - | |||||||||||||||||||||||||
377 | ey1 = ( (TCoord)( ((*worker).last_ey) >> 8 ) ); | - | ||||||||||||||||||||||||
378 | ey2 = ( (TCoord)( (to_y) >> 8 ) ); | - | ||||||||||||||||||||||||
379 | fy1 = (TCoord)( (*worker).y - (*worker).last_ey ); | - | ||||||||||||||||||||||||
380 | fy2 = (TCoord)( to_y - ( (TPos)(ey2) * ( 1 << 8 ) ) ); | - | ||||||||||||||||||||||||
381 | - | |||||||||||||||||||||||||
382 | dx = to_x - (*worker).x; | - | ||||||||||||||||||||||||
383 | dy = to_y - (*worker).y; | - | ||||||||||||||||||||||||
384 | - | |||||||||||||||||||||||||
385 | - | |||||||||||||||||||||||||
386 | - | |||||||||||||||||||||||||
387 | - | |||||||||||||||||||||||||
388 | - | |||||||||||||||||||||||||
389 | { | - | ||||||||||||||||||||||||
390 | TCoord min, max; | - | ||||||||||||||||||||||||
391 | - | |||||||||||||||||||||||||
392 | - | |||||||||||||||||||||||||
393 | min = ey1; | - | ||||||||||||||||||||||||
394 | max = ey2; | - | ||||||||||||||||||||||||
395 | if ( ey1 > ey2
| 0 | ||||||||||||||||||||||||
396 | { | - | ||||||||||||||||||||||||
397 | min = ey2; | - | ||||||||||||||||||||||||
398 | max = ey1; | - | ||||||||||||||||||||||||
399 | } never executed: end of block | 0 | ||||||||||||||||||||||||
400 | if ( min >= (*worker).max_ey
| 0 | ||||||||||||||||||||||||
401 | goto never executed: End;goto End; never executed: goto End; | 0 | ||||||||||||||||||||||||
402 | } | - | ||||||||||||||||||||||||
403 | - | |||||||||||||||||||||||||
404 | - | |||||||||||||||||||||||||
405 | if ( ey1 == ey2
| 0 | ||||||||||||||||||||||||
406 | { | - | ||||||||||||||||||||||||
407 | gray_render_scanline( worker, ey1, (*worker).x, fy1, to_x, fy2 ); | - | ||||||||||||||||||||||||
408 | goto never executed: End;goto End; never executed: goto End; | 0 | ||||||||||||||||||||||||
409 | } | - | ||||||||||||||||||||||||
410 | - | |||||||||||||||||||||||||
411 | - | |||||||||||||||||||||||||
412 | if ( dx == 0
| 0 | ||||||||||||||||||||||||
413 | { | - | ||||||||||||||||||||||||
414 | TCoord ex = ( (TCoord)( ((*worker).x) >> 8 ) ); | - | ||||||||||||||||||||||||
415 | TCoord two_fx = (TCoord)( ( (*worker).x - ( (TPos)(ex) * ( 1 << 8 ) ) ) << 1 ); | - | ||||||||||||||||||||||||
416 | TPos area, max_ey1; | - | ||||||||||||||||||||||||
417 | - | |||||||||||||||||||||||||
418 | - | |||||||||||||||||||||||||
419 | first = ( 1L << 8 ); | - | ||||||||||||||||||||||||
420 | if ( dy < 0
| 0 | ||||||||||||||||||||||||
421 | first = 0; never executed: first = 0; | 0 | ||||||||||||||||||||||||
422 | - | |||||||||||||||||||||||||
423 | delta = (int)( first - fy1 ); | - | ||||||||||||||||||||||||
424 | (*worker).area += (TArea)two_fx * delta; | - | ||||||||||||||||||||||||
425 | (*worker).cover += delta; | - | ||||||||||||||||||||||||
426 | - | |||||||||||||||||||||||||
427 | delta = (int)( first + first - ( 1L << 8 ) ); | - | ||||||||||||||||||||||||
428 | area = (TArea)two_fx * delta; | - | ||||||||||||||||||||||||
429 | max_ey1 = (*worker).count_ey + (*worker).min_ey; | - | ||||||||||||||||||||||||
430 | if (dy < 0
| 0 | ||||||||||||||||||||||||
431 | if (ey1 > max_ey1
| 0 | ||||||||||||||||||||||||
432 | ey1 = (
| 0 | ||||||||||||||||||||||||
433 | gray_set_cell( &(*worker), ex, ey1 ); | - | ||||||||||||||||||||||||
434 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
435 | ey1--; | - | ||||||||||||||||||||||||
436 | gray_set_cell( &(*worker), ex, ey1 ); | - | ||||||||||||||||||||||||
437 | } never executed: end of block | 0 | ||||||||||||||||||||||||
438 | while ( ey1 > ey2
| 0 | ||||||||||||||||||||||||
439 | { | - | ||||||||||||||||||||||||
440 | (*worker).area += area; | - | ||||||||||||||||||||||||
441 | (*worker).cover += delta; | - | ||||||||||||||||||||||||
442 | ey1--; | - | ||||||||||||||||||||||||
443 | - | |||||||||||||||||||||||||
444 | gray_set_cell( &(*worker), ex, ey1 ); | - | ||||||||||||||||||||||||
445 | } never executed: end of block | 0 | ||||||||||||||||||||||||
446 | if (ey1 != ey2
| 0 | ||||||||||||||||||||||||
447 | ey1 = ey2; | - | ||||||||||||||||||||||||
448 | gray_set_cell( &(*worker), ex, ey1 ); | - | ||||||||||||||||||||||||
449 | } never executed: end of block | 0 | ||||||||||||||||||||||||
450 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
451 | if (ey1 < (*worker).min_ey
| 0 | ||||||||||||||||||||||||
452 | ey1 = ((*
| 0 | ||||||||||||||||||||||||
453 | gray_set_cell( &(*worker), ex, ey1 ); | - | ||||||||||||||||||||||||
454 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
455 | ey1++; | - | ||||||||||||||||||||||||
456 | gray_set_cell( &(*worker), ex, ey1 ); | - | ||||||||||||||||||||||||
457 | } never executed: end of block | 0 | ||||||||||||||||||||||||
458 | while ( ey1 < ey2
| 0 | ||||||||||||||||||||||||
459 | { | - | ||||||||||||||||||||||||
460 | (*worker).area += area; | - | ||||||||||||||||||||||||
461 | (*worker).cover += delta; | - | ||||||||||||||||||||||||
462 | ey1++; | - | ||||||||||||||||||||||||
463 | - | |||||||||||||||||||||||||
464 | gray_set_cell( &(*worker), ex, ey1 ); | - | ||||||||||||||||||||||||
465 | } never executed: end of block | 0 | ||||||||||||||||||||||||
466 | if (ey1 != ey2
| 0 | ||||||||||||||||||||||||
467 | ey1 = ey2; | - | ||||||||||||||||||||||||
468 | gray_set_cell( &(*worker), ex, ey1 ); | - | ||||||||||||||||||||||||
469 | } never executed: end of block | 0 | ||||||||||||||||||||||||
470 | } never executed: end of block | 0 | ||||||||||||||||||||||||
471 | - | |||||||||||||||||||||||||
472 | delta = (int)( fy2 - ( 1L << 8 ) + first ); | - | ||||||||||||||||||||||||
473 | (*worker).area += (TArea)two_fx * delta; | - | ||||||||||||||||||||||||
474 | (*worker).cover += delta; | - | ||||||||||||||||||||||||
475 | - | |||||||||||||||||||||||||
476 | goto never executed: End;goto End; never executed: goto End; | 0 | ||||||||||||||||||||||||
477 | } | - | ||||||||||||||||||||||||
478 | - | |||||||||||||||||||||||||
479 | - | |||||||||||||||||||||||||
480 | p = ( ( 1L << 8 ) - fy1 ) * dx; | - | ||||||||||||||||||||||||
481 | first = ( 1L << 8 ); | - | ||||||||||||||||||||||||
482 | incr = 1; | - | ||||||||||||||||||||||||
483 | - | |||||||||||||||||||||||||
484 | if ( dy < 0
| 0 | ||||||||||||||||||||||||
485 | { | - | ||||||||||||||||||||||||
486 | p = fy1 * dx; | - | ||||||||||||||||||||||||
487 | first = 0; | - | ||||||||||||||||||||||||
488 | incr = -1; | - | ||||||||||||||||||||||||
489 | dy = -dy; | - | ||||||||||||||||||||||||
490 | } never executed: end of block | 0 | ||||||||||||||||||||||||
491 | - | |||||||||||||||||||||||||
492 | delta = (int)( p / dy ); | - | ||||||||||||||||||||||||
493 | mod = (int)( p % dy ); | - | ||||||||||||||||||||||||
494 | if ( mod < 0
| 0 | ||||||||||||||||||||||||
495 | { | - | ||||||||||||||||||||||||
496 | delta--; | - | ||||||||||||||||||||||||
497 | mod += (TCoord)dy; | - | ||||||||||||||||||||||||
498 | } never executed: end of block | 0 | ||||||||||||||||||||||||
499 | - | |||||||||||||||||||||||||
500 | x = (*worker).x + delta; | - | ||||||||||||||||||||||||
501 | gray_render_scanline( worker, ey1, (*worker).x, fy1, x, (TCoord)first ); | - | ||||||||||||||||||||||||
502 | - | |||||||||||||||||||||||||
503 | ey1 += incr; | - | ||||||||||||||||||||||||
504 | gray_set_cell( worker, ( (TCoord)( (x) >> 8 ) ), ey1 ); | - | ||||||||||||||||||||||||
505 | - | |||||||||||||||||||||||||
506 | if ( ey1 != ey2
| 0 | ||||||||||||||||||||||||
507 | { | - | ||||||||||||||||||||||||
508 | p = ( 1L << 8 ) * dx; | - | ||||||||||||||||||||||||
509 | lift = (int)( p / dy ); | - | ||||||||||||||||||||||||
510 | rem = (int)( p % dy ); | - | ||||||||||||||||||||||||
511 | if ( rem < 0
| 0 | ||||||||||||||||||||||||
512 | { | - | ||||||||||||||||||||||||
513 | lift--; | - | ||||||||||||||||||||||||
514 | rem += (int)dy; | - | ||||||||||||||||||||||||
515 | } never executed: end of block | 0 | ||||||||||||||||||||||||
516 | mod -= (int)dy; | - | ||||||||||||||||||||||||
517 | - | |||||||||||||||||||||||||
518 | while ( ey1 != ey2
| 0 | ||||||||||||||||||||||||
519 | { | - | ||||||||||||||||||||||||
520 | delta = lift; | - | ||||||||||||||||||||||||
521 | mod += rem; | - | ||||||||||||||||||||||||
522 | if ( mod >= 0
| 0 | ||||||||||||||||||||||||
523 | { | - | ||||||||||||||||||||||||
524 | mod -= (int)dy; | - | ||||||||||||||||||||||||
525 | delta++; | - | ||||||||||||||||||||||||
526 | } never executed: end of block | 0 | ||||||||||||||||||||||||
527 | - | |||||||||||||||||||||||||
528 | x2 = x + delta; | - | ||||||||||||||||||||||||
529 | gray_render_scanline( worker, ey1, x, | - | ||||||||||||||||||||||||
530 | (TCoord)( ( 1L << 8 ) - first ), x2, | - | ||||||||||||||||||||||||
531 | (TCoord)first ); | - | ||||||||||||||||||||||||
532 | x = x2; | - | ||||||||||||||||||||||||
533 | - | |||||||||||||||||||||||||
534 | ey1 += incr; | - | ||||||||||||||||||||||||
535 | gray_set_cell( worker, ( (TCoord)( (x) >> 8 ) ), ey1 ); | - | ||||||||||||||||||||||||
536 | } never executed: end of block | 0 | ||||||||||||||||||||||||
537 | } never executed: end of block | 0 | ||||||||||||||||||||||||
538 | - | |||||||||||||||||||||||||
539 | gray_render_scanline( worker, ey1, x, | - | ||||||||||||||||||||||||
540 | (TCoord)( ( 1L << 8 ) - first ), to_x, | - | ||||||||||||||||||||||||
541 | fy2 ); | - | ||||||||||||||||||||||||
542 | - | |||||||||||||||||||||||||
543 | End: code before this statement never executed: End: | 0 | ||||||||||||||||||||||||
544 | (*worker).x = to_x; | - | ||||||||||||||||||||||||
545 | (*worker).y = to_y; | - | ||||||||||||||||||||||||
546 | (*worker).last_ey = ( (TPos)(ey2) * ( 1 << 8 ) ); | - | ||||||||||||||||||||||||
547 | } never executed: end of block | 0 | ||||||||||||||||||||||||
548 | - | |||||||||||||||||||||||||
549 | - | |||||||||||||||||||||||||
550 | static void | - | ||||||||||||||||||||||||
551 | gray_split_conic( QT_FT_Vector* base ) | - | ||||||||||||||||||||||||
552 | { | - | ||||||||||||||||||||||||
553 | TPos a, b; | - | ||||||||||||||||||||||||
554 | - | |||||||||||||||||||||||||
555 | - | |||||||||||||||||||||||||
556 | base[4].x = base[2].x; | - | ||||||||||||||||||||||||
557 | b = base[1].x; | - | ||||||||||||||||||||||||
558 | a = base[3].x = ( base[2].x + b ) / 2; | - | ||||||||||||||||||||||||
559 | b = base[1].x = ( base[0].x + b ) / 2; | - | ||||||||||||||||||||||||
560 | base[2].x = ( a + b ) / 2; | - | ||||||||||||||||||||||||
561 | - | |||||||||||||||||||||||||
562 | base[4].y = base[2].y; | - | ||||||||||||||||||||||||
563 | b = base[1].y; | - | ||||||||||||||||||||||||
564 | a = base[3].y = ( base[2].y + b ) / 2; | - | ||||||||||||||||||||||||
565 | b = base[1].y = ( base[0].y + b ) / 2; | - | ||||||||||||||||||||||||
566 | base[2].y = ( a + b ) / 2; | - | ||||||||||||||||||||||||
567 | } never executed: end of block | 0 | ||||||||||||||||||||||||
568 | - | |||||||||||||||||||||||||
569 | - | |||||||||||||||||||||||||
570 | static void | - | ||||||||||||||||||||||||
571 | gray_render_conic( PWorker worker, const QT_FT_Vector* control, | - | ||||||||||||||||||||||||
572 | const QT_FT_Vector* to ) | - | ||||||||||||||||||||||||
573 | { | - | ||||||||||||||||||||||||
574 | TPos dx, dy; | - | ||||||||||||||||||||||||
575 | int top, level; | - | ||||||||||||||||||||||||
576 | int* levels; | - | ||||||||||||||||||||||||
577 | QT_FT_Vector* arc; | - | ||||||||||||||||||||||||
578 | - | |||||||||||||||||||||||||
579 | - | |||||||||||||||||||||||||
580 | dx = ( ((*worker).x) >> ( 8 - 6 ) ) + to->x - ( control->x << 1 ); | - | ||||||||||||||||||||||||
581 | if ( dx < 0
| 0 | ||||||||||||||||||||||||
582 | dx = -dx; never executed: dx = -dx; | 0 | ||||||||||||||||||||||||
583 | dy = ( ((*worker).y) >> ( 8 - 6 ) ) + to->y - ( control->y << 1 ); | - | ||||||||||||||||||||||||
584 | if ( dy < 0
| 0 | ||||||||||||||||||||||||
585 | dy = -dy; never executed: dy = -dy; | 0 | ||||||||||||||||||||||||
586 | if ( dx < dy
| 0 | ||||||||||||||||||||||||
587 | dx = dy; never executed: dx = dy; | 0 | ||||||||||||||||||||||||
588 | - | |||||||||||||||||||||||||
589 | level = 1; | - | ||||||||||||||||||||||||
590 | dx = dx / (*worker).conic_level; | - | ||||||||||||||||||||||||
591 | while ( dx > 0
| 0 | ||||||||||||||||||||||||
592 | { | - | ||||||||||||||||||||||||
593 | dx >>= 2; | - | ||||||||||||||||||||||||
594 | level++; | - | ||||||||||||||||||||||||
595 | } never executed: end of block | 0 | ||||||||||||||||||||||||
596 | - | |||||||||||||||||||||||||
597 | - | |||||||||||||||||||||||||
598 | if ( level <= 1
| 0 | ||||||||||||||||||||||||
599 | { | - | ||||||||||||||||||||||||
600 | - | |||||||||||||||||||||||||
601 | - | |||||||||||||||||||||||||
602 | TPos to_x, to_y, mid_x, mid_y; | - | ||||||||||||||||||||||||
603 | - | |||||||||||||||||||||||||
604 | - | |||||||||||||||||||||||||
605 | to_x = ( (to->x) * ( 1 << ( 8 - 6 ) ) ); | - | ||||||||||||||||||||||||
606 | to_y = ( (to->y) * ( 1 << ( 8 - 6 ) ) ); | - | ||||||||||||||||||||||||
607 | mid_x = ( (*worker).x + to_x + 2 * ( (control->x) * ( 1 << ( 8 - 6 ) ) ) ) / 4; | - | ||||||||||||||||||||||||
608 | mid_y = ( (*worker).y + to_y + 2 * ( (control->y) * ( 1 << ( 8 - 6 ) ) ) ) / 4; | - | ||||||||||||||||||||||||
609 | - | |||||||||||||||||||||||||
610 | gray_render_line( worker, mid_x, mid_y ); | - | ||||||||||||||||||||||||
611 | gray_render_line( worker, to_x, to_y ); | - | ||||||||||||||||||||||||
612 | - | |||||||||||||||||||||||||
613 | return; never executed: return; | 0 | ||||||||||||||||||||||||
614 | } | - | ||||||||||||||||||||||||
615 | - | |||||||||||||||||||||||||
616 | arc = (*worker).bez_stack; | - | ||||||||||||||||||||||||
617 | levels = (*worker).lev_stack; | - | ||||||||||||||||||||||||
618 | top = 0; | - | ||||||||||||||||||||||||
619 | levels[0] = level; | - | ||||||||||||||||||||||||
620 | - | |||||||||||||||||||||||||
621 | arc[0].x = ( (to->x) * ( 1 << ( 8 - 6 ) ) ); | - | ||||||||||||||||||||||||
622 | arc[0].y = ( (to->y) * ( 1 << ( 8 - 6 ) ) ); | - | ||||||||||||||||||||||||
623 | arc[1].x = ( (control->x) * ( 1 << ( 8 - 6 ) ) ); | - | ||||||||||||||||||||||||
624 | arc[1].y = ( (control->y) * ( 1 << ( 8 - 6 ) ) ); | - | ||||||||||||||||||||||||
625 | arc[2].x = (*worker).x; | - | ||||||||||||||||||||||||
626 | arc[2].y = (*worker).y; | - | ||||||||||||||||||||||||
627 | - | |||||||||||||||||||||||||
628 | while ( top >= 0
| 0 | ||||||||||||||||||||||||
629 | { | - | ||||||||||||||||||||||||
630 | level = levels[top]; | - | ||||||||||||||||||||||||
631 | if ( level > 1
| 0 | ||||||||||||||||||||||||
632 | { | - | ||||||||||||||||||||||||
633 | - | |||||||||||||||||||||||||
634 | TPos min, max, y; | - | ||||||||||||||||||||||||
635 | - | |||||||||||||||||||||||||
636 | - | |||||||||||||||||||||||||
637 | min = max = arc[0].y; | - | ||||||||||||||||||||||||
638 | - | |||||||||||||||||||||||||
639 | y = arc[1].y; | - | ||||||||||||||||||||||||
640 | if ( y < min
never executed: min = y; | 0 | ||||||||||||||||||||||||
641 | if ( y > max
never executed: max = y; | 0 | ||||||||||||||||||||||||
642 | - | |||||||||||||||||||||||||
643 | y = arc[2].y; | - | ||||||||||||||||||||||||
644 | if ( y < min
never executed: min = y; | 0 | ||||||||||||||||||||||||
645 | if ( y > max
never executed: max = y; | 0 | ||||||||||||||||||||||||
646 | - | |||||||||||||||||||||||||
647 | if ( (
| 0 | ||||||||||||||||||||||||
648 | goto never executed: Draw;goto Draw; never executed: goto Draw; | 0 | ||||||||||||||||||||||||
649 | - | |||||||||||||||||||||||||
650 | gray_split_conic( arc ); | - | ||||||||||||||||||||||||
651 | arc += 2; | - | ||||||||||||||||||||||||
652 | top++; | - | ||||||||||||||||||||||||
653 | levels[top] = levels[top - 1] = level - 1; | - | ||||||||||||||||||||||||
654 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||
655 | } | - | ||||||||||||||||||||||||
656 | - | |||||||||||||||||||||||||
657 | Draw: code before this statement never executed: Draw: | 0 | ||||||||||||||||||||||||
658 | { | - | ||||||||||||||||||||||||
659 | TPos to_x, to_y, mid_x, mid_y; | - | ||||||||||||||||||||||||
660 | - | |||||||||||||||||||||||||
661 | - | |||||||||||||||||||||||||
662 | to_x = arc[0].x; | - | ||||||||||||||||||||||||
663 | to_y = arc[0].y; | - | ||||||||||||||||||||||||
664 | mid_x = ( (*worker).x + to_x + 2 * arc[1].x ) / 4; | - | ||||||||||||||||||||||||
665 | mid_y = ( (*worker).y + to_y + 2 * arc[1].y ) / 4; | - | ||||||||||||||||||||||||
666 | - | |||||||||||||||||||||||||
667 | gray_render_line( worker, mid_x, mid_y ); | - | ||||||||||||||||||||||||
668 | gray_render_line( worker, to_x, to_y ); | - | ||||||||||||||||||||||||
669 | - | |||||||||||||||||||||||||
670 | top--; | - | ||||||||||||||||||||||||
671 | arc -= 2; | - | ||||||||||||||||||||||||
672 | } | - | ||||||||||||||||||||||||
673 | } never executed: end of block | 0 | ||||||||||||||||||||||||
674 | - | |||||||||||||||||||||||||
675 | return; never executed: return; | 0 | ||||||||||||||||||||||||
676 | } | - | ||||||||||||||||||||||||
677 | - | |||||||||||||||||||||||||
678 | - | |||||||||||||||||||||||||
679 | static void | - | ||||||||||||||||||||||||
680 | gray_split_cubic( QT_FT_Vector* base ) | - | ||||||||||||||||||||||||
681 | { | - | ||||||||||||||||||||||||
682 | TPos a, b, c, d; | - | ||||||||||||||||||||||||
683 | - | |||||||||||||||||||||||||
684 | - | |||||||||||||||||||||||||
685 | base[6].x = base[3].x; | - | ||||||||||||||||||||||||
686 | c = base[1].x; | - | ||||||||||||||||||||||||
687 | d = base[2].x; | - | ||||||||||||||||||||||||
688 | base[1].x = a = ( base[0].x + c ) / 2; | - | ||||||||||||||||||||||||
689 | base[5].x = b = ( base[3].x + d ) / 2; | - | ||||||||||||||||||||||||
690 | c = ( c + d ) / 2; | - | ||||||||||||||||||||||||
691 | base[2].x = a = ( a + c ) / 2; | - | ||||||||||||||||||||||||
692 | base[4].x = b = ( b + c ) / 2; | - | ||||||||||||||||||||||||
693 | base[3].x = ( a + b ) / 2; | - | ||||||||||||||||||||||||
694 | - | |||||||||||||||||||||||||
695 | base[6].y = base[3].y; | - | ||||||||||||||||||||||||
696 | c = base[1].y; | - | ||||||||||||||||||||||||
697 | d = base[2].y; | - | ||||||||||||||||||||||||
698 | base[1].y = a = ( base[0].y + c ) / 2; | - | ||||||||||||||||||||||||
699 | base[5].y = b = ( base[3].y + d ) / 2; | - | ||||||||||||||||||||||||
700 | c = ( c + d ) / 2; | - | ||||||||||||||||||||||||
701 | base[2].y = a = ( a + c ) / 2; | - | ||||||||||||||||||||||||
702 | base[4].y = b = ( b + c ) / 2; | - | ||||||||||||||||||||||||
703 | base[3].y = ( a + b ) / 2; | - | ||||||||||||||||||||||||
704 | } never executed: end of block | 0 | ||||||||||||||||||||||||
705 | - | |||||||||||||||||||||||||
706 | - | |||||||||||||||||||||||||
707 | static void | - | ||||||||||||||||||||||||
708 | gray_render_cubic( PWorker worker, const QT_FT_Vector* control1, | - | ||||||||||||||||||||||||
709 | const QT_FT_Vector* control2, | - | ||||||||||||||||||||||||
710 | const QT_FT_Vector* to ) | - | ||||||||||||||||||||||||
711 | { | - | ||||||||||||||||||||||||
712 | TPos dx, dy, da, db; | - | ||||||||||||||||||||||||
713 | int top, level; | - | ||||||||||||||||||||||||
714 | int* levels; | - | ||||||||||||||||||||||||
715 | QT_FT_Vector* arc; | - | ||||||||||||||||||||||||
716 | - | |||||||||||||||||||||||||
717 | - | |||||||||||||||||||||||||
718 | dx = ( ((*worker).x) >> ( 8 - 6 ) ) + to->x - ( control1->x << 1 ); | - | ||||||||||||||||||||||||
719 | if ( dx < 0
| 0 | ||||||||||||||||||||||||
720 | dx = -dx; never executed: dx = -dx; | 0 | ||||||||||||||||||||||||
721 | dy = ( ((*worker).y) >> ( 8 - 6 ) ) + to->y - ( control1->y << 1 ); | - | ||||||||||||||||||||||||
722 | if ( dy < 0
| 0 | ||||||||||||||||||||||||
723 | dy = -dy; never executed: dy = -dy; | 0 | ||||||||||||||||||||||||
724 | if ( dx < dy
| 0 | ||||||||||||||||||||||||
725 | dx = dy; never executed: dx = dy; | 0 | ||||||||||||||||||||||||
726 | da = dx; | - | ||||||||||||||||||||||||
727 | - | |||||||||||||||||||||||||
728 | dx = ( ((*worker).x) >> ( 8 - 6 ) ) + to->x - 3 * ( control1->x + control2->x ); | - | ||||||||||||||||||||||||
729 | if ( dx < 0
| 0 | ||||||||||||||||||||||||
730 | dx = -dx; never executed: dx = -dx; | 0 | ||||||||||||||||||||||||
731 | dy = ( ((*worker).y) >> ( 8 - 6 ) ) + to->y - 3 * ( control1->y + control2->y ); | - | ||||||||||||||||||||||||
732 | if ( dy < 0
| 0 | ||||||||||||||||||||||||
733 | dy = -dy; never executed: dy = -dy; | 0 | ||||||||||||||||||||||||
734 | if ( dx < dy
| 0 | ||||||||||||||||||||||||
735 | dx = dy; never executed: dx = dy; | 0 | ||||||||||||||||||||||||
736 | db = dx; | - | ||||||||||||||||||||||||
737 | - | |||||||||||||||||||||||||
738 | level = 1; | - | ||||||||||||||||||||||||
739 | da = da / (*worker).cubic_level; | - | ||||||||||||||||||||||||
740 | db = db / (*worker).conic_level; | - | ||||||||||||||||||||||||
741 | while ( da > 0
| 0 | ||||||||||||||||||||||||
742 | { | - | ||||||||||||||||||||||||
743 | da >>= 2; | - | ||||||||||||||||||||||||
744 | db >>= 3; | - | ||||||||||||||||||||||||
745 | level++; | - | ||||||||||||||||||||||||
746 | } never executed: end of block | 0 | ||||||||||||||||||||||||
747 | - | |||||||||||||||||||||||||
748 | if ( level <= 1
| 0 | ||||||||||||||||||||||||
749 | { | - | ||||||||||||||||||||||||
750 | TPos to_x, to_y, mid_x, mid_y; | - | ||||||||||||||||||||||||
751 | - | |||||||||||||||||||||||||
752 | - | |||||||||||||||||||||||||
753 | to_x = ( (to->x) * ( 1 << ( 8 - 6 ) ) ); | - | ||||||||||||||||||||||||
754 | to_y = ( (to->y) * ( 1 << ( 8 - 6 ) ) ); | - | ||||||||||||||||||||||||
755 | mid_x = ( (*worker).x + to_x + | - | ||||||||||||||||||||||||
756 | 3 * ( (control1->x + control2->x) * ( 1 << ( 8 - 6 ) ) ) ) / 8; | - | ||||||||||||||||||||||||
757 | mid_y = ( (*worker).y + to_y + | - | ||||||||||||||||||||||||
758 | 3 * ( (control1->y + control2->y) * ( 1 << ( 8 - 6 ) ) ) ) / 8; | - | ||||||||||||||||||||||||
759 | - | |||||||||||||||||||||||||
760 | gray_render_line( worker, mid_x, mid_y ); | - | ||||||||||||||||||||||||
761 | gray_render_line( worker, to_x, to_y ); | - | ||||||||||||||||||||||||
762 | return; never executed: return; | 0 | ||||||||||||||||||||||||
763 | } | - | ||||||||||||||||||||||||
764 | - | |||||||||||||||||||||||||
765 | arc = (*worker).bez_stack; | - | ||||||||||||||||||||||||
766 | arc[0].x = ( (to->x) * ( 1 << ( 8 - 6 ) ) ); | - | ||||||||||||||||||||||||
767 | arc[0].y = ( (to->y) * ( 1 << ( 8 - 6 ) ) ); | - | ||||||||||||||||||||||||
768 | arc[1].x = ( (control2->x) * ( 1 << ( 8 - 6 ) ) ); | - | ||||||||||||||||||||||||
769 | arc[1].y = ( (control2->y) * ( 1 << ( 8 - 6 ) ) ); | - | ||||||||||||||||||||||||
770 | arc[2].x = ( (control1->x) * ( 1 << ( 8 - 6 ) ) ); | - | ||||||||||||||||||||||||
771 | arc[2].y = ( (control1->y) * ( 1 << ( 8 - 6 ) ) ); | - | ||||||||||||||||||||||||
772 | arc[3].x = (*worker).x; | - | ||||||||||||||||||||||||
773 | arc[3].y = (*worker).y; | - | ||||||||||||||||||||||||
774 | - | |||||||||||||||||||||||||
775 | levels = (*worker).lev_stack; | - | ||||||||||||||||||||||||
776 | top = 0; | - | ||||||||||||||||||||||||
777 | levels[0] = level; | - | ||||||||||||||||||||||||
778 | - | |||||||||||||||||||||||||
779 | while ( top >= 0
| 0 | ||||||||||||||||||||||||
780 | { | - | ||||||||||||||||||||||||
781 | level = levels[top]; | - | ||||||||||||||||||||||||
782 | if ( level > 1
| 0 | ||||||||||||||||||||||||
783 | { | - | ||||||||||||||||||||||||
784 | - | |||||||||||||||||||||||||
785 | TPos min, max, y; | - | ||||||||||||||||||||||||
786 | - | |||||||||||||||||||||||||
787 | - | |||||||||||||||||||||||||
788 | min = max = arc[0].y; | - | ||||||||||||||||||||||||
789 | y = arc[1].y; | - | ||||||||||||||||||||||||
790 | if ( y < min
never executed: min = y; | 0 | ||||||||||||||||||||||||
791 | if ( y > max
never executed: max = y; | 0 | ||||||||||||||||||||||||
792 | y = arc[2].y; | - | ||||||||||||||||||||||||
793 | if ( y < min
never executed: min = y; | 0 | ||||||||||||||||||||||||
794 | if ( y > max
never executed: max = y; | 0 | ||||||||||||||||||||||||
795 | y = arc[3].y; | - | ||||||||||||||||||||||||
796 | if ( y < min
never executed: min = y; | 0 | ||||||||||||||||||||||||
797 | if ( y > max
never executed: max = y; | 0 | ||||||||||||||||||||||||
798 | if ( (
| 0 | ||||||||||||||||||||||||
799 | goto never executed: Draw;goto Draw; never executed: goto Draw; | 0 | ||||||||||||||||||||||||
800 | gray_split_cubic( arc ); | - | ||||||||||||||||||||||||
801 | arc += 3; | - | ||||||||||||||||||||||||
802 | top ++; | - | ||||||||||||||||||||||||
803 | levels[top] = levels[top - 1] = level - 1; | - | ||||||||||||||||||||||||
804 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||
805 | } | - | ||||||||||||||||||||||||
806 | - | |||||||||||||||||||||||||
807 | Draw: code before this statement never executed: Draw: | 0 | ||||||||||||||||||||||||
808 | { | - | ||||||||||||||||||||||||
809 | TPos to_x, to_y, mid_x, mid_y; | - | ||||||||||||||||||||||||
810 | - | |||||||||||||||||||||||||
811 | - | |||||||||||||||||||||||||
812 | to_x = arc[0].x; | - | ||||||||||||||||||||||||
813 | to_y = arc[0].y; | - | ||||||||||||||||||||||||
814 | mid_x = ( (*worker).x + to_x + 3 * ( arc[1].x + arc[2].x ) ) / 8; | - | ||||||||||||||||||||||||
815 | mid_y = ( (*worker).y + to_y + 3 * ( arc[1].y + arc[2].y ) ) / 8; | - | ||||||||||||||||||||||||
816 | - | |||||||||||||||||||||||||
817 | gray_render_line( worker, mid_x, mid_y ); | - | ||||||||||||||||||||||||
818 | gray_render_line( worker, to_x, to_y ); | - | ||||||||||||||||||||||||
819 | top --; | - | ||||||||||||||||||||||||
820 | arc -= 3; | - | ||||||||||||||||||||||||
821 | } | - | ||||||||||||||||||||||||
822 | } never executed: end of block | 0 | ||||||||||||||||||||||||
823 | - | |||||||||||||||||||||||||
824 | return; never executed: return; | 0 | ||||||||||||||||||||||||
825 | } | - | ||||||||||||||||||||||||
826 | - | |||||||||||||||||||||||||
827 | - | |||||||||||||||||||||||||
828 | - | |||||||||||||||||||||||||
829 | static int | - | ||||||||||||||||||||||||
830 | gray_move_to( const QT_FT_Vector* to, | - | ||||||||||||||||||||||||
831 | PWorker worker ) | - | ||||||||||||||||||||||||
832 | { | - | ||||||||||||||||||||||||
833 | TPos x, y; | - | ||||||||||||||||||||||||
834 | - | |||||||||||||||||||||||||
835 | - | |||||||||||||||||||||||||
836 | - | |||||||||||||||||||||||||
837 | gray_record_cell( worker ); | - | ||||||||||||||||||||||||
838 | - | |||||||||||||||||||||||||
839 | - | |||||||||||||||||||||||||
840 | x = ( (to->x) * ( 1 << ( 8 - 6 ) ) ); | - | ||||||||||||||||||||||||
841 | y = ( (to->y) * ( 1 << ( 8 - 6 ) ) ); | - | ||||||||||||||||||||||||
842 | - | |||||||||||||||||||||||||
843 | gray_start_cell( worker, ( (TCoord)( (x) >> 8 ) ), ( (TCoord)( (y) >> 8 ) ) ); | - | ||||||||||||||||||||||||
844 | - | |||||||||||||||||||||||||
845 | worker->x = x; | - | ||||||||||||||||||||||||
846 | worker->y = y; | - | ||||||||||||||||||||||||
847 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||
848 | } | - | ||||||||||||||||||||||||
849 | - | |||||||||||||||||||||||||
850 | static void | - | ||||||||||||||||||||||||
851 | gray_render_span( int count, | - | ||||||||||||||||||||||||
852 | const QT_FT_Span* spans, | - | ||||||||||||||||||||||||
853 | PWorker worker ) | - | ||||||||||||||||||||||||
854 | { | - | ||||||||||||||||||||||||
855 | unsigned char* p; | - | ||||||||||||||||||||||||
856 | QT_FT_Bitmap* map = &worker->target; | - | ||||||||||||||||||||||||
857 | - | |||||||||||||||||||||||||
858 | for ( ; count > 0
| 0 | ||||||||||||||||||||||||
859 | { | - | ||||||||||||||||||||||||
860 | unsigned char coverage = spans->coverage; | - | ||||||||||||||||||||||||
861 | - | |||||||||||||||||||||||||
862 | - | |||||||||||||||||||||||||
863 | p = (unsigned char*)map->buffer - spans->y * map->pitch; | - | ||||||||||||||||||||||||
864 | if ( map->pitch >= 0
| 0 | ||||||||||||||||||||||||
865 | p += ( map->rows - 1 ) * map->pitch; never executed: p += ( map->rows - 1 ) * map->pitch; | 0 | ||||||||||||||||||||||||
866 | - | |||||||||||||||||||||||||
867 | - | |||||||||||||||||||||||||
868 | if ( coverage
| 0 | ||||||||||||||||||||||||
869 | { | - | ||||||||||||||||||||||||
870 | - | |||||||||||||||||||||||||
871 | - | |||||||||||||||||||||||||
872 | - | |||||||||||||||||||||||||
873 | - | |||||||||||||||||||||||||
874 | if ( spans->len >= 8
| 0 | ||||||||||||||||||||||||
875 | memset( p + spans->x, (unsigned char)coverage, spans->len ); never executed: memset( p + spans->x, (unsigned char)coverage, spans->len ); | 0 | ||||||||||||||||||||||||
876 | else | - | ||||||||||||||||||||||||
877 | { | - | ||||||||||||||||||||||||
878 | unsigned char* q = p + spans->x; | - | ||||||||||||||||||||||||
879 | - | |||||||||||||||||||||||||
880 | - | |||||||||||||||||||||||||
881 | switch ( spans->len ) | - | ||||||||||||||||||||||||
882 | { | - | ||||||||||||||||||||||||
883 | case never executed: 7:case 7: never executed: *q++ = (unsigned char)coverage;case 7: | 0 | ||||||||||||||||||||||||
884 | case never executed: 6:case 6: never executed: case 6: code before this statement never executed: *q++ = (unsigned char)coverage;case 6: | 0 | ||||||||||||||||||||||||
885 | case never executed: 5:case 5: never executed: case 5: code before this statement never executed: *q++ = (unsigned char)coverage;case 5: | 0 | ||||||||||||||||||||||||
886 | case never executed: 4:case 4: never executed: case 4: code before this statement never executed: *q++ = (unsigned char)coverage;case 4: | 0 | ||||||||||||||||||||||||
887 | case never executed: 3:case 3: never executed: case 3: code before this statement never executed: *q++ = (unsigned char)coverage;case 3: | 0 | ||||||||||||||||||||||||
888 | case never executed: 2:case 2: never executed: case 2: code before this statement never executed: *q++ = (unsigned char)coverage;case 2: | 0 | ||||||||||||||||||||||||
889 | case never executed: 1:case 1: never executed: case 1: code before this statement never executed: *q = (unsigned char)coverage;case 1: | 0 | ||||||||||||||||||||||||
890 | default never executed: :default: never executed: default: code before this statement never executed: default: | 0 | ||||||||||||||||||||||||
891 | ; | - | ||||||||||||||||||||||||
892 | } never executed: end of block | 0 | ||||||||||||||||||||||||
893 | } | - | ||||||||||||||||||||||||
894 | } | - | ||||||||||||||||||||||||
895 | } never executed: end of block | 0 | ||||||||||||||||||||||||
896 | } never executed: end of block | 0 | ||||||||||||||||||||||||
897 | - | |||||||||||||||||||||||||
898 | - | |||||||||||||||||||||||||
899 | static void | - | ||||||||||||||||||||||||
900 | gray_hline( PWorker worker, TCoord x, | - | ||||||||||||||||||||||||
901 | TCoord y, | - | ||||||||||||||||||||||||
902 | TPos area, | - | ||||||||||||||||||||||||
903 | int acount ) | - | ||||||||||||||||||||||||
904 | { | - | ||||||||||||||||||||||||
905 | QT_FT_Span* span; | - | ||||||||||||||||||||||||
906 | int coverage; | - | ||||||||||||||||||||||||
907 | int skip; | - | ||||||||||||||||||||||||
908 | - | |||||||||||||||||||||||||
909 | - | |||||||||||||||||||||||||
910 | - | |||||||||||||||||||||||||
911 | - | |||||||||||||||||||||||||
912 | - | |||||||||||||||||||||||||
913 | - | |||||||||||||||||||||||||
914 | - | |||||||||||||||||||||||||
915 | coverage = (int)( area >> ( 8 * 2 + 1 - 8 ) ); | - | ||||||||||||||||||||||||
916 | - | |||||||||||||||||||||||||
917 | if ( coverage < 0
| 0 | ||||||||||||||||||||||||
918 | coverage = -coverage; never executed: coverage = -coverage; | 0 | ||||||||||||||||||||||||
919 | - | |||||||||||||||||||||||||
920 | if ( (*
| 0 | ||||||||||||||||||||||||
921 | { | - | ||||||||||||||||||||||||
922 | coverage &= 511; | - | ||||||||||||||||||||||||
923 | - | |||||||||||||||||||||||||
924 | if ( coverage > 256
| 0 | ||||||||||||||||||||||||
925 | coverage = 512 - coverage; never executed: coverage = 512 - coverage; | 0 | ||||||||||||||||||||||||
926 | else if ( coverage == 256
| 0 | ||||||||||||||||||||||||
927 | coverage = 255; never executed: coverage = 255; | 0 | ||||||||||||||||||||||||
928 | } never executed: end of block | 0 | ||||||||||||||||||||||||
929 | else | - | ||||||||||||||||||||||||
930 | { | - | ||||||||||||||||||||||||
931 | - | |||||||||||||||||||||||||
932 | if ( coverage >= 256
| 0 | ||||||||||||||||||||||||
933 | coverage = 255; never executed: coverage = 255; | 0 | ||||||||||||||||||||||||
934 | } never executed: end of block | 0 | ||||||||||||||||||||||||
935 | - | |||||||||||||||||||||||||
936 | y += (TCoord)(*worker).min_ey; | - | ||||||||||||||||||||||||
937 | x += (TCoord)(*worker).min_ex; | - | ||||||||||||||||||||||||
938 | - | |||||||||||||||||||||||||
939 | - | |||||||||||||||||||||||||
940 | if ( x >= 32768
| 0 | ||||||||||||||||||||||||
941 | x = 32767; never executed: x = 32767; | 0 | ||||||||||||||||||||||||
942 | - | |||||||||||||||||||||||||
943 | if ( coverage
| 0 | ||||||||||||||||||||||||
944 | { | - | ||||||||||||||||||||||||
945 | - | |||||||||||||||||||||||||
946 | span = (*worker).gray_spans + (*worker).num_gray_spans - 1; | - | ||||||||||||||||||||||||
947 | if ( (*
| 0 | ||||||||||||||||||||||||
948 | span->y == y
| 0 | ||||||||||||||||||||||||
949 | (
| 0 | ||||||||||||||||||||||||
950 | span->coverage == coverage
| 0 | ||||||||||||||||||||||||
951 | { | - | ||||||||||||||||||||||||
952 | span->len = (unsigned short)( span->len + acount ); | - | ||||||||||||||||||||||||
953 | return; never executed: return; | 0 | ||||||||||||||||||||||||
954 | } | - | ||||||||||||||||||||||||
955 | - | |||||||||||||||||||||||||
956 | if ( (*
| 0 | ||||||||||||||||||||||||
957 | { | - | ||||||||||||||||||||||||
958 | if ( (*
| 0 | ||||||||||||||||||||||||
959 | { | - | ||||||||||||||||||||||||
960 | skip = (*
| 0 | ||||||||||||||||||||||||
961 | (*worker).render_span( (*worker).num_gray_spans - skip, | - | ||||||||||||||||||||||||
962 | (*worker).gray_spans + skip, | - | ||||||||||||||||||||||||
963 | (*worker).render_span_data ); | - | ||||||||||||||||||||||||
964 | } never executed: end of block | 0 | ||||||||||||||||||||||||
965 | - | |||||||||||||||||||||||||
966 | (*worker).skip_spans -= (*worker).num_gray_spans; | - | ||||||||||||||||||||||||
967 | (*worker).num_gray_spans = 0; | - | ||||||||||||||||||||||||
968 | - | |||||||||||||||||||||||||
969 | span = (*worker).gray_spans; | - | ||||||||||||||||||||||||
970 | } never executed: end of block | 0 | ||||||||||||||||||||||||
971 | else | - | ||||||||||||||||||||||||
972 | span++; never executed: span++; | 0 | ||||||||||||||||||||||||
973 | - | |||||||||||||||||||||||||
974 | - | |||||||||||||||||||||||||
975 | span->x = (short)x; | - | ||||||||||||||||||||||||
976 | span->len = (unsigned short)acount; | - | ||||||||||||||||||||||||
977 | span->y = (short)y; | - | ||||||||||||||||||||||||
978 | span->coverage = (unsigned char)coverage; | - | ||||||||||||||||||||||||
979 | - | |||||||||||||||||||||||||
980 | (*worker).num_gray_spans++; | - | ||||||||||||||||||||||||
981 | } never executed: end of block | 0 | ||||||||||||||||||||||||
982 | } never executed: end of block | 0 | ||||||||||||||||||||||||
983 | static void | - | ||||||||||||||||||||||||
984 | gray_sweep( PWorker worker, const QT_FT_Bitmap* target ) | - | ||||||||||||||||||||||||
985 | { | - | ||||||||||||||||||||||||
986 | int yindex; | - | ||||||||||||||||||||||||
987 | - | |||||||||||||||||||||||||
988 | (target) = (target); | - | ||||||||||||||||||||||||
989 | - | |||||||||||||||||||||||||
990 | - | |||||||||||||||||||||||||
991 | if ( (*
| 0 | ||||||||||||||||||||||||
992 | return; never executed: return; | 0 | ||||||||||||||||||||||||
993 | - | |||||||||||||||||||||||||
994 | for ( yindex = 0; yindex < (*worker).ycount
| 0 | ||||||||||||||||||||||||
995 | { | - | ||||||||||||||||||||||||
996 | PCell cell = (*worker).ycells[yindex]; | - | ||||||||||||||||||||||||
997 | TCoord cover = 0; | - | ||||||||||||||||||||||||
998 | TCoord x = 0; | - | ||||||||||||||||||||||||
999 | - | |||||||||||||||||||||||||
1000 | - | |||||||||||||||||||||||||
1001 | for ( ; cell != ((void *)0)
| 0 | ||||||||||||||||||||||||
1002 | { | - | ||||||||||||||||||||||||
1003 | TArea area; | - | ||||||||||||||||||||||||
1004 | - | |||||||||||||||||||||||||
1005 | - | |||||||||||||||||||||||||
1006 | if ( cell->x > x
| 0 | ||||||||||||||||||||||||
1007 | gray_hline( worker, x, yindex, cover * ( ( 1L << 8 ) * 2 ), never executed: gray_hline( worker, x, yindex, cover * ( ( 1L << 8 ) * 2 ), cell->x - x ); | 0 | ||||||||||||||||||||||||
1008 | cell->x - x ); never executed: gray_hline( worker, x, yindex, cover * ( ( 1L << 8 ) * 2 ), cell->x - x ); | 0 | ||||||||||||||||||||||||
1009 | - | |||||||||||||||||||||||||
1010 | cover += cell->cover; | - | ||||||||||||||||||||||||
1011 | area = cover * ( ( 1L << 8 ) * 2 ) - cell->area; | - | ||||||||||||||||||||||||
1012 | - | |||||||||||||||||||||||||
1013 | if ( area != 0
| 0 | ||||||||||||||||||||||||
1014 | gray_hline( worker, cell->x, yindex, area, 1 ); never executed: gray_hline( worker, cell->x, yindex, area, 1 ); | 0 | ||||||||||||||||||||||||
1015 | - | |||||||||||||||||||||||||
1016 | x = cell->x + 1; | - | ||||||||||||||||||||||||
1017 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1018 | - | |||||||||||||||||||||||||
1019 | if ( (*
| 0 | ||||||||||||||||||||||||
1020 | gray_hline( worker, x, yindex, cover * ( ( 1L << 8 ) * 2 ), never executed: gray_hline( worker, x, yindex, cover * ( ( 1L << 8 ) * 2 ), (*worker).count_ex - x ); | 0 | ||||||||||||||||||||||||
1021 | (*worker).count_ex - x ); never executed: gray_hline( worker, x, yindex, cover * ( ( 1L << 8 ) * 2 ), (*worker).count_ex - x ); | 0 | ||||||||||||||||||||||||
1022 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1023 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1024 | static | - | ||||||||||||||||||||||||
1025 | int QT_FT_Outline_Decompose( const QT_FT_Outline* outline, | - | ||||||||||||||||||||||||
1026 | void* user ) | - | ||||||||||||||||||||||||
1027 | { | - | ||||||||||||||||||||||||
1028 | - | |||||||||||||||||||||||||
1029 | - | |||||||||||||||||||||||||
1030 | - | |||||||||||||||||||||||||
1031 | QT_FT_Vector v_last; | - | ||||||||||||||||||||||||
1032 | QT_FT_Vector v_control; | - | ||||||||||||||||||||||||
1033 | QT_FT_Vector v_start; | - | ||||||||||||||||||||||||
1034 | - | |||||||||||||||||||||||||
1035 | QT_FT_Vector* point; | - | ||||||||||||||||||||||||
1036 | QT_FT_Vector* limit; | - | ||||||||||||||||||||||||
1037 | char* tags; | - | ||||||||||||||||||||||||
1038 | - | |||||||||||||||||||||||||
1039 | int n; | - | ||||||||||||||||||||||||
1040 | int first; | - | ||||||||||||||||||||||||
1041 | int error; | - | ||||||||||||||||||||||||
1042 | char tag; | - | ||||||||||||||||||||||||
1043 | - | |||||||||||||||||||||||||
1044 | first = 0; | - | ||||||||||||||||||||||||
1045 | - | |||||||||||||||||||||||||
1046 | for ( n = 0; n < outline->n_contours
| 0 | ||||||||||||||||||||||||
1047 | { | - | ||||||||||||||||||||||||
1048 | int last; | - | ||||||||||||||||||||||||
1049 | - | |||||||||||||||||||||||||
1050 | - | |||||||||||||||||||||||||
1051 | last = outline->contours[n]; | - | ||||||||||||||||||||||||
1052 | limit = outline->points + last; | - | ||||||||||||||||||||||||
1053 | - | |||||||||||||||||||||||||
1054 | v_start = outline->points[first]; | - | ||||||||||||||||||||||||
1055 | v_last = outline->points[last]; | - | ||||||||||||||||||||||||
1056 | - | |||||||||||||||||||||||||
1057 | v_start.x = (v_start.x); | - | ||||||||||||||||||||||||
1058 | v_start.y = (v_start.y); | - | ||||||||||||||||||||||||
1059 | - | |||||||||||||||||||||||||
1060 | v_last.x = (v_last.x); | - | ||||||||||||||||||||||||
1061 | v_last.y = (v_last.y); | - | ||||||||||||||||||||||||
1062 | - | |||||||||||||||||||||||||
1063 | v_control = v_start; | - | ||||||||||||||||||||||||
1064 | - | |||||||||||||||||||||||||
1065 | point = outline->points + first; | - | ||||||||||||||||||||||||
1066 | tags = outline->tags + first; | - | ||||||||||||||||||||||||
1067 | tag = ( tags[0] & 3 ); | - | ||||||||||||||||||||||||
1068 | - | |||||||||||||||||||||||||
1069 | - | |||||||||||||||||||||||||
1070 | if ( tag == 2
| 0 | ||||||||||||||||||||||||
1071 | goto never executed: Invalid_Outline;goto Invalid_Outline; never executed: goto Invalid_Outline; | 0 | ||||||||||||||||||||||||
1072 | - | |||||||||||||||||||||||||
1073 | - | |||||||||||||||||||||||||
1074 | if ( tag == 0
| 0 | ||||||||||||||||||||||||
1075 | { | - | ||||||||||||||||||||||||
1076 | - | |||||||||||||||||||||||||
1077 | if ( (
| 0 | ||||||||||||||||||||||||
1078 | { | - | ||||||||||||||||||||||||
1079 | - | |||||||||||||||||||||||||
1080 | v_start = v_last; | - | ||||||||||||||||||||||||
1081 | limit--; | - | ||||||||||||||||||||||||
1082 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1083 | else | - | ||||||||||||||||||||||||
1084 | { | - | ||||||||||||||||||||||||
1085 | - | |||||||||||||||||||||||||
1086 | - | |||||||||||||||||||||||||
1087 | - | |||||||||||||||||||||||||
1088 | v_start.x = ( v_start.x + v_last.x ) / 2; | - | ||||||||||||||||||||||||
1089 | v_start.y = ( v_start.y + v_last.y ) / 2; | - | ||||||||||||||||||||||||
1090 | - | |||||||||||||||||||||||||
1091 | v_last = v_start; | - | ||||||||||||||||||||||||
1092 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1093 | point--; | - | ||||||||||||||||||||||||
1094 | tags--; | - | ||||||||||||||||||||||||
1095 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1096 | - | |||||||||||||||||||||||||
1097 | error = gray_move_to( &v_start, user ); | - | ||||||||||||||||||||||||
1098 | if ( error
| 0 | ||||||||||||||||||||||||
1099 | goto never executed: Exit;goto Exit; never executed: goto Exit; | 0 | ||||||||||||||||||||||||
1100 | - | |||||||||||||||||||||||||
1101 | while ( point < limit
| 0 | ||||||||||||||||||||||||
1102 | { | - | ||||||||||||||||||||||||
1103 | point++; | - | ||||||||||||||||||||||||
1104 | tags++; | - | ||||||||||||||||||||||||
1105 | - | |||||||||||||||||||||||||
1106 | tag = ( tags[0] & 3 ); | - | ||||||||||||||||||||||||
1107 | switch ( tag ) | - | ||||||||||||||||||||||||
1108 | { | - | ||||||||||||||||||||||||
1109 | case never executed: 1:case 1: never executed: case 1: | 0 | ||||||||||||||||||||||||
1110 | { | - | ||||||||||||||||||||||||
1111 | QT_FT_Vector vec; | - | ||||||||||||||||||||||||
1112 | - | |||||||||||||||||||||||||
1113 | - | |||||||||||||||||||||||||
1114 | vec.x = (point->x); | - | ||||||||||||||||||||||||
1115 | vec.y = (point->y); | - | ||||||||||||||||||||||||
1116 | - | |||||||||||||||||||||||||
1117 | gray_render_line(user, ( (vec.x) * ( 1 << ( 8 - 6 ) ) ), ( (vec.y) * ( 1 << ( 8 - 6 ) ) )); | - | ||||||||||||||||||||||||
1118 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||
1119 | } | - | ||||||||||||||||||||||||
1120 | - | |||||||||||||||||||||||||
1121 | case never executed: 0:case 0: never executed: case 0: | 0 | ||||||||||||||||||||||||
1122 | { | - | ||||||||||||||||||||||||
1123 | v_control.x = (point->x); | - | ||||||||||||||||||||||||
1124 | v_control.y = (point->y); | - | ||||||||||||||||||||||||
1125 | - | |||||||||||||||||||||||||
1126 | Do_Conic: code before this statement never executed: Do_Conic: | 0 | ||||||||||||||||||||||||
1127 | if ( point < limit
| 0 | ||||||||||||||||||||||||
1128 | { | - | ||||||||||||||||||||||||
1129 | QT_FT_Vector vec; | - | ||||||||||||||||||||||||
1130 | QT_FT_Vector v_middle; | - | ||||||||||||||||||||||||
1131 | - | |||||||||||||||||||||||||
1132 | - | |||||||||||||||||||||||||
1133 | point++; | - | ||||||||||||||||||||||||
1134 | tags++; | - | ||||||||||||||||||||||||
1135 | tag = ( tags[0] & 3 ); | - | ||||||||||||||||||||||||
1136 | - | |||||||||||||||||||||||||
1137 | vec.x = (point->x); | - | ||||||||||||||||||||||||
1138 | vec.y = (point->y); | - | ||||||||||||||||||||||||
1139 | - | |||||||||||||||||||||||||
1140 | if ( tag == 1
| 0 | ||||||||||||||||||||||||
1141 | { | - | ||||||||||||||||||||||||
1142 | gray_render_conic(user, &v_control, &vec); | - | ||||||||||||||||||||||||
1143 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||
1144 | } | - | ||||||||||||||||||||||||
1145 | - | |||||||||||||||||||||||||
1146 | if ( tag != 0
| 0 | ||||||||||||||||||||||||
1147 | goto never executed: Invalid_Outline;goto Invalid_Outline; never executed: goto Invalid_Outline; | 0 | ||||||||||||||||||||||||
1148 | - | |||||||||||||||||||||||||
1149 | v_middle.x = ( v_control.x + vec.x ) / 2; | - | ||||||||||||||||||||||||
1150 | v_middle.y = ( v_control.y + vec.y ) / 2; | - | ||||||||||||||||||||||||
1151 | - | |||||||||||||||||||||||||
1152 | gray_render_conic(user, &v_control, &v_middle); | - | ||||||||||||||||||||||||
1153 | v_control = vec; | - | ||||||||||||||||||||||||
1154 | goto never executed: Do_Conic;goto Do_Conic; never executed: goto Do_Conic; | 0 | ||||||||||||||||||||||||
1155 | } | - | ||||||||||||||||||||||||
1156 | - | |||||||||||||||||||||||||
1157 | gray_render_conic(user, &v_control, &v_start); | - | ||||||||||||||||||||||||
1158 | goto never executed: Close;goto Close; never executed: goto Close; | 0 | ||||||||||||||||||||||||
1159 | } | - | ||||||||||||||||||||||||
1160 | - | |||||||||||||||||||||||||
1161 | default never executed: :default: never executed: default: | 0 | ||||||||||||||||||||||||
1162 | { | - | ||||||||||||||||||||||||
1163 | QT_FT_Vector vec1, vec2; | - | ||||||||||||||||||||||||
1164 | - | |||||||||||||||||||||||||
1165 | - | |||||||||||||||||||||||||
1166 | if ( point + 1 > limit
| 0 | ||||||||||||||||||||||||
1167 | (
| 0 | ||||||||||||||||||||||||
1168 | goto never executed: Invalid_Outline;goto Invalid_Outline; never executed: goto Invalid_Outline; | 0 | ||||||||||||||||||||||||
1169 | - | |||||||||||||||||||||||||
1170 | point += 2; | - | ||||||||||||||||||||||||
1171 | tags += 2; | - | ||||||||||||||||||||||||
1172 | - | |||||||||||||||||||||||||
1173 | vec1.x = (point[-2].x); | - | ||||||||||||||||||||||||
1174 | vec1.y = (point[-2].y); | - | ||||||||||||||||||||||||
1175 | - | |||||||||||||||||||||||||
1176 | vec2.x = (point[-1].x); | - | ||||||||||||||||||||||||
1177 | vec2.y = (point[-1].y); | - | ||||||||||||||||||||||||
1178 | - | |||||||||||||||||||||||||
1179 | if ( point <= limit
| 0 | ||||||||||||||||||||||||
1180 | { | - | ||||||||||||||||||||||||
1181 | QT_FT_Vector vec; | - | ||||||||||||||||||||||||
1182 | - | |||||||||||||||||||||||||
1183 | - | |||||||||||||||||||||||||
1184 | vec.x = (point->x); | - | ||||||||||||||||||||||||
1185 | vec.y = (point->y); | - | ||||||||||||||||||||||||
1186 | - | |||||||||||||||||||||||||
1187 | gray_render_cubic(user, &vec1, &vec2, &vec); | - | ||||||||||||||||||||||||
1188 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||
1189 | } | - | ||||||||||||||||||||||||
1190 | - | |||||||||||||||||||||||||
1191 | gray_render_cubic(user, &vec1, &vec2, &v_start); | - | ||||||||||||||||||||||||
1192 | goto never executed: Close;goto Close; never executed: goto Close; | 0 | ||||||||||||||||||||||||
1193 | } | - | ||||||||||||||||||||||||
1194 | } | - | ||||||||||||||||||||||||
1195 | } | - | ||||||||||||||||||||||||
1196 | - | |||||||||||||||||||||||||
1197 | - | |||||||||||||||||||||||||
1198 | gray_render_line(user, ( (v_start.x) * ( 1 << ( 8 - 6 ) ) ), ( (v_start.y) * ( 1 << ( 8 - 6 ) ) )); | - | ||||||||||||||||||||||||
1199 | - | |||||||||||||||||||||||||
1200 | Close: code before this statement never executed: Close: | 0 | ||||||||||||||||||||||||
1201 | first = last + 1; | - | ||||||||||||||||||||||||
1202 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1203 | - | |||||||||||||||||||||||||
1204 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||
1205 | - | |||||||||||||||||||||||||
1206 | Exit: | - | ||||||||||||||||||||||||
1207 | return never executed: error;return error; never executed: return error; | 0 | ||||||||||||||||||||||||
1208 | - | |||||||||||||||||||||||||
1209 | Invalid_Outline: | - | ||||||||||||||||||||||||
1210 | return never executed: -1;return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||
1211 | } | - | ||||||||||||||||||||||||
1212 | - | |||||||||||||||||||||||||
1213 | typedef struct TBand_ | - | ||||||||||||||||||||||||
1214 | { | - | ||||||||||||||||||||||||
1215 | TPos min, max; | - | ||||||||||||||||||||||||
1216 | - | |||||||||||||||||||||||||
1217 | } TBand; | - | ||||||||||||||||||||||||
1218 | - | |||||||||||||||||||||||||
1219 | - | |||||||||||||||||||||||||
1220 | static int | - | ||||||||||||||||||||||||
1221 | gray_convert_glyph_inner( PWorker worker ) | - | ||||||||||||||||||||||||
1222 | { | - | ||||||||||||||||||||||||
1223 | volatile int error = 0; | - | ||||||||||||||||||||||||
1224 | - | |||||||||||||||||||||||||
1225 | if ( _setjmp ((*worker).jump_buffer) == 0
| 0 | ||||||||||||||||||||||||
1226 | { | - | ||||||||||||||||||||||||
1227 | error = QT_FT_Outline_Decompose( &(*worker).outline, &(*worker) ); | - | ||||||||||||||||||||||||
1228 | gray_record_cell( worker ); | - | ||||||||||||||||||||||||
1229 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1230 | else | - | ||||||||||||||||||||||||
1231 | { | - | ||||||||||||||||||||||||
1232 | error = -4; | - | ||||||||||||||||||||||||
1233 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1234 | - | |||||||||||||||||||||||||
1235 | return never executed: error;return error; never executed: return error; | 0 | ||||||||||||||||||||||||
1236 | } | - | ||||||||||||||||||||||||
1237 | - | |||||||||||||||||||||||||
1238 | - | |||||||||||||||||||||||||
1239 | static int | - | ||||||||||||||||||||||||
1240 | gray_convert_glyph( PWorker worker ) | - | ||||||||||||||||||||||||
1241 | { | - | ||||||||||||||||||||||||
1242 | TBand bands[40]; | - | ||||||||||||||||||||||||
1243 | TBand* volatile band; | - | ||||||||||||||||||||||||
1244 | int volatile n, num_bands; | - | ||||||||||||||||||||||||
1245 | TPos volatile min, max, max_y; | - | ||||||||||||||||||||||||
1246 | QT_FT_BBox* clip; | - | ||||||||||||||||||||||||
1247 | int skip; | - | ||||||||||||||||||||||||
1248 | - | |||||||||||||||||||||||||
1249 | (*worker).num_gray_spans = 0; | - | ||||||||||||||||||||||||
1250 | - | |||||||||||||||||||||||||
1251 | - | |||||||||||||||||||||||||
1252 | gray_compute_cbox( worker ); | - | ||||||||||||||||||||||||
1253 | - | |||||||||||||||||||||||||
1254 | - | |||||||||||||||||||||||||
1255 | clip = &(*worker).clip_box; | - | ||||||||||||||||||||||||
1256 | - | |||||||||||||||||||||||||
1257 | if ( (*
| 0 | ||||||||||||||||||||||||
1258 | (*
| 0 | ||||||||||||||||||||||||
1259 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||
1260 | - | |||||||||||||||||||||||||
1261 | if ( (*
never executed: worker).min_ex = clip->xMin;(*worker).min_ex = clip->xMin; never executed: (*worker).min_ex = clip->xMin; | 0 | ||||||||||||||||||||||||
1262 | if ( (*
never executed: worker).min_ey = clip->yMin;(*worker).min_ey = clip->yMin; never executed: (*worker).min_ey = clip->yMin; | 0 | ||||||||||||||||||||||||
1263 | - | |||||||||||||||||||||||||
1264 | if ( (*
never executed: worker).max_ex = clip->xMax;(*worker).max_ex = clip->xMax; never executed: (*worker).max_ex = clip->xMax; | 0 | ||||||||||||||||||||||||
1265 | if ( (*
never executed: worker).max_ey = clip->yMax;(*worker).max_ey = clip->yMax; never executed: (*worker).max_ey = clip->yMax; | 0 | ||||||||||||||||||||||||
1266 | - | |||||||||||||||||||||||||
1267 | (*worker).count_ex = (*worker).max_ex - (*worker).min_ex; | - | ||||||||||||||||||||||||
1268 | (*worker).count_ey = (*worker).max_ey - (*worker).min_ey; | - | ||||||||||||||||||||||||
1269 | - | |||||||||||||||||||||||||
1270 | - | |||||||||||||||||||||||||
1271 | - | |||||||||||||||||||||||||
1272 | - | |||||||||||||||||||||||||
1273 | (*worker).conic_level = 32; | - | ||||||||||||||||||||||||
1274 | (*worker).cubic_level = 16; | - | ||||||||||||||||||||||||
1275 | - | |||||||||||||||||||||||||
1276 | { | - | ||||||||||||||||||||||||
1277 | int level = 0; | - | ||||||||||||||||||||||||
1278 | - | |||||||||||||||||||||||||
1279 | - | |||||||||||||||||||||||||
1280 | if ( (*
| 0 | ||||||||||||||||||||||||
1281 | level++; never executed: level++; | 0 | ||||||||||||||||||||||||
1282 | if ( (*
| 0 | ||||||||||||||||||||||||
1283 | level++; never executed: level++; | 0 | ||||||||||||||||||||||||
1284 | - | |||||||||||||||||||||||||
1285 | (*worker).conic_level <<= level; | - | ||||||||||||||||||||||||
1286 | (*worker).cubic_level <<= level; | - | ||||||||||||||||||||||||
1287 | } | - | ||||||||||||||||||||||||
1288 | - | |||||||||||||||||||||||||
1289 | - | |||||||||||||||||||||||||
1290 | num_bands = (int)( ( (*worker).max_ey - (*worker).min_ey ) / (*worker).band_size ); | - | ||||||||||||||||||||||||
1291 | if ( num_bands == 0
never executed: num_bands = 1; | 0 | ||||||||||||||||||||||||
1292 | if ( num_bands >= 39
never executed: num_bands = 39; | 0 | ||||||||||||||||||||||||
1293 | - | |||||||||||||||||||||||||
1294 | (*worker).band_shoot = 0; | - | ||||||||||||||||||||||||
1295 | - | |||||||||||||||||||||||||
1296 | min = (*worker).min_ey; | - | ||||||||||||||||||||||||
1297 | max_y = (*worker).max_ey; | - | ||||||||||||||||||||||||
1298 | - | |||||||||||||||||||||||||
1299 | for ( n = 0; n < num_bands
| 0 | ||||||||||||||||||||||||
1300 | { | - | ||||||||||||||||||||||||
1301 | max = min + (*worker).band_size; | - | ||||||||||||||||||||||||
1302 | if ( n == num_bands - 1
| 0 | ||||||||||||||||||||||||
1303 | max = max_y; never executed: max = max_y; | 0 | ||||||||||||||||||||||||
1304 | - | |||||||||||||||||||||||||
1305 | bands[0].min = min; | - | ||||||||||||||||||||||||
1306 | bands[0].max = max; | - | ||||||||||||||||||||||||
1307 | band = bands; | - | ||||||||||||||||||||||||
1308 | - | |||||||||||||||||||||||||
1309 | while ( band >= bands
| 0 | ||||||||||||||||||||||||
1310 | { | - | ||||||||||||||||||||||||
1311 | TPos bottom, top, middle; | - | ||||||||||||||||||||||||
1312 | int error; | - | ||||||||||||||||||||||||
1313 | - | |||||||||||||||||||||||||
1314 | { | - | ||||||||||||||||||||||||
1315 | PCell cells_max; | - | ||||||||||||||||||||||||
1316 | int yindex; | - | ||||||||||||||||||||||||
1317 | int cell_start, cell_end, cell_mod; | - | ||||||||||||||||||||||||
1318 | - | |||||||||||||||||||||||||
1319 | - | |||||||||||||||||||||||||
1320 | (*worker).ycells = (PCell*)(*worker).buffer; | - | ||||||||||||||||||||||||
1321 | (*worker).ycount = band->max - band->min; | - | ||||||||||||||||||||||||
1322 | - | |||||||||||||||||||||||||
1323 | cell_start = sizeof ( PCell ) * (*worker).ycount; | - | ||||||||||||||||||||||||
1324 | cell_mod = cell_start % sizeof ( TCell ); | - | ||||||||||||||||||||||||
1325 | if ( cell_mod > 0
| 0 | ||||||||||||||||||||||||
1326 | cell_start += sizeof ( TCell ) - cell_mod; never executed: cell_start += sizeof ( TCell ) - cell_mod; | 0 | ||||||||||||||||||||||||
1327 | - | |||||||||||||||||||||||||
1328 | cell_end = (*worker).buffer_size; | - | ||||||||||||||||||||||||
1329 | cell_end -= cell_end % sizeof( TCell ); | - | ||||||||||||||||||||||||
1330 | - | |||||||||||||||||||||||||
1331 | cells_max = (PCell)( (char*)(*worker).buffer + cell_end ); | - | ||||||||||||||||||||||||
1332 | (*worker).cells = (PCell)( (char*)(*worker).buffer + cell_start ); | - | ||||||||||||||||||||||||
1333 | if ( (*
| 0 | ||||||||||||||||||||||||
1334 | goto never executed: ReduceBands;goto ReduceBands; never executed: goto ReduceBands; | 0 | ||||||||||||||||||||||||
1335 | - | |||||||||||||||||||||||||
1336 | (*worker).max_cells = (int)(cells_max - (*worker).cells); | - | ||||||||||||||||||||||||
1337 | if ( (*
| 0 | ||||||||||||||||||||||||
1338 | goto never executed: ReduceBands;goto ReduceBands; never executed: goto ReduceBands; | 0 | ||||||||||||||||||||||||
1339 | - | |||||||||||||||||||||||||
1340 | for ( yindex = 0; yindex < (*worker).ycount
| 0 | ||||||||||||||||||||||||
1341 | (* never executed: worker).ycells[yindex] = ((void *)0);(*worker).ycells[yindex] = ((void *)0); never executed: (*worker).ycells[yindex] = ((void *)0); | 0 | ||||||||||||||||||||||||
1342 | } | - | ||||||||||||||||||||||||
1343 | - | |||||||||||||||||||||||||
1344 | (*worker).num_cells = 0; | - | ||||||||||||||||||||||||
1345 | (*worker).invalid = 1; | - | ||||||||||||||||||||||||
1346 | (*worker).min_ey = band->min; | - | ||||||||||||||||||||||||
1347 | (*worker).max_ey = band->max; | - | ||||||||||||||||||||||||
1348 | (*worker).count_ey = band->max - band->min; | - | ||||||||||||||||||||||||
1349 | - | |||||||||||||||||||||||||
1350 | error = gray_convert_glyph_inner( worker ); | - | ||||||||||||||||||||||||
1351 | - | |||||||||||||||||||||||||
1352 | if ( !error
| 0 | ||||||||||||||||||||||||
1353 | { | - | ||||||||||||||||||||||||
1354 | gray_sweep( worker, &(*worker).target ); | - | ||||||||||||||||||||||||
1355 | band--; | - | ||||||||||||||||||||||||
1356 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||
1357 | } | - | ||||||||||||||||||||||||
1358 | else if ( error != -4
| 0 | ||||||||||||||||||||||||
1359 | return never executed: 1;return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||
1360 | - | |||||||||||||||||||||||||
1361 | ReduceBands: code before this statement never executed: ReduceBands: | 0 | ||||||||||||||||||||||||
1362 | - | |||||||||||||||||||||||||
1363 | bottom = band->min; | - | ||||||||||||||||||||||||
1364 | top = band->max; | - | ||||||||||||||||||||||||
1365 | middle = bottom + ( ( top - bottom ) >> 1 ); | - | ||||||||||||||||||||||||
1366 | - | |||||||||||||||||||||||||
1367 | - | |||||||||||||||||||||||||
1368 | - | |||||||||||||||||||||||||
1369 | if ( middle == bottom
| 0 | ||||||||||||||||||||||||
1370 | { | - | ||||||||||||||||||||||||
1371 | - | |||||||||||||||||||||||||
1372 | - | |||||||||||||||||||||||||
1373 | - | |||||||||||||||||||||||||
1374 | return never executed: -6;return -6; never executed: return -6; | 0 | ||||||||||||||||||||||||
1375 | } | - | ||||||||||||||||||||||||
1376 | - | |||||||||||||||||||||||||
1377 | if ( bottom-top >= (*worker).band_size
| 0 | ||||||||||||||||||||||||
1378 | (* never executed: worker).band_shoot++;(*worker).band_shoot++; never executed: (*worker).band_shoot++; | 0 | ||||||||||||||||||||||||
1379 | - | |||||||||||||||||||||||||
1380 | band[1].min = bottom; | - | ||||||||||||||||||||||||
1381 | band[1].max = middle; | - | ||||||||||||||||||||||||
1382 | band[0].min = middle; | - | ||||||||||||||||||||||||
1383 | band[0].max = top; | - | ||||||||||||||||||||||||
1384 | band++; | - | ||||||||||||||||||||||||
1385 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1386 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1387 | - | |||||||||||||||||||||||||
1388 | if ( (*
| 0 | ||||||||||||||||||||||||
1389 | { | - | ||||||||||||||||||||||||
1390 | skip = (*
| 0 | ||||||||||||||||||||||||
1391 | (*worker).render_span( (*worker).num_gray_spans - skip, | - | ||||||||||||||||||||||||
1392 | (*worker).gray_spans + skip, | - | ||||||||||||||||||||||||
1393 | (*worker).render_span_data ); | - | ||||||||||||||||||||||||
1394 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1395 | - | |||||||||||||||||||||||||
1396 | (*worker).skip_spans -= (*worker).num_gray_spans; | - | ||||||||||||||||||||||||
1397 | - | |||||||||||||||||||||||||
1398 | if ( (*
| 0 | ||||||||||||||||||||||||
1399 | (* never executed: worker).band_size = (*worker).band_size / 2;(*worker).band_size = (*worker).band_size / 2; never executed: (*worker).band_size = (*worker).band_size / 2; | 0 | ||||||||||||||||||||||||
1400 | - | |||||||||||||||||||||||||
1401 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||
1402 | } | - | ||||||||||||||||||||||||
1403 | - | |||||||||||||||||||||||||
1404 | - | |||||||||||||||||||||||||
1405 | static int | - | ||||||||||||||||||||||||
1406 | gray_raster_render( QT_FT_Raster raster, | - | ||||||||||||||||||||||||
1407 | const QT_FT_Raster_Params* params ) | - | ||||||||||||||||||||||||
1408 | { | - | ||||||||||||||||||||||||
1409 | const QT_FT_Outline* outline = (const QT_FT_Outline*)params->source; | - | ||||||||||||||||||||||||
1410 | const QT_FT_Bitmap* target_map = params->target; | - | ||||||||||||||||||||||||
1411 | PWorker worker; | - | ||||||||||||||||||||||||
1412 | - | |||||||||||||||||||||||||
1413 | - | |||||||||||||||||||||||||
1414 | if ( !raster
| 0 | ||||||||||||||||||||||||
1415 | return never executed: -3;return -3; never executed: return -3; | 0 | ||||||||||||||||||||||||
1416 | - | |||||||||||||||||||||||||
1417 | if ( raster->worker
| 0 | ||||||||||||||||||||||||
1418 | raster->worker->skip_spans = params->skip_spans; never executed: raster->worker->skip_spans = params->skip_spans; | 0 | ||||||||||||||||||||||||
1419 | - | |||||||||||||||||||||||||
1420 | - | |||||||||||||||||||||||||
1421 | - | |||||||||||||||||||||||||
1422 | - | |||||||||||||||||||||||||
1423 | if (raster->buffer_allocated_size < 8192
| 0 | ||||||||||||||||||||||||
1424 | return never executed: -6;return -6; never executed: return -6; | 0 | ||||||||||||||||||||||||
1425 | - | |||||||||||||||||||||||||
1426 | - | |||||||||||||||||||||||||
1427 | if ( outline->n_points == 0
| 0 | ||||||||||||||||||||||||
1428 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||
1429 | - | |||||||||||||||||||||||||
1430 | if ( !outline
| 0 | ||||||||||||||||||||||||
1431 | return never executed: -1;return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||
1432 | - | |||||||||||||||||||||||||
1433 | if ( outline->n_points !=
| 0 | ||||||||||||||||||||||||
1434 | outline->contours[outline->n_contours - 1] + 1
| 0 | ||||||||||||||||||||||||
1435 | return never executed: -1;return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||
1436 | - | |||||||||||||||||||||||||
1437 | worker = raster->worker; | - | ||||||||||||||||||||||||
1438 | - | |||||||||||||||||||||||||
1439 | - | |||||||||||||||||||||||||
1440 | if ( (
| 0 | ||||||||||||||||||||||||
1441 | { | - | ||||||||||||||||||||||||
1442 | if ( !target_map
| 0 | ||||||||||||||||||||||||
1443 | return never executed: -3;return -3; never executed: return -3; | 0 | ||||||||||||||||||||||||
1444 | - | |||||||||||||||||||||||||
1445 | - | |||||||||||||||||||||||||
1446 | if ( !target_map->width
| 0 | ||||||||||||||||||||||||
1447 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||
1448 | - | |||||||||||||||||||||||||
1449 | if ( !target_map->buffer
| 0 | ||||||||||||||||||||||||
1450 | return never executed: -3;return -3; never executed: return -3; | 0 | ||||||||||||||||||||||||
1451 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1452 | - | |||||||||||||||||||||||||
1453 | - | |||||||||||||||||||||||||
1454 | if ( !( params->flags & 0x1 )
| 0 | ||||||||||||||||||||||||
1455 | return never executed: -2;return -2; never executed: return -2; | 0 | ||||||||||||||||||||||||
1456 | - | |||||||||||||||||||||||||
1457 | - | |||||||||||||||||||||||||
1458 | if ( (
| 0 | ||||||||||||||||||||||||
1459 | { | - | ||||||||||||||||||||||||
1460 | - | |||||||||||||||||||||||||
1461 | (*worker).clip_box.xMin = 0; | - | ||||||||||||||||||||||||
1462 | (*worker).clip_box.yMin = 0; | - | ||||||||||||||||||||||||
1463 | (*worker).clip_box.xMax = target_map->width; | - | ||||||||||||||||||||||||
1464 | (*worker).clip_box.yMax = target_map->rows; | - | ||||||||||||||||||||||||
1465 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1466 | else if ( params->flags & 0x4
| 0 | ||||||||||||||||||||||||
1467 | { | - | ||||||||||||||||||||||||
1468 | (*worker).clip_box = params->clip_box; | - | ||||||||||||||||||||||||
1469 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1470 | else | - | ||||||||||||||||||||||||
1471 | { | - | ||||||||||||||||||||||||
1472 | (*worker).clip_box.xMin = -32768L; | - | ||||||||||||||||||||||||
1473 | (*worker).clip_box.yMin = -32768L; | - | ||||||||||||||||||||||||
1474 | (*worker).clip_box.xMax = 32767L; | - | ||||||||||||||||||||||||
1475 | (*worker).clip_box.yMax = 32767L; | - | ||||||||||||||||||||||||
1476 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1477 | - | |||||||||||||||||||||||||
1478 | gray_init_cells( worker, raster->buffer, raster->buffer_size ); | - | ||||||||||||||||||||||||
1479 | - | |||||||||||||||||||||||||
1480 | (*worker).outline = *outline; | - | ||||||||||||||||||||||||
1481 | (*worker).num_cells = 0; | - | ||||||||||||||||||||||||
1482 | (*worker).invalid = 1; | - | ||||||||||||||||||||||||
1483 | (*worker).band_size = raster->band_size; | - | ||||||||||||||||||||||||
1484 | - | |||||||||||||||||||||||||
1485 | if ( target_map
| 0 | ||||||||||||||||||||||||
1486 | (* never executed: worker).target = *target_map;(*worker).target = *target_map; never executed: (*worker).target = *target_map; | 0 | ||||||||||||||||||||||||
1487 | - | |||||||||||||||||||||||||
1488 | (*worker).render_span = (QT_FT_SpanFunc)gray_render_span; | - | ||||||||||||||||||||||||
1489 | (*worker).render_span_data = &(*worker); | - | ||||||||||||||||||||||||
1490 | - | |||||||||||||||||||||||||
1491 | if ( params->flags & 0x2
| 0 | ||||||||||||||||||||||||
1492 | { | - | ||||||||||||||||||||||||
1493 | (*worker).render_span = (QT_FT_SpanFunc)params->gray_spans; | - | ||||||||||||||||||||||||
1494 | (*worker).render_span_data = params->user; | - | ||||||||||||||||||||||||
1495 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1496 | - | |||||||||||||||||||||||||
1497 | return never executed: gray_convert_glyph( worker );return gray_convert_glyph( worker ); never executed: return gray_convert_glyph( worker ); | 0 | ||||||||||||||||||||||||
1498 | } | - | ||||||||||||||||||||||||
1499 | - | |||||||||||||||||||||||||
1500 | - | |||||||||||||||||||||||||
1501 | - | |||||||||||||||||||||||||
1502 | - | |||||||||||||||||||||||||
1503 | - | |||||||||||||||||||||||||
1504 | static int | - | ||||||||||||||||||||||||
1505 | gray_raster_new( QT_FT_Raster* araster ) | - | ||||||||||||||||||||||||
1506 | { | - | ||||||||||||||||||||||||
1507 | *araster = malloc(sizeof(TRaster)); | - | ||||||||||||||||||||||||
1508 | if (!*araster
| 0 | ||||||||||||||||||||||||
1509 | *araster = 0; | - | ||||||||||||||||||||||||
1510 | return never executed: -4;return -4; never executed: return -4; | 0 | ||||||||||||||||||||||||
1511 | } | - | ||||||||||||||||||||||||
1512 | memset( *araster, 0, sizeof(TRaster) ); | - | ||||||||||||||||||||||||
1513 | - | |||||||||||||||||||||||||
1514 | return never executed: 0;return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||
1515 | } | - | ||||||||||||||||||||||||
1516 | - | |||||||||||||||||||||||||
1517 | - | |||||||||||||||||||||||||
1518 | static void | - | ||||||||||||||||||||||||
1519 | gray_raster_done( QT_FT_Raster raster ) | - | ||||||||||||||||||||||||
1520 | { | - | ||||||||||||||||||||||||
1521 | free(raster); | - | ||||||||||||||||||||||||
1522 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1523 | - | |||||||||||||||||||||||||
1524 | - | |||||||||||||||||||||||||
1525 | static void | - | ||||||||||||||||||||||||
1526 | gray_raster_reset( QT_FT_Raster raster, | - | ||||||||||||||||||||||||
1527 | char* pool_base, | - | ||||||||||||||||||||||||
1528 | long pool_size ) | - | ||||||||||||||||||||||||
1529 | { | - | ||||||||||||||||||||||||
1530 | PRaster rast = (PRaster)raster; | - | ||||||||||||||||||||||||
1531 | - | |||||||||||||||||||||||||
1532 | if ( raster
| 0 | ||||||||||||||||||||||||
1533 | { | - | ||||||||||||||||||||||||
1534 | if ( pool_base
| 0 | ||||||||||||||||||||||||
1535 | { | - | ||||||||||||||||||||||||
1536 | PWorker worker = (PWorker)pool_base; | - | ||||||||||||||||||||||||
1537 | - | |||||||||||||||||||||||||
1538 | - | |||||||||||||||||||||||||
1539 | rast->worker = worker; | - | ||||||||||||||||||||||||
1540 | rast->buffer = pool_base + | - | ||||||||||||||||||||||||
1541 | ( ( sizeof ( TWorker ) + sizeof ( TCell ) - 1 ) & | - | ||||||||||||||||||||||||
1542 | ~( sizeof ( TCell ) - 1 ) ); | - | ||||||||||||||||||||||||
1543 | rast->buffer_size = (long)( ( pool_base + pool_size ) - | - | ||||||||||||||||||||||||
1544 | (char*)rast->buffer ) & | - | ||||||||||||||||||||||||
1545 | ~( sizeof ( TCell ) - 1 ); | - | ||||||||||||||||||||||||
1546 | rast->band_size = (int)( rast->buffer_size / | - | ||||||||||||||||||||||||
1547 | ( sizeof ( TCell ) * 8 ) ); | - | ||||||||||||||||||||||||
1548 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1549 | else if ( pool_base
| 0 | ||||||||||||||||||||||||
1550 | { | - | ||||||||||||||||||||||||
1551 | - | |||||||||||||||||||||||||
1552 | rast->buffer = pool_base; | - | ||||||||||||||||||||||||
1553 | rast->worker = ((void *)0); | - | ||||||||||||||||||||||||
1554 | rast->buffer_size = pool_size; | - | ||||||||||||||||||||||||
1555 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1556 | else | - | ||||||||||||||||||||||||
1557 | { | - | ||||||||||||||||||||||||
1558 | rast->buffer = ((void *)0); | - | ||||||||||||||||||||||||
1559 | rast->buffer_size = 0; | - | ||||||||||||||||||||||||
1560 | rast->worker = ((void *)0); | - | ||||||||||||||||||||||||
1561 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1562 | rast->buffer_allocated_size = pool_size; | - | ||||||||||||||||||||||||
1563 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1564 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1565 | - | |||||||||||||||||||||||||
1566 | const QT_FT_Raster_Funcs qt_ft_grays_raster = | - | ||||||||||||||||||||||||
1567 | { | - | ||||||||||||||||||||||||
1568 | QT_FT_GLYPH_FORMAT_OUTLINE, | - | ||||||||||||||||||||||||
1569 | - | |||||||||||||||||||||||||
1570 | (QT_FT_Raster_NewFunc) gray_raster_new, | - | ||||||||||||||||||||||||
1571 | (QT_FT_Raster_ResetFunc) gray_raster_reset, | - | ||||||||||||||||||||||||
1572 | (QT_FT_Raster_SetModeFunc)0, | - | ||||||||||||||||||||||||
1573 | (QT_FT_Raster_RenderFunc) gray_raster_render, | - | ||||||||||||||||||||||||
1574 | (QT_FT_Raster_DoneFunc) gray_raster_done | - | ||||||||||||||||||||||||
1575 | }; | - | ||||||||||||||||||||||||
Switch to Source code | Preprocessed file |