xref: /haiku/headers/libs/agg/agg_conv_transform.h (revision 1deede7388b04dbeec5af85cae7164735ea9e70d)
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 // class conv_transform
17 //
18 //----------------------------------------------------------------------------
19 #ifndef AGG_CONV_TRANSFORM_INCLUDED
20 #define AGG_CONV_TRANSFORM_INCLUDED
21 
22 #include "agg_basics.h"
23 #include "agg_trans_affine.h"
24 
25 namespace agg
26 {
27 
28     //----------------------------------------------------------conv_transform
29     template<class VertexSource, class Transformer=trans_affine> class conv_transform
30     {
31     public:
32         conv_transform(VertexSource& source, const Transformer& tr) :
33             m_source(&source), m_trans(&tr) {}
34         void attach(VertexSource& source) { m_source = &source; }
35 
36         void rewind(unsigned path_id)
37         {
38             m_source->rewind(path_id);
39         }
40 
41         unsigned vertex(double* x, double* y)
42         {
43             unsigned cmd = m_source->vertex(x, y);
44             if(is_vertex(cmd))
45             {
46                 m_trans->transform(x, y);
47             }
48             return cmd;
49         }
50 
51         void transformer(const Transformer& tr)
52         {
53             m_trans = &tr;
54         }
55 
56     private:
57         conv_transform(const conv_transform<VertexSource>&);
58         const conv_transform<VertexSource>&
59             operator = (const conv_transform<VertexSource>&);
60 
61         VertexSource*      m_source;
62         const Transformer* m_trans;
63     };
64 
65 
66 }
67 
68 #endif
69