|  | 
 | //---------------------------------------------------------------------------- | 
 | // 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 | 
 | //---------------------------------------------------------------------------- | 
 | // | 
 | // class rendering_buffer | 
 | // | 
 | //---------------------------------------------------------------------------- | 
 | #ifndef AGG_RENDERING_BUFFER_INCLUDED | 
 | #define AGG_RENDERING_BUFFER_INCLUDED | 
 | #include "agg_basics.h" | 
 | namespace pdfium | 
 | { | 
 | namespace agg | 
 | { | 
 | class rendering_buffer  | 
 | { | 
 | public: | 
 |     struct row_data  { | 
 |         int x1, x2; | 
 |         const int8u* ptr; | 
 |         row_data() {} | 
 |         row_data(int x1_, int x2_, const int8u* ptr_) : | 
 |             x1(x1_), x2(x2_), ptr(ptr_) {} | 
 |     }; | 
 |     struct span_data  { | 
 |         int x; | 
 |         unsigned len; | 
 |         int8u* ptr; | 
 |         span_data() {} | 
 |         span_data(int) : x(0), len(0), ptr(0) {} | 
 |         span_data(int x_, unsigned len_, int8u* ptr_) : | 
 |             x(x_), len(len_), ptr(ptr_) {} | 
 |     }; | 
 |     ~rendering_buffer() | 
 |     { | 
 |         FX_Free(m_rows); | 
 |     } | 
 |     rendering_buffer() : | 
 |         m_buf(0), | 
 |         m_rows(0), | 
 |         m_width(0), | 
 |         m_height(0), | 
 |         m_stride(0), | 
 |         m_max_height(0) | 
 |     { | 
 |     } | 
 |     rendering_buffer(int8u* buf, unsigned width, unsigned height, int stride) : | 
 |         m_buf(0), | 
 |         m_rows(0), | 
 |         m_width(0), | 
 |         m_height(0), | 
 |         m_stride(0), | 
 |         m_max_height(0) | 
 |     { | 
 |         attach(buf, width, height, stride); | 
 |     } | 
 |     void attach(int8u* buf, unsigned width, unsigned height, int stride) | 
 |     { | 
 |         m_buf = buf; | 
 |         m_width = width; | 
 |         m_height = height; | 
 |         m_stride = stride; | 
 |         if(height > m_max_height) { | 
 |             FX_Free(m_rows); | 
 |             m_rows = FX_Alloc(int8u*, m_max_height = height); | 
 |         } | 
 |         int8u* row_ptr = m_buf; | 
 |         if(stride < 0) { | 
 |             row_ptr = m_buf - int(height - 1) * stride; | 
 |         } | 
 |         int8u** rows = m_rows; | 
 |         while(height--) { | 
 |             *rows++ = row_ptr; | 
 |             row_ptr += stride; | 
 |         } | 
 |     } | 
 |     int8u* buf() | 
 |     { | 
 |         return m_buf; | 
 |     } | 
 |     const int8u* buf()    const | 
 |     { | 
 |         return m_buf; | 
 |     } | 
 |     unsigned width()  const | 
 |     { | 
 |         return m_width; | 
 |     } | 
 |     unsigned height() const | 
 |     { | 
 |         return m_height; | 
 |     } | 
 |     int      stride() const | 
 |     { | 
 |         return m_stride; | 
 |     } | 
 |     unsigned stride_abs() const | 
 |     { | 
 |         return (m_stride < 0) ? | 
 |                unsigned(-m_stride) : | 
 |                unsigned(m_stride); | 
 |     } | 
 |     int8u* row(unsigned y) | 
 |     { | 
 |         return m_rows[y]; | 
 |     } | 
 |     const int8u* row(unsigned y) const | 
 |     { | 
 |         return m_rows[y]; | 
 |     } | 
 |     int8u* next_row(void* p) | 
 |     { | 
 |         return (int8u*)p + m_stride; | 
 |     } | 
 |     const int8u* next_row(const void* p) const | 
 |     { | 
 |         return (int8u*)p + m_stride; | 
 |     } | 
 |     int8u const* const* rows() const | 
 |     { | 
 |         return m_rows; | 
 |     } | 
 | private: | 
 |     rendering_buffer(const rendering_buffer&); | 
 |     const rendering_buffer& operator = (const rendering_buffer&); | 
 | private: | 
 |     int8u*       m_buf; | 
 |     int8u**      m_rows; | 
 |     unsigned m_width; | 
 |     unsigned m_height; | 
 |     int      m_stride; | 
 |     unsigned m_max_height; | 
 | }; | 
 | } | 
 | }  // namespace pdfium | 
 | #endif |