/elec/propeller-clock

To get this branch, use:
bzr branch http://bzr.ed.am/elec/propeller-clock

« back to all changes in this revision

Viewing changes to src/text_renderer.cc

  • Committer: Tim Marston
  • Date: 2013-03-31 17:07:11 UTC
  • Revision ID: tim@ed.am-20130331170711-okfhn3wx9y0eo99a
updated the schematic to increase minimum font size

Show diffs side-by-side

added added

removed removed

Lines of Context:
47
47
// cache a glyph
48
48
void cache_glyph( char c )
49
49
{
50
 
        static char fonts[][ 66 * 8 ] PROGMEM = {
 
50
        static char fonts[][ 67 * 8 ] PROGMEM = {
51
51
                { // INVD-A
52
52
                        0x00, 0x7c, 0x7e, 0x12, 0x12, 0x12, 0x7e, 0x7c, // A
53
53
                        0x00, 0x7e, 0x7e, 0x4a, 0x4a, 0x4a, 0x7e, 0x34, // B
115
115
                        0x00, 0x00, 0x00, 0x6c, 0x6c, 0x00, 0x00, 0x00, // :
116
116
                        0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, // .
117
117
                        0x00, 0x00, 0x00, 0x80, 0xe0, 0x60, 0x00, 0x00, // ,
 
118
                        0x00, 0x00, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, // /
118
119
                }, { // INVD-D
119
120
                        0x00, 0x7f, 0x7f, 0x09, 0x09, 0x09, 0x7f, 0x7f, // A
120
121
                        0x00, 0x7f, 0x7f, 0x49, 0x49, 0x49, 0x7f, 0x77, // B
182
183
                        0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, // :
183
184
                        0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, // .
184
185
                        0x00, 0x00, 0x80, 0xe0, 0x60, 0x00, 0x00, 0x00, // ,
 
186
                        0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x03, 0x00, // /
185
187
                }, { // INVD-G
186
188
                        0x7c, 0x7e, 0x22, 0x7e, 0x7e, 0x7e, 0x7c, 0x00, // A
187
189
                        0x7c, 0x7e, 0x7e, 0x7e, 0x4a, 0x7e, 0x34, 0x00, // B
249
251
                        0x00, 0x00, 0x28, 0x7c, 0x7c, 0x28, 0x00, 0x00, // :
250
252
                        0x00, 0x00, 0x30, 0x78, 0x78, 0x30, 0x00, 0x00, // .
251
253
                        0x00, 0x00, 0x10, 0xb8, 0xf8, 0x70, 0x00, 0x00, // ,
 
254
                        0x60, 0x70, 0x38, 0x1c, 0x0e, 0x07, 0x03, 0x00, // /
252
255
                }, { // INVD-B
253
256
                        0x00, 0x78, 0x7f, 0x09, 0x09, 0x0f, 0x78, 0x00, // A
254
257
                        0x00, 0x7f, 0x79, 0x49, 0x49, 0x4f, 0x78, 0x00, // B
316
319
                        0x00, 0x00, 0x00, 0x6c, 0x6c, 0x00, 0x00, 0x00, // :
317
320
                        0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, // .
318
321
                        0x00, 0x00, 0x00, 0x60, 0xe0, 0x00, 0x00, 0x00, // ,
 
322
                        0x00, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, // /
319
323
                }
320
324
        };
321
325
 
340
344
                pos = 64;
341
345
        else if( c == ',' )
342
346
                pos = 65;
 
347
        else if( c == '/' )
 
348
                pos = 66;
343
349
        else
344
350
                pos = -1;
345
351
 
358
364
}
359
365
 
360
366
 
361
 
int TextRenderer::get_width( int message_len )
 
367
int TextRenderer::get_width( int message_len, int scale )
362
368
{
363
 
        return message_len * 8 * TEXT_SCALE;
 
369
        return message_len * 8 * scale;
364
370
}
365
371
 
366
372
 
367
373
void TextRenderer::render( const char *message, int message_len, int x,
368
 
                                                   bool y_flip, int y_shift )
 
374
                                                   bool y_flip, int y_shift, int scale )
369
375
{
370
376
        char glyph_col = 0;
371
377
 
373
379
        if( x >= 0 )
374
380
        {
375
381
                // scale font
376
 
                x /= TEXT_SCALE;
 
382
                x /= scale;
377
383
 
378
384
                int pos = x / 8;
379
385
                if( pos < message_len )
417
423
{
418
424
        if( !_need_render ) return;
419
425
 
 
426
        // outer led on
 
427
        led( 9, true );
 
428
 
 
429
        // output buffer
420
430
        for( int a = 8; a >= 0; a-- ) {
421
431
                led( a, ( _output_buffer & 1 )? true : false );
422
432
                _output_buffer >>= 1;