| OLD | NEW |
| 1 | 1 |
| 2 //---------------------------------------------------------------------------- | 2 //---------------------------------------------------------------------------- |
| 3 // Anti-Grain Geometry - Version 2.3 | 3 // Anti-Grain Geometry - Version 2.3 |
| 4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) | 4 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) |
| 5 // | 5 // |
| 6 // Permission to copy, use, modify, sell and distribute this software | 6 // Permission to copy, use, modify, sell and distribute this software |
| 7 // is granted provided this copyright notice appears in all copies. | 7 // is granted provided this copyright notice appears in all copies. |
| 8 // This software is provided "as is" without express or implied | 8 // This software is provided "as is" without express or implied |
| 9 // warranty, and with no claim as to its suitability for any purpose. | 9 // warranty, and with no claim as to its suitability for any purpose. |
| 10 // | 10 // |
| 11 //---------------------------------------------------------------------------- | 11 //---------------------------------------------------------------------------- |
| 12 // Contact: mcseem@antigrain.com | 12 // Contact: mcseem@antigrain.com |
| 13 // mcseemagg@yahoo.com | 13 // mcseemagg@yahoo.com |
| 14 // http://www.antigrain.com | 14 // http://www.antigrain.com |
| 15 //---------------------------------------------------------------------------- | 15 //---------------------------------------------------------------------------- |
| 16 // | 16 // |
| 17 // Liang-Barsky clipping | 17 // Liang-Barsky clipping |
| 18 // | 18 // |
| 19 //---------------------------------------------------------------------------- | 19 //---------------------------------------------------------------------------- |
| 20 #ifndef AGG_CLIP_LIANG_BARSKY_INCLUDED | 20 #ifndef AGG_CLIP_LIANG_BARSKY_INCLUDED |
| 21 #define AGG_CLIP_LIANG_BARSKY_INCLUDED | 21 #define AGG_CLIP_LIANG_BARSKY_INCLUDED |
| 22 #include "agg_basics.h" | 22 #include "agg_basics.h" |
| 23 #include "third_party/base/numerics/safe_math.h" |
| 23 namespace agg | 24 namespace agg |
| 24 { | 25 { |
| 25 template<class T> | 26 template<class T> |
| 26 inline unsigned clipping_flags(T x, T y, const rect_base<T>& clip_box) | 27 inline unsigned clipping_flags(T x, T y, const rect_base<T>& clip_box) |
| 27 { | 28 { |
| 28 return (x > clip_box.x2) | | 29 return (x > clip_box.x2) | |
| 29 ((y > clip_box.y2) << 1) | | 30 ((y > clip_box.y2) << 1) | |
| 30 ((x < clip_box.x1) << 2) | | 31 ((x < clip_box.x1) << 2) | |
| 31 ((y < clip_box.y1) << 3); | 32 ((y < clip_box.y1) << 3); |
| 32 } | 33 } |
| 33 template<class T> | 34 template<class T> |
| 34 inline unsigned clip_liang_barsky(T x1, T y1, T x2, T y2, | 35 inline unsigned clip_liang_barsky(T x1, T y1, T x2, T y2, |
| 35 const rect_base<T>& clip_box, | 36 const rect_base<T>& clip_box, |
| 36 T* x, T* y) | 37 T* x, T* y) |
| 37 { | 38 { |
| 38 const FX_FLOAT nearzero = 1e-30f; | 39 const FX_FLOAT nearzero = 1e-30f; |
| 39 FX_FLOAT deltax = (FX_FLOAT)(x2 - x1); | 40 |
| 40 FX_FLOAT deltay = (FX_FLOAT)(y2 - y1); | 41 pdfium::base::CheckedNumeric<FX_FLOAT> width = x2; |
| 42 width -= x1; |
| 43 if (!width.IsValid()) |
| 44 return 0; |
| 45 pdfium::base::CheckedNumeric<FX_FLOAT> height = y2; |
| 46 height -= y1; |
| 47 if (!height.IsValid()) |
| 48 return 0; |
| 49 |
| 50 FX_FLOAT deltax = width.ValueOrDefault(0); |
| 51 FX_FLOAT deltay = height.ValueOrDefault(0); |
| 41 unsigned np = 0; | 52 unsigned np = 0; |
| 42 if(deltax == 0) { | 53 if(deltax == 0) { |
| 43 deltax = (x1 > clip_box.x1) ? -nearzero : nearzero; | 54 deltax = (x1 > clip_box.x1) ? -nearzero : nearzero; |
| 44 } | 55 } |
| 45 FX_FLOAT xin, xout; | 56 FX_FLOAT xin, xout; |
| 46 if(deltax > 0) { | 57 if(deltax > 0) { |
| 47 xin = (FX_FLOAT)clip_box.x1; | 58 xin = (FX_FLOAT)clip_box.x1; |
| 48 xout = (FX_FLOAT)clip_box.x2; | 59 xout = (FX_FLOAT)clip_box.x2; |
| 49 } else { | 60 } else { |
| 50 xin = (FX_FLOAT)clip_box.x2; | 61 xin = (FX_FLOAT)clip_box.x2; |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 } | 127 } |
| 117 ++np; | 128 ++np; |
| 118 } | 129 } |
| 119 } | 130 } |
| 120 } | 131 } |
| 121 } | 132 } |
| 122 return np; | 133 return np; |
| 123 } | 134 } |
| 124 } | 135 } |
| 125 #endif | 136 #endif |
| OLD | NEW |