summaryrefslogtreecommitdiff
path: root/agg/inc/agg_span_pattern_rgba.h
diff options
context:
space:
mode:
Diffstat (limited to 'agg/inc/agg_span_pattern_rgba.h')
-rwxr-xr-xagg/inc/agg_span_pattern_rgba.h111
1 files changed, 111 insertions, 0 deletions
diff --git a/agg/inc/agg_span_pattern_rgba.h b/agg/inc/agg_span_pattern_rgba.h
new file mode 100755
index 000000000000..d952d0733696
--- /dev/null
+++ b/agg/inc/agg_span_pattern_rgba.h
@@ -0,0 +1,111 @@
+//----------------------------------------------------------------------------
+// Anti-Grain Geometry - Version 2.3
+// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
+//
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+//
+//----------------------------------------------------------------------------
+// Contact: mcseem@antigrain.com
+// mcseemagg@yahoo.com
+// http://www.antigrain.com
+//----------------------------------------------------------------------------
+//
+// Adaptation for high precision colors has been sponsored by
+// Liberty Technology Systems, Inc., visit http://lib-sys.com
+//
+// Liberty Technology Systems, Inc. is the provider of
+// PostScript and PDF technology for software developers.
+//
+//----------------------------------------------------------------------------
+
+
+#ifndef AGG_SPAN_PATTERN_RGBA_INCLUDED
+#define AGG_SPAN_PATTERN_RGBA_INCLUDED
+
+#include "agg_basics.h"
+#include "agg_pixfmt_rgba.h"
+#include "agg_span_pattern.h"
+
+namespace agg
+{
+
+ //======================================================span_pattern_rgba
+ template<class ColorT,
+ class Order,
+ class WrapModeX,
+ class WrapModeY,
+ class Allocator = span_allocator<ColorT> >
+ class span_pattern_rgba : public span_pattern_base<ColorT, Allocator>
+ {
+ public:
+ typedef ColorT color_type;
+ typedef Order order_type;
+ typedef Allocator alloc_type;
+ typedef span_pattern_base<color_type, alloc_type> base_type;
+ typedef typename color_type::value_type value_type;
+ typedef typename color_type::calc_type calc_type;
+ enum
+ {
+ base_shift = color_type::base_shift,
+ base_mask = color_type::base_mask
+ };
+
+ //--------------------------------------------------------------------
+ span_pattern_rgba(alloc_type& alloc) :
+ base_type(alloc),
+ m_wrap_mode_x(1),
+ m_wrap_mode_y(1)
+ {}
+
+ //----------------------------------------------------------------
+ span_pattern_rgba(alloc_type& alloc,
+ const rendering_buffer& src,
+ unsigned offset_x, unsigned offset_y) :
+ base_type(alloc, src, offset_x, offset_y, 0),
+ m_wrap_mode_x(src.width()),
+ m_wrap_mode_y(src.height())
+ {}
+
+ //-------------------------------------------------------------------
+ void source_image(const rendering_buffer& src)
+ {
+ base_type::source_image(src);
+ m_wrap_mode_x = WrapModeX(src.width());
+ m_wrap_mode_y = WrapModeY(src.height());
+ }
+
+ //--------------------------------------------------------------------
+ color_type* generate(int x, int y, unsigned len)
+ {
+ color_type* span = base_type::allocator().span();
+ unsigned sx = m_wrap_mode_x(base_type::offset_x() + x);
+ const value_type* row_ptr =
+ (const value_type*)base_type::source_image().row(
+ m_wrap_mode_y(
+ base_type::offset_y() + y));
+ do
+ {
+ const value_type* p = row_ptr + (sx << 2);
+ span->r = p[order_type::R];
+ span->g = p[order_type::G];
+ span->b = p[order_type::B];
+ span->a = p[order_type::A];
+ sx = ++m_wrap_mode_x;
+ ++span;
+ }
+ while(--len);
+ return base_type::allocator().span();
+ }
+
+ private:
+ WrapModeX m_wrap_mode_x;
+ WrapModeY m_wrap_mode_y;
+ };
+
+}
+
+#endif
+