Versión de Firmware con funciones de RAM incorporadas.
Dependencies: mbed
Fork of VmRecorderV1dot1 by
Diff: Doggy/xchar.cpp
- Revision:
- 0:3d456b8ce449
diff -r 000000000000 -r 3d456b8ce449 Doggy/xchar.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Doggy/xchar.cpp Mon Jun 15 15:34:27 2015 +0000 @@ -0,0 +1,90 @@ +#include "doggy.h" + +XGlyph DogMLCD::GetGlyph( int code ) +{ + if( code > 31 && code < 256 ) + return XFont[code - 31]; + return XFont[0]; +} + +void DogMLCD::XChar( int x, int y, int code, doggy_op raster ) +{ + XChar( x, y, GetGlyph( code ) ); +} +void DogMLCD::XChar( int x, int y, XGlyph f, doggy_op raster ) +{ + const char* p = f.bmp; + RasterOp op = ((RasterOp[]){ &DogMLCD::Poke, &DogMLCD::Wipe, &DogMLCD::Inv })[raster]; + int y1 = y + f.hei; + for( int w = 0 ; w < f.wid ; w++ ) + { + for( int z = y, m = 1 ; z < y1 ; z++ ) + { + if( m == 256 ) { m = 1; p++; } + if( *p & m ) + (this->*op)( x, z ); + m <<= 1; + } + p++; + x++; + } +} +int DogMLCD::XString( int x, int y, int i, doggy_op raster ) +{ + char buf[32]; + sprintf( buf, "%d", i ); + return XString( x, y, buf, raster ); +} +int DogMLCD::XString( int x, int y, float f, doggy_op raster ) +{ + char buf[32]; + sprintf( buf, "%f", f ); + return XString( x, y, buf, raster ); +} +int DogMLCD::XString( int x, int y, const char* s, doggy_op raster ) +{ + int oldx = x; + int trc = 0, brc = 0, inter = XFont[0].hei; + while( *s ) + { + if( *s == 13 ) + { + x = oldx; + y += inter; + } + else if( *s > 31 ) + { + XGlyph f = GetGlyph( *s ); + + while( ( x > 0 ) && ( trc + f.tlc ) > 0 && ( brc + f.blc ) > 0 ) + { + x--; + trc--; + brc--; + } + + if( x + f.wid > 128 ) // simplified form of [ x + f.wid - 1 > 127 ] + { + x = oldx; + y += inter; + if( *s != 32 ) // don't ouput begining space on new line + { + XChar( x, y, f, raster ); + x += f.wid + 1; + } + } + else + { + XChar( x, y, f, raster ); + x += f.wid + 1; + } + if( *s != 32 ) // for space keep crening of previous char + { + trc = f.trc; + brc = f.brc; + } + } + s++; + } + return y; +}