diff options
author | Daniel Stenberg <daniel@haxx.se> | 2002-04-12 14:05:45 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2002-04-12 14:05:45 +0000 |
commit | 705a6d9b46fffd36ad50e23817b02b83fcae89bb (patch) | |
tree | be5942219080183ada80dafb69fc58a63d018913 /firmware | |
parent | 98161567e4c4a0d68c3af70759eb2b8c2ce6cac0 (diff) | |
download | rockbox-705a6d9b46fffd36ad50e23817b02b83fcae89bb.tar.gz rockbox-705a6d9b46fffd36ad50e23817b02b83fcae89bb.zip |
Bresenham line drawing code added, as posted by Björn Stenberg
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@89 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/lcd.c | 72 |
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 | |||
418 | void 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 |