1//----------------------------------------------------------------------------
2// Anti-Grain Geometry - Version 2.4
3// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
4//
5// Permission to copy, use, modify, sell and distribute this software
6// is granted provided this copyright notice appears in all copies.
7// This software is provided "as is" without express or implied
8// warranty, and with no claim as to its suitability for any purpose.
9//
10//----------------------------------------------------------------------------
11// Contact: mcseem@antigrain.com
12//          mcseemagg@yahoo.com
13//          http://www.antigrain.com
14//----------------------------------------------------------------------------
15//
16// conv_stroke
17//
18//----------------------------------------------------------------------------
19#ifndef AGG_CONV_CONTOUR_INCLUDED
20#define AGG_CONV_CONTOUR_INCLUDED
21
22#include "agg_basics.h"
23#include "agg_vcgen_contour.h"
24#include "agg_conv_adaptor_vcgen.h"
25
26namespace agg
27{
28
29    //-----------------------------------------------------------conv_contour
30    template<class VertexSource>
31    struct conv_contour : public conv_adaptor_vcgen<VertexSource, vcgen_contour>
32    {
33        typedef conv_adaptor_vcgen<VertexSource, vcgen_contour> base_type;
34
35        conv_contour(VertexSource& vs) :
36            conv_adaptor_vcgen<VertexSource, vcgen_contour>(vs)
37        {
38        }
39
40        void line_join(line_join_e lj) { base_type::generator().line_join(lj); }
41        void inner_join(inner_join_e ij) { base_type::generator().inner_join(ij); }
42        void width(double w) { base_type::generator().width(w); }
43        void miter_limit(double ml) { base_type::generator().miter_limit(ml); }
44        void miter_limit_theta(double t) { base_type::generator().miter_limit_theta(t); }
45        void inner_miter_limit(double ml) { base_type::generator().inner_miter_limit(ml); }
46        void approximation_scale(double as) { base_type::generator().approximation_scale(as); }
47        void auto_detect_orientation(bool v) { base_type::generator().auto_detect_orientation(v); }
48
49        line_join_e line_join() const { return base_type::generator().line_join(); }
50        inner_join_e inner_join() const { return base_type::generator().inner_join(); }
51        double width() const { return base_type::generator().width(); }
52        double miter_limit() const { return base_type::generator().miter_limit(); }
53        double inner_miter_limit() const { return base_type::generator().inner_miter_limit(); }
54        double approximation_scale() const { return base_type::generator().approximation_scale(); }
55        bool auto_detect_orientation() const { return base_type::generator().auto_detect_orientation(); }
56
57    private:
58        conv_contour(const conv_contour<VertexSource>&);
59        const conv_contour<VertexSource>&
60            operator = (const conv_contour<VertexSource>&);
61    };
62
63}
64
65#endif
66