xref: /haiku/headers/libs/agg/agg_span_interpolator_adaptor.h (revision d67f94ca9dc693a2734456fa13111d2036bc7297)
1 //----------------------------------------------------------------------------
2 // Anti-Grain Geometry - Version 2.2
3 // Copyright (C) 2002-2004 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 #ifndef AGG_SPAN_INTERPOLATOR_ADAPTOR_INCLUDED
17 #define AGG_SPAN_INTERPOLATOR_ADAPTOR_INCLUDED
18 
19 #include "agg_basics.h"
20 
21 namespace agg
22 {
23 
24     //===============================================span_interpolator_adaptor
25     template<class Interpolator, class Distortion>
26     class span_interpolator_adaptor : public Interpolator
27     {
28     public:
29         typedef Interpolator base_type;
30         typedef typename base_type::trans_type trans_type;
31         typedef Distortion distortion_type;
32 
33         //--------------------------------------------------------------------
34         span_interpolator_adaptor() {}
35         span_interpolator_adaptor(const trans_type& trans,
36                                   const distortion_type& dist) :
37             base_type(trans),
38             m_distortion(&dist)
39         {
40         }
41 
42         //--------------------------------------------------------------------
43         span_interpolator_adaptor(const trans_type& trans,
44                                   const distortion_type& dist,
45                                   double x, double y, unsigned len) :
46             base_type(trans, x, y, len),
47             m_distortion(&dist)
48         {
49         }
50 
51         //--------------------------------------------------------------------
52         const distortion_type& distortion() const
53         {
54             return *m_distortion;
55         }
56 
57         //--------------------------------------------------------------------
58         void distortion(const distortion_type& dist)
59         {
60             m_distortion = dist;
61         }
62 
63         //--------------------------------------------------------------------
64         void coordinates(int* x, int* y) const
65         {
66             base_type::coordinates(x, y);
67             m_distortion->calculate(x, y);
68         }
69 
70     private:
71         //--------------------------------------------------------------------
72         const distortion_type* m_distortion;
73     };
74 }
75 
76 
77 #endif
78