diff options
author | Tom Sepez <tsepez@chromium.org> | 2015-06-16 16:29:44 -0700 |
---|---|---|
committer | Tom Sepez <tsepez@chromium.org> | 2015-06-16 16:29:44 -0700 |
commit | 2ca8fcbc8a7a3ef6adfac154c47068c1696205d0 (patch) | |
tree | de3f825c75b1b92908825f68af8a4e7146cf97fd /third_party/agg23/agg_vertex_sequence.h | |
parent | ea44bd064a86679a47a7265020f997d6e3b88336 (diff) | |
download | pdfium-2ca8fcbc8a7a3ef6adfac154c47068c1696205d0.tar.xz |
Separate agg-authored code from fx-authored code.chromium/2439chromium/2438chromium/2437chromium/2436chromium/2435
Creates a separate library so we can apply less-strict warnings to
the code we can't change from upstream vs. the code we can change,
reducing noise in the standalone build.
Remove needless foo.{cpp,h} files that merely perform indirection
via #include "some_other_path/foo.{cpp,h}".
BUG=pdfium:166
R=brucedawson@chromium.org, thestig@chromium.org
Review URL: https://codereview.chromium.org/1152743007.
Diffstat (limited to 'third_party/agg23/agg_vertex_sequence.h')
-rw-r--r-- | third_party/agg23/agg_vertex_sequence.h | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/third_party/agg23/agg_vertex_sequence.h b/third_party/agg23/agg_vertex_sequence.h new file mode 100644 index 0000000000..6600bf2085 --- /dev/null +++ b/third_party/agg23/agg_vertex_sequence.h @@ -0,0 +1,100 @@ + +//---------------------------------------------------------------------------- +// Anti-Grain Geometry - Version 2.3 +// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com) +// +// Permission to copy, use, modify, sell and distribute this software +// is granted provided this copyright notice appears in all copies. +// This software is provided "as is" without express or implied +// warranty, and with no claim as to its suitability for any purpose. +// +//---------------------------------------------------------------------------- +// Contact: mcseem@antigrain.com +// mcseemagg@yahoo.com +// http://www.antigrain.com +//---------------------------------------------------------------------------- +// +// vertex_sequence container and vertex_dist struct +// +//---------------------------------------------------------------------------- +#ifndef AGG_VERTEX_SEQUENCE_INCLUDED +#define AGG_VERTEX_SEQUENCE_INCLUDED +#include "agg_basics.h" +#include "agg_array.h" +#include "agg_math.h" +namespace agg +{ +template<class T, unsigned S = 6> +class vertex_sequence : public pod_deque<T, S> +{ +public: + typedef pod_deque<T, S> base_type; + void add(const T& val); + void modify_last(const T& val); + void close(bool remove_flag); +}; +template<class T, unsigned S> +void vertex_sequence<T, S>::add(const T& val) +{ + if(base_type::size() > 1) { + if(!(*this)[base_type::size() - 2]((*this)[base_type::size() - 1])) { + base_type::remove_last(); + } + } + base_type::add(val); +} +template<class T, unsigned S> +void vertex_sequence<T, S>::modify_last(const T& val) +{ + base_type::remove_last(); + add(val); +} +template<class T, unsigned S> +void vertex_sequence<T, S>::close(bool closed) +{ + while(base_type::size() > 1) { + if((*this)[base_type::size() - 2]((*this)[base_type::size() - 1])) { + break; + } + T t = (*this)[base_type::size() - 1]; + base_type::remove_last(); + modify_last(t); + } + if(closed) { + while(base_type::size() > 1) { + if((*this)[base_type::size() - 1]((*this)[0])) { + break; + } + base_type::remove_last(); + } + } +} +const FX_FLOAT vertex_dist_epsilon = 1e-14f; +struct vertex_dist { + FX_FLOAT x; + FX_FLOAT y; + FX_FLOAT dist; + vertex_dist() {} + vertex_dist(FX_FLOAT x_, FX_FLOAT y_) : + x(x_), + y(y_), + dist(0) + { + } + bool operator () (const vertex_dist& val) + { + bool ret = (dist = calc_distance(x, y, val.x, val.y)) > vertex_dist_epsilon; + return ret; + } +}; +struct vertex_dist_cmd : public vertex_dist { + unsigned cmd; + vertex_dist_cmd() {} + vertex_dist_cmd(FX_FLOAT x_, FX_FLOAT y_, unsigned cmd_) : + vertex_dist(x_, y_), + cmd(cmd_) + { + } +}; +} +#endif |