Committer:
Midimetric
Date:
Sun Feb 06 13:30:28 2011 +0000
Revision:
5:1c78c0b4f513
Parent:
1:9d081c7fff45

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Midimetric 0:601fd83c75e0 1 #include "doggy.h"
Midimetric 0:601fd83c75e0 2
Midimetric 0:601fd83c75e0 3 XGlyph DogMLCD::GetGlyph( int code )
Midimetric 0:601fd83c75e0 4 {
Midimetric 0:601fd83c75e0 5 if( code > 31 && code < 256 )
Midimetric 0:601fd83c75e0 6 return XFont[code - 31];
Midimetric 0:601fd83c75e0 7 return XFont[0];
Midimetric 0:601fd83c75e0 8 }
Midimetric 0:601fd83c75e0 9
Midimetric 0:601fd83c75e0 10 void DogMLCD::XChar( int x, int y, int code, doggy_op raster )
Midimetric 0:601fd83c75e0 11 {
Midimetric 0:601fd83c75e0 12 XChar( x, y, GetGlyph( code ) );
Midimetric 0:601fd83c75e0 13 }
Midimetric 0:601fd83c75e0 14 void DogMLCD::XChar( int x, int y, XGlyph f, doggy_op raster )
Midimetric 0:601fd83c75e0 15 {
Midimetric 0:601fd83c75e0 16 const char* p = f.bmp;
Midimetric 0:601fd83c75e0 17 RasterOp op = ((RasterOp[]){ &DogMLCD::Poke, &DogMLCD::Wipe, &DogMLCD::Inv })[raster];
Midimetric 0:601fd83c75e0 18 int y1 = y + f.hei;
Midimetric 0:601fd83c75e0 19 for( int w = 0 ; w < f.wid ; w++ )
Midimetric 0:601fd83c75e0 20 {
Midimetric 0:601fd83c75e0 21 for( int z = y, m = 1 ; z < y1 ; z++ )
Midimetric 0:601fd83c75e0 22 {
Midimetric 0:601fd83c75e0 23 if( m == 256 ) { m = 1; p++; }
Midimetric 0:601fd83c75e0 24 if( *p & m )
Midimetric 0:601fd83c75e0 25 (this->*op)( x, z );
Midimetric 0:601fd83c75e0 26 m <<= 1;
Midimetric 0:601fd83c75e0 27 }
Midimetric 0:601fd83c75e0 28 p++;
Midimetric 0:601fd83c75e0 29 x++;
Midimetric 0:601fd83c75e0 30 }
Midimetric 0:601fd83c75e0 31 }
Midimetric 5:1c78c0b4f513 32 int DogMLCD::XString( int x, int y, int i, doggy_op raster )
Midimetric 5:1c78c0b4f513 33 {
Midimetric 5:1c78c0b4f513 34 char buf[32];
Midimetric 5:1c78c0b4f513 35 sprintf( buf, "%d", i );
Midimetric 5:1c78c0b4f513 36 return XString( x, y, buf, raster );
Midimetric 5:1c78c0b4f513 37 }
Midimetric 5:1c78c0b4f513 38 int DogMLCD::XString( int x, int y, float f, doggy_op raster )
Midimetric 5:1c78c0b4f513 39 {
Midimetric 5:1c78c0b4f513 40 char buf[32];
Midimetric 5:1c78c0b4f513 41 sprintf( buf, "%f", f );
Midimetric 5:1c78c0b4f513 42 return XString( x, y, buf, raster );
Midimetric 5:1c78c0b4f513 43 }
Midimetric 1:9d081c7fff45 44 int DogMLCD::XString( int x, int y, const char* s, doggy_op raster )
Midimetric 0:601fd83c75e0 45 {
Midimetric 0:601fd83c75e0 46 int oldx = x;
Midimetric 0:601fd83c75e0 47 int trc = 0, brc = 0, inter = XFont[0].hei;
Midimetric 0:601fd83c75e0 48 while( *s )
Midimetric 0:601fd83c75e0 49 {
Midimetric 0:601fd83c75e0 50 if( *s == 13 )
Midimetric 0:601fd83c75e0 51 {
Midimetric 0:601fd83c75e0 52 x = oldx;
Midimetric 0:601fd83c75e0 53 y += inter;
Midimetric 0:601fd83c75e0 54 }
Midimetric 0:601fd83c75e0 55 else if( *s > 31 )
Midimetric 0:601fd83c75e0 56 {
Midimetric 0:601fd83c75e0 57 XGlyph f = GetGlyph( *s );
Midimetric 0:601fd83c75e0 58
Midimetric 0:601fd83c75e0 59 while( ( x > 0 ) && ( trc + f.tlc ) > 0 && ( brc + f.blc ) > 0 )
Midimetric 0:601fd83c75e0 60 {
Midimetric 0:601fd83c75e0 61 x--;
Midimetric 0:601fd83c75e0 62 trc--;
Midimetric 0:601fd83c75e0 63 brc--;
Midimetric 0:601fd83c75e0 64 }
Midimetric 0:601fd83c75e0 65
Midimetric 0:601fd83c75e0 66 if( x + f.wid > 128 ) // simplified form of [ x + f.wid - 1 > 127 ]
Midimetric 0:601fd83c75e0 67 {
Midimetric 0:601fd83c75e0 68 x = oldx;
Midimetric 0:601fd83c75e0 69 y += inter;
Midimetric 0:601fd83c75e0 70 if( *s != 32 ) // don't ouput begining space on new line
Midimetric 0:601fd83c75e0 71 {
Midimetric 0:601fd83c75e0 72 XChar( x, y, f, raster );
Midimetric 0:601fd83c75e0 73 x += f.wid + 1;
Midimetric 0:601fd83c75e0 74 }
Midimetric 0:601fd83c75e0 75 }
Midimetric 0:601fd83c75e0 76 else
Midimetric 0:601fd83c75e0 77 {
Midimetric 0:601fd83c75e0 78 XChar( x, y, f, raster );
Midimetric 0:601fd83c75e0 79 x += f.wid + 1;
Midimetric 0:601fd83c75e0 80 }
Midimetric 0:601fd83c75e0 81 if( *s != 32 ) // for space keep crening of previous char
Midimetric 0:601fd83c75e0 82 {
Midimetric 0:601fd83c75e0 83 trc = f.trc;
Midimetric 0:601fd83c75e0 84 brc = f.brc;
Midimetric 0:601fd83c75e0 85 }
Midimetric 0:601fd83c75e0 86 }
Midimetric 0:601fd83c75e0 87 s++;
Midimetric 0:601fd83c75e0 88 }
Midimetric 1:9d081c7fff45 89 return y;
Midimetric 0:601fd83c75e0 90 }