summaryrefslogtreecommitdiff
path: root/third_party/agg23/agg_shorten_path.h
diff options
context:
space:
mode:
authorTom Sepez <tsepez@chromium.org>2015-06-16 16:29:44 -0700
committerTom Sepez <tsepez@chromium.org>2015-06-16 16:29:44 -0700
commit2ca8fcbc8a7a3ef6adfac154c47068c1696205d0 (patch)
treede3f825c75b1b92908825f68af8a4e7146cf97fd /third_party/agg23/agg_shorten_path.h
parentea44bd064a86679a47a7265020f997d6e3b88336 (diff)
downloadpdfium-chromium/2438.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_shorten_path.h')
-rw-r--r--third_party/agg23/agg_shorten_path.h57
1 files changed, 57 insertions, 0 deletions
diff --git a/third_party/agg23/agg_shorten_path.h b/third_party/agg23/agg_shorten_path.h
new file mode 100644
index 0000000000..d7eb4be018
--- /dev/null
+++ b/third_party/agg23/agg_shorten_path.h
@@ -0,0 +1,57 @@
+
+//----------------------------------------------------------------------------
+// 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
+//----------------------------------------------------------------------------
+#ifndef AGG_SHORTEN_PATH_INCLUDED
+#define AGG_SHORTEN_PATH_INCLUDED
+#include "agg_basics.h"
+#include "agg_vertex_sequence.h"
+namespace agg
+{
+template<class VertexSequence>
+void shorten_path(VertexSequence& vs, FX_FLOAT s, unsigned closed = 0)
+{
+ typedef typename VertexSequence::value_type vertex_type;
+ if(s > 0 && vs.size() > 1) {
+ FX_FLOAT d;
+ int n = int(vs.size() - 2);
+ while(n) {
+ d = vs[n].dist;
+ if(d > s) {
+ break;
+ }
+ vs.remove_last();
+ s -= d;
+ --n;
+ }
+ if(vs.size() < 2) {
+ vs.remove_all();
+ } else {
+ n = vs.size() - 1;
+ vertex_type& prev = vs[n - 1];
+ vertex_type& last = vs[n];
+ d = (prev.dist - s) / prev.dist;
+ FX_FLOAT x = prev.x + (last.x - prev.x) * d;
+ FX_FLOAT y = prev.y + (last.y - prev.y) * d;
+ last.x = x;
+ last.y = y;
+ if(!prev(last)) {
+ vs.remove_last();
+ }
+ vs.close(closed != 0);
+ }
+ }
+}
+}
+#endif