Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members  

drawing_area.cpp

Go to the documentation of this file.
00001 #include "drawing_area.h"
00002 
00003 namespace crs {
00004 
00005   drawing_area::drawing_area( const chtype Background, unsigned int Width, unsigned int Height ):
00006     width( Width ), height( Height ), background( Background ), buffer(0) {
00007       resize_buffer();
00008     }
00009 
00010   void drawing_area::resize_buffer() {
00011     delete [] buffer;
00012     buffer = new chtype[ width * height ];
00013     std::memset( buffer, background, width * height * sizeof( chtype ) );
00014   }
00015 
00016   void drawing_area::setText( const std::string &text, const unsigned int x, const unsigned int y ) {
00017     if( width * height == 0 )
00018       return;
00019     if( y >= height )
00020       return;
00021     unsigned int max = text.size() + x < width ? text.size() : width - x;
00022     for( unsigned int i=0; i < max; i++ )
00023       buffer[ x + i + ( y * width ) ] = text[i];
00024   }
00025 
00026   void drawing_area::drawHLine( const unsigned int x, const unsigned int y, unsigned int len, const chtype ch ) {
00027     if( width * height == 0 )
00028       return;
00029     if( x + len > width )
00030       len = width - x;
00031     chtype *foo = &buffer[ y * width + x ];
00032     for( unsigned int i = 0; i < len; i++ )
00033       *foo++ = ch;
00034   }
00035 
00036   void drawing_area::drawVLine( const unsigned int x, const unsigned int y, unsigned int height, const chtype ch ) {
00037     if( width * height == 0 )
00038       return;
00039     for( unsigned int i = 0; i < height; i++ ) {
00040       buffer[ x + ( i + y ) * width ] = ch;
00041     }
00042   }
00043 
00044   void drawing_area::fillRect( const unsigned int x1, const unsigned int y1, const unsigned int x2, const unsigned int y2, const chtype ch ) {
00045     if( width * height == 0 )
00046       return;
00047     if( x1 > x2 || y1 > y2 )
00048       throw bad_coords();
00049     for( unsigned int y = 1; y <= y2 - y1; y++ )
00050       drawHLine( x1, y, x2 - x1, ch );
00051   }
00052 
00053   void drawing_area::resize( const unsigned int Width, const unsigned int Height ) {
00054     width = Width;
00055     height = Height;
00056     resize_buffer();
00057   }
00058 
00059   void drawing_area::putPixel( const unsigned int x, const unsigned int y, const chtype ch ) {
00060     buffer[ x + ( y * width ) ] = ch;
00061   }
00062 
00063   void drawing_area::fill( const chtype ch ) {
00064     std::memset( buffer, ch, width * height * sizeof( chtype ) );
00065   }
00066 
00067 }

Generated on Mon May 19 20:36:03 2003 for cursive by doxygen1.2.18