1
2//----------------------------------------------------------------------------
3// Anti-Grain Geometry - Version 2.3
4// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
5//
6// Permission to copy, use, modify, sell and distribute this software
7// is granted provided this copyright notice appears in all copies.
8// This software is provided "as is" without express or implied
9// warranty, and with no claim as to its suitability for any purpose.
10//
11//----------------------------------------------------------------------------
12// Contact: mcseem@antigrain.com
13//          mcseemagg@yahoo.com
14//          http://www.antigrain.com
15//----------------------------------------------------------------------------
16//
17// conv_stroke
18//
19//----------------------------------------------------------------------------
20#ifndef AGG_CONV_STROKE_INCLUDED
21#define AGG_CONV_STROKE_INCLUDED
22#include "agg_basics.h"
23#include "agg_vcgen_stroke.h"
24#include "agg_conv_adaptor_vcgen.h"
25namespace agg
26{
27template<class VertexSource, class Markers = null_markers>
28struct conv_stroke :
29        public conv_adaptor_vcgen<VertexSource, vcgen_stroke, Markers> {
30    typedef Markers marker_type;
31    typedef conv_adaptor_vcgen<VertexSource, vcgen_stroke, Markers> base_type;
32    conv_stroke(VertexSource& vs) :
33        conv_adaptor_vcgen<VertexSource, vcgen_stroke, Markers>(vs)
34    {
35    }
36    void line_cap(line_cap_e lc)
37    {
38        base_type::generator().line_cap(lc);
39    }
40    void line_join(line_join_e lj)
41    {
42        base_type::generator().line_join(lj);
43    }
44    void inner_join(inner_join_e ij)
45    {
46        base_type::generator().inner_join(ij);
47    }
48    line_cap_e   line_cap()   const
49    {
50        return base_type::generator().line_cap();
51    }
52    line_join_e  line_join()  const
53    {
54        return base_type::generator().line_join();
55    }
56    inner_join_e inner_join() const
57    {
58        return base_type::generator().inner_join();
59    }
60    void width(FX_FLOAT w)
61    {
62        base_type::generator().width(w);
63    }
64    void miter_limit(FX_FLOAT ml)
65    {
66        base_type::generator().miter_limit(ml);
67    }
68    void miter_limit_theta(FX_FLOAT t)
69    {
70        base_type::generator().miter_limit_theta(t);
71    }
72    void inner_miter_limit(FX_FLOAT ml)
73    {
74        base_type::generator().inner_miter_limit(ml);
75    }
76    void approximation_scale(FX_FLOAT as)
77    {
78        base_type::generator().approximation_scale(as);
79    }
80    FX_FLOAT width() const
81    {
82        return base_type::generator().width();
83    }
84    FX_FLOAT miter_limit() const
85    {
86        return base_type::generator().miter_limit();
87    }
88    FX_FLOAT inner_miter_limit() const
89    {
90        return base_type::generator().inner_miter_limit();
91    }
92    FX_FLOAT approximation_scale() const
93    {
94        return base_type::generator().approximation_scale();
95    }
96    void shorten(FX_FLOAT s)
97    {
98        base_type::generator().shorten(s);
99    }
100    FX_FLOAT shorten() const
101    {
102        return base_type::generator().shorten();
103    }
104private:
105    conv_stroke(const conv_stroke<VertexSource, Markers>&);
106    const conv_stroke<VertexSource, Markers>&
107    operator = (const conv_stroke<VertexSource, Markers>&);
108};
109}
110#endif
111