/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: 2012-03-21 20:35:28 UTC
  • Revision ID: tim@ed.am-20120321203528-wfhpych1tub75rgj
fixed bug initialising text services on mode activation

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
#include "config.h"
25
25
#include "Arduino.h"
26
26
#include <avr/pgmspace.h>
27
 
#include "display.h"
 
27
#include "common.h"
28
28
 
29
29
 
30
30
// cached glyph
39
39
// output buffer
40
40
static unsigned char _output_buffer;
41
41
 
 
42
// does buffer need rendering?
 
43
static bool _need_render;
 
44
 
42
45
 
43
46
// cache a glyph
44
47
void cache_glyph( char c )
367
370
                int pos = x / 8;
368
371
                if( pos < message_len )
369
372
                {
370
 
                        // ensure correct glyph is cached and pull out colun of data
 
373
                        // ensure correct glyph is cached and pull out column of data
371
374
                        cache_glyph( message[ pos ] );
372
375
                        glyph_col = _glyph_cache[ x % 8 ];
373
376
                }
375
378
 
376
379
        // draw a column
377
380
        if( y_flip )
 
381
                for( int a = 7; a >= 0; a-- ) {
 
382
                        if( glyph_col & 1 )
 
383
                                _output_buffer |= 1 << ( a + y_shift );
 
384
                        glyph_col >>= 1;
 
385
                }
 
386
        else
378
387
                for( int a = 0; a < 8; a++ ) {
379
388
                        if( glyph_col & 1 )
380
389
                                _output_buffer |= 1 << ( a + y_shift );
381
390
                        glyph_col >>= 1;
382
391
                }
383
 
        else
384
 
                for( int a = 8; a < 0; a++ ) {
385
 
                        if( glyph_col & 1 )
386
 
                                _output_buffer |= 1 << ( a + y_shift );
387
 
                        glyph_col >>= 1;
388
 
                }
389
392
}
390
393
 
391
394
 
392
395
void TextRenderer::reset_buffer()
393
396
{
394
397
        _output_buffer = 0;
 
398
        _need_render = false;
 
399
}
 
400
 
 
401
 
 
402
void TextRenderer::buffer_in_use()
 
403
{
 
404
        _need_render = true;
395
405
}
396
406
 
397
407
 
398
408
void TextRenderer::output_buffer()
399
409
{
 
410
        if( !_need_render ) return;
 
411
 
400
412
        for( int a = 8; a >= 0; a-- ) {
401
 
                Display::led( a, ( _output_buffer & 1 )? true : false );
 
413
                led( a, ( _output_buffer & 1 )? true : false );
402
414
                _output_buffer >>= 1;
403
415
        }
404
416
        _output_buffer = 0;
405
417
}
 
418
 
 
419
 
 
420
int TextRenderer::get_font()
 
421
{
 
422
        return _font;
 
423
}
 
424
 
 
425
 
 
426
void TextRenderer::inc_font()
 
427
{
 
428
        if( ++_font >= 4 )
 
429
                _font = 0;
 
430
}