xchar.cpp@1:9d081c7fff45, 2010-12-29 (annotated)
- Committer:
- Midimetric
- Date:
- Wed Dec 29 11:48:54 2010 +0000
- Revision:
- 1:9d081c7fff45
- Parent:
- 0:601fd83c75e0
- Child:
- 5:1c78c0b4f513
Beta 2. Xstring now returns last used y position.
Who changed what in which revision?
User | Revision | Line number | New 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 | 1:9d081c7fff45 | 32 | int DogMLCD::XString( int x, int y, const char* s, doggy_op raster ) |
Midimetric | 0:601fd83c75e0 | 33 | { |
Midimetric | 0:601fd83c75e0 | 34 | int oldx = x; |
Midimetric | 0:601fd83c75e0 | 35 | int trc = 0, brc = 0, inter = XFont[0].hei; |
Midimetric | 0:601fd83c75e0 | 36 | while( *s ) |
Midimetric | 0:601fd83c75e0 | 37 | { |
Midimetric | 0:601fd83c75e0 | 38 | if( *s == 13 ) |
Midimetric | 0:601fd83c75e0 | 39 | { |
Midimetric | 0:601fd83c75e0 | 40 | x = oldx; |
Midimetric | 0:601fd83c75e0 | 41 | y += inter; |
Midimetric | 0:601fd83c75e0 | 42 | } |
Midimetric | 0:601fd83c75e0 | 43 | else if( *s > 31 ) |
Midimetric | 0:601fd83c75e0 | 44 | { |
Midimetric | 0:601fd83c75e0 | 45 | XGlyph f = GetGlyph( *s ); |
Midimetric | 0:601fd83c75e0 | 46 | |
Midimetric | 0:601fd83c75e0 | 47 | while( ( x > 0 ) && ( trc + f.tlc ) > 0 && ( brc + f.blc ) > 0 ) |
Midimetric | 0:601fd83c75e0 | 48 | { |
Midimetric | 0:601fd83c75e0 | 49 | x--; |
Midimetric | 0:601fd83c75e0 | 50 | trc--; |
Midimetric | 0:601fd83c75e0 | 51 | brc--; |
Midimetric | 0:601fd83c75e0 | 52 | } |
Midimetric | 0:601fd83c75e0 | 53 | |
Midimetric | 0:601fd83c75e0 | 54 | if( x + f.wid > 128 ) // simplified form of [ x + f.wid - 1 > 127 ] |
Midimetric | 0:601fd83c75e0 | 55 | { |
Midimetric | 0:601fd83c75e0 | 56 | x = oldx; |
Midimetric | 0:601fd83c75e0 | 57 | y += inter; |
Midimetric | 0:601fd83c75e0 | 58 | if( *s != 32 ) // don't ouput begining space on new line |
Midimetric | 0:601fd83c75e0 | 59 | { |
Midimetric | 0:601fd83c75e0 | 60 | XChar( x, y, f, raster ); |
Midimetric | 0:601fd83c75e0 | 61 | x += f.wid + 1; |
Midimetric | 0:601fd83c75e0 | 62 | } |
Midimetric | 0:601fd83c75e0 | 63 | } |
Midimetric | 0:601fd83c75e0 | 64 | else |
Midimetric | 0:601fd83c75e0 | 65 | { |
Midimetric | 0:601fd83c75e0 | 66 | XChar( x, y, f, raster ); |
Midimetric | 0:601fd83c75e0 | 67 | x += f.wid + 1; |
Midimetric | 0:601fd83c75e0 | 68 | } |
Midimetric | 0:601fd83c75e0 | 69 | if( *s != 32 ) // for space keep crening of previous char |
Midimetric | 0:601fd83c75e0 | 70 | { |
Midimetric | 0:601fd83c75e0 | 71 | trc = f.trc; |
Midimetric | 0:601fd83c75e0 | 72 | brc = f.brc; |
Midimetric | 0:601fd83c75e0 | 73 | } |
Midimetric | 0:601fd83c75e0 | 74 | } |
Midimetric | 0:601fd83c75e0 | 75 | s++; |
Midimetric | 0:601fd83c75e0 | 76 | } |
Midimetric | 1:9d081c7fff45 | 77 | return y; |
Midimetric | 0:601fd83c75e0 | 78 | } |