
//----------------------------------------------------------------------------
// 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 pdfium
{
namespace agg
{
template<class VertexSequence>
void shorten_path(VertexSequence& vs, float s, unsigned closed = 0)
{
    typedef typename VertexSequence::value_type vertex_type;
    if(s > 0 && vs.size() > 1) {
        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;
            float x = prev.x + (last.x - prev.x) * d;
            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);
        }
    }
}
}
}  // namespace pdfium
#endif
