OLD | NEW |
1 | 1 |
2 //---------------------------------------------------------------------------- | 2 //---------------------------------------------------------------------------- |
3 // XYQ: 2006-01-22 Copied from AGG project. | 3 // XYQ: 2006-01-22 Copied from AGG project. |
4 // This file uses only integer data, so it's suitable for all platforms. | 4 // This file uses only integer data, so it's suitable for all platforms. |
5 //---------------------------------------------------------------------------- | 5 //---------------------------------------------------------------------------- |
6 //---------------------------------------------------------------------------- | 6 //---------------------------------------------------------------------------- |
7 // Anti-Grain Geometry - Version 2.3 | 7 // Anti-Grain Geometry - Version 2.3 |
8 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) | 8 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) |
9 // | 9 // |
10 // Permission to copy, use, modify, sell and distribute this software | 10 // Permission to copy, use, modify, sell and distribute this software |
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
276 first = poly_base_size; | 276 first = poly_base_size; |
277 if(dy < 0) { | 277 if(dy < 0) { |
278 safeP = fy1; | 278 safeP = fy1; |
279 safeP *= dx; | 279 safeP *= dx; |
280 if (!safeP.IsValid()) | 280 if (!safeP.IsValid()) |
281 return; | 281 return; |
282 first = 0; | 282 first = 0; |
283 incr = -1; | 283 incr = -1; |
284 dy = -dy; | 284 dy = -dy; |
285 } | 285 } |
286 delta = safeP.ValueOrDie() / dy; | 286 delta = (safeP / dy).ValueOrDie(); |
287 mod = safeP.ValueOrDie() % dy; | 287 mod = (safeP % dy).ValueOrDie(); |
288 if(mod < 0) { | 288 if(mod < 0) { |
289 delta--; | 289 delta--; |
290 mod += dy; | 290 mod += dy; |
291 } | 291 } |
292 x_from = x1 + delta; | 292 x_from = x1 + delta; |
293 render_hline(ey1, x1, fy1, x_from, first); | 293 render_hline(ey1, x1, fy1, x_from, first); |
294 ey1 += incr; | 294 ey1 += incr; |
295 set_cur_cell(x_from >> poly_base_shift, ey1); | 295 set_cur_cell(x_from >> poly_base_shift, ey1); |
296 if(ey1 != ey2) { | 296 if(ey1 != ey2) { |
297 safeP = static_cast<int>(poly_base_size); | 297 safeP = static_cast<int>(poly_base_size); |
298 safeP *= dx; | 298 safeP *= dx; |
299 if (!safeP.IsValid()) | 299 if (!safeP.IsValid()) |
300 return; | 300 return; |
301 lift = safeP.ValueOrDie() / dy; | 301 lift = (safeP / dy).ValueOrDie(); |
302 rem = safeP.ValueOrDie() % dy; | 302 rem = (safeP % dy).ValueOrDie(); |
303 if (rem < 0) { | 303 if (rem < 0) { |
304 lift--; | 304 lift--; |
305 rem += dy; | 305 rem += dy; |
306 } | 306 } |
307 mod -= dy; | 307 mod -= dy; |
308 while(ey1 != ey2) { | 308 while(ey1 != ey2) { |
309 delta = lift; | 309 delta = lift; |
310 mod += rem; | 310 mod += rem; |
311 if (mod >= 0) { | 311 if (mod >= 0) { |
312 mod -= dy; | 312 mod -= dy; |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
489 } | 489 } |
490 for(i = 0; i < m_sorted_y.size(); i++) { | 490 for(i = 0; i < m_sorted_y.size(); i++) { |
491 const sorted_y& cur_y = m_sorted_y[i]; | 491 const sorted_y& cur_y = m_sorted_y[i]; |
492 if(cur_y.num) { | 492 if(cur_y.num) { |
493 qsort_cells(m_sorted_cells.data() + cur_y.start, cur_y.num); | 493 qsort_cells(m_sorted_cells.data() + cur_y.start, cur_y.num); |
494 } | 494 } |
495 } | 495 } |
496 m_sorted = true; | 496 m_sorted = true; |
497 } | 497 } |
498 } | 498 } |
OLD | NEW |