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// Adaptation for high precision colors has been sponsored by
17// Liberty Technology Systems, Inc., visit http://lib-sys.com
18//
19// Liberty Technology Systems, Inc. is the provider of
20// PostScript and PDF technology for software developers.
21//
22//----------------------------------------------------------------------------
23
24
25#ifndef AGG_SPAN_PATTERN_RGBA_INCLUDED
26#define AGG_SPAN_PATTERN_RGBA_INCLUDED
27
28#include "agg_basics.h"
29
30namespace agg
31{
32
33    //======================================================span_pattern_rgba
34    template<class Source> class span_pattern_rgba
35    {
36    public:
37        typedef Source source_type;
38        typedef typename source_type::color_type color_type;
39        typedef typename source_type::order_type order_type;
40        typedef typename color_type::value_type value_type;
41        typedef typename color_type::calc_type calc_type;
42
43        //--------------------------------------------------------------------
44        span_pattern_rgba() {}
45        span_pattern_rgba(source_type& src,
46                          unsigned offset_x, unsigned offset_y) :
47            m_src(&src),
48            m_offset_x(offset_x),
49            m_offset_y(offset_y)
50        {}
51
52        //--------------------------------------------------------------------
53        void   attach(source_type& v)      { m_src = &v; }
54               source_type& source()       { return *m_src; }
55        const  source_type& source() const { return *m_src; }
56
57        //--------------------------------------------------------------------
58        void       offset_x(unsigned v) { m_offset_x = v; }
59        void       offset_y(unsigned v) { m_offset_y = v; }
60        unsigned   offset_x() const { return m_offset_x; }
61        unsigned   offset_y() const { return m_offset_y; }
62        void       alpha(value_type) {}
63        value_type alpha() const { return 0; }
64
65        //--------------------------------------------------------------------
66        void prepare() {}
67        void generate(color_type* span, int x, int y, unsigned len)
68        {
69            x += m_offset_x;
70            y += m_offset_y;
71            const value_type* p = (const value_type*)m_src->span(x, y, len);
72            do
73            {
74                span->r = p[order_type::R];
75                span->g = p[order_type::G];
76                span->b = p[order_type::B];
77                span->a = p[order_type::A];
78                p = (const value_type*)m_src->next_x();
79                ++span;
80            }
81            while(--len);
82        }
83
84    private:
85        source_type* m_src;
86        unsigned     m_offset_x;
87        unsigned     m_offset_y;
88
89    };
90
91}
92
93#endif
94
95