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_RGB_INCLUDED 26 #define AGG_SPAN_PATTERN_RGB_INCLUDED 27 28 #include "agg_basics.h" 29 30 namespace agg 31 { 32 33 //========================================================span_pattern_rgb 34 template<class Source> class span_pattern_rgb 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_rgb() {} 45 span_pattern_rgb(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 m_alpha(color_type::base_mask) 51 {} 52 53 //-------------------------------------------------------------------- 54 void attach(source_type& v) { m_src = &v; } 55 source_type& source() { return *m_src; } 56 const source_type& source() const { return *m_src; } 57 58 //-------------------------------------------------------------------- 59 void offset_x(unsigned v) { m_offset_x = v; } 60 void offset_y(unsigned v) { m_offset_y = v; } 61 unsigned offset_x() const { return m_offset_x; } 62 unsigned offset_y() const { return m_offset_y; } 63 void alpha(value_type v) { m_alpha = v; } 64 value_type alpha() const { return m_alpha; } 65 66 //-------------------------------------------------------------------- 67 void prepare() {} 68 void generate(color_type* span, int x, int y, unsigned len) 69 { 70 x += m_offset_x; 71 y += m_offset_y; 72 const value_type* p = (const value_type*)m_src->span(x, y, len); 73 do 74 { 75 span->r = p[order_type::R]; 76 span->g = p[order_type::G]; 77 span->b = p[order_type::B]; 78 span->a = m_alpha; 79 p = m_src->next_x(); 80 ++span; 81 } 82 while(--len); 83 } 84 85 private: 86 source_type* m_src; 87 unsigned m_offset_x; 88 unsigned m_offset_y; 89 value_type m_alpha; 90 91 }; 92 93 } 94 95 #endif 96 97