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 #ifndef AGG_PIXFMT_TRANSPOSER_INCLUDED
17 #define AGG_PIXFMT_TRANSPOSER_INCLUDED
18 
19 #include "agg_basics.h"
20 
21 namespace agg
22 {
23     //=======================================================pixfmt_transposer
24     template<class PixFmt> class pixfmt_transposer
25     {
26     public:
27         typedef PixFmt pixfmt_type;
28         typedef typename pixfmt_type::color_type color_type;
29         typedef typename pixfmt_type::row_data row_data;
30         typedef typename color_type::value_type value_type;
31         typedef typename color_type::calc_type calc_type;
32 
33         //--------------------------------------------------------------------
pixfmt_transposer()34         pixfmt_transposer() : m_pixf(0) {}
pixfmt_transposer(pixfmt_type & pixf)35         explicit pixfmt_transposer(pixfmt_type& pixf) : m_pixf(&pixf) {}
attach(pixfmt_type & pixf)36         void attach(pixfmt_type& pixf) { m_pixf = &pixf; }
37 
38         //--------------------------------------------------------------------
width()39         AGG_INLINE unsigned width()  const { return m_pixf->height();  }
height()40         AGG_INLINE unsigned height() const { return m_pixf->width(); }
41 
42         //--------------------------------------------------------------------
pixel(int x,int y)43         AGG_INLINE color_type pixel(int x, int y) const
44         {
45             return m_pixf->pixel(y, x);
46         }
47 
48         //--------------------------------------------------------------------
copy_pixel(int x,int y,const color_type & c)49         AGG_INLINE void copy_pixel(int x, int y, const color_type& c)
50         {
51             m_pixf->copy_pixel(y, x, c);
52         }
53 
54         //--------------------------------------------------------------------
blend_pixel(int x,int y,const color_type & c,int8u cover)55         AGG_INLINE void blend_pixel(int x, int y,
56                                     const color_type& c,
57                                     int8u cover)
58         {
59             m_pixf->blend_pixel(y, x, c, cover);
60         }
61 
62         //--------------------------------------------------------------------
copy_hline(int x,int y,unsigned len,const color_type & c)63         AGG_INLINE void copy_hline(int x, int y,
64                                    unsigned len,
65                                    const color_type& c)
66         {
67             m_pixf->copy_vline(y, x, len, c);
68         }
69 
70         //--------------------------------------------------------------------
copy_vline(int x,int y,unsigned len,const color_type & c)71         AGG_INLINE void copy_vline(int x, int y,
72                                    unsigned len,
73                                    const color_type& c)
74         {
75             m_pixf->copy_hline(y, x, len, c);
76         }
77 
78         //--------------------------------------------------------------------
blend_hline(int x,int y,unsigned len,const color_type & c,int8u cover)79         AGG_INLINE void blend_hline(int x, int y,
80                                     unsigned len,
81                                     const color_type& c,
82                                     int8u cover)
83         {
84             m_pixf->blend_vline(y, x, len, c, cover);
85         }
86 
87         //--------------------------------------------------------------------
blend_vline(int x,int y,unsigned len,const color_type & c,int8u cover)88         AGG_INLINE void blend_vline(int x, int y,
89                                     unsigned len,
90                                     const color_type& c,
91                                     int8u cover)
92         {
93             m_pixf->blend_hline(y, x, len, c, cover);
94         }
95 
96         //--------------------------------------------------------------------
blend_solid_hspan(int x,int y,unsigned len,const color_type & c,const int8u * covers)97         AGG_INLINE void blend_solid_hspan(int x, int y,
98                                           unsigned len,
99                                           const color_type& c,
100                                           const int8u* covers)
101         {
102             m_pixf->blend_solid_vspan(y, x, len, c, covers);
103         }
104 
105         //--------------------------------------------------------------------
blend_solid_vspan(int x,int y,unsigned len,const color_type & c,const int8u * covers)106         AGG_INLINE void blend_solid_vspan(int x, int y,
107                                           unsigned len,
108                                           const color_type& c,
109                                           const int8u* covers)
110         {
111             m_pixf->blend_solid_hspan(y, x, len, c, covers);
112         }
113 
114         //--------------------------------------------------------------------
copy_color_hspan(int x,int y,unsigned len,const color_type * colors)115         AGG_INLINE void copy_color_hspan(int x, int y,
116                                          unsigned len,
117                                          const color_type* colors)
118         {
119             m_pixf->copy_color_vspan(y, x, len, colors);
120         }
121 
122         //--------------------------------------------------------------------
copy_color_vspan(int x,int y,unsigned len,const color_type * colors)123         AGG_INLINE void copy_color_vspan(int x, int y,
124                                          unsigned len,
125                                          const color_type* colors)
126         {
127             m_pixf->copy_color_hspan(y, x, len, colors);
128         }
129 
130         //--------------------------------------------------------------------
blend_color_hspan(int x,int y,unsigned len,const color_type * colors,const int8u * covers,int8u cover)131         AGG_INLINE void blend_color_hspan(int x, int y,
132                                           unsigned len,
133                                           const color_type* colors,
134                                           const int8u* covers,
135                                           int8u cover)
136         {
137             m_pixf->blend_color_vspan(y, x, len, colors, covers, cover);
138         }
139 
140         //--------------------------------------------------------------------
blend_color_vspan(int x,int y,unsigned len,const color_type * colors,const int8u * covers,int8u cover)141         AGG_INLINE void blend_color_vspan(int x, int y,
142                                unsigned len,
143                                const color_type* colors,
144                                const int8u* covers,
145                                int8u cover)
146         {
147             m_pixf->blend_color_hspan(y, x, len, colors, covers, cover);
148         }
149 
150     private:
151         pixfmt_type* m_pixf;
152     };
153 }
154 
155 #endif
156 
157 
158