summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/lcd.c72
1 files changed, 72 insertions, 0 deletions
diff --git a/firmware/lcd.c b/firmware/lcd.c
index 1bf0ad9507..932cb5a3e7 100644
--- a/firmware/lcd.c
+++ b/firmware/lcd.c
@@ -413,6 +413,78 @@ void lcd_invertrect (int x, int y, int nx, int ny)
413 lcd_bitmap (ones, x+i, y, 1, ny, FALSE); 413 lcd_bitmap (ones, x+i, y, 1, ny, FALSE);
414} 414}
415 415
416#define DRAW_PIXEL(x,y) display[x][y/8] |= (1<<(y%7))
417
418void lcd_drawline( int x1, int y1, int x2, int y2 )
419{
420 int numpixels;
421 int i;
422 int deltax, deltay;
423 int d, dinc1, dinc2;
424 int x, xinc1, xinc2;
425 int y, yinc1, yinc2;
426
427 deltax = abs(x2 - x1);
428 deltay = abs(y2 - y1);
429
430 if(deltax >= deltay)
431 {
432 numpixels = deltax;
433 d = 2 * deltay - deltax;
434 dinc1 = deltay * 2;
435 dinc2 = (deltay - deltax) * 2;
436 xinc1 = 1;
437 xinc2 = 1;
438 yinc1 = 0;
439 yinc2 = 1;
440 }
441 else
442 {
443 numpixels = deltay;
444 d = 2 * deltax - deltay;
445 dinc1 = deltax * 2;
446 dinc2 = (deltax - deltay) * 2;
447 xinc1 = 0;
448 xinc2 = 1;
449 yinc1 = 1;
450 yinc2 = 1;
451 }
452 numpixels++; /* include endpoints */
453
454 if(x1 > x2)
455 {
456 xinc1 = -xinc1;
457 xinc2 = -xinc2;
458 }
459
460 if(y1 > y2)
461 {
462 yinc1 = -yinc1;
463 yinc2 = -yinc2;
464 }
465
466 x = x1;
467 y = y1;
468
469 for(i=0; i<numpixels; i++)
470 {
471 DRAW_PIXEL(x,y);
472
473 if(d < 0)
474 {
475 d += dinc1;
476 x += xinc1;
477 y += yinc1;
478 }
479 else
480 {
481 d += dinc2;
482 x += xinc2;
483 y += yinc2;
484 }
485 }
486}
487
416#else 488#else
417/* no LCD defined, no code to use */ 489/* no LCD defined, no code to use */
418#endif 490#endif