Added circle and line support
Diff: NokiaLCD.cpp
- Revision:
- 1:14c8b85b34d0
- Parent:
- 0:8439874eb019
- Child:
- 2:d99e9681356b
--- a/NokiaLCD.cpp Mon Oct 04 05:56:19 2010 +0000 +++ b/NokiaLCD.cpp Mon Oct 04 08:14:06 2010 +0000 @@ -459,6 +459,109 @@ return; } +void NokiaLCD::line(int x0, int y0, int x1, int y1, int colour) { + int dx = 0, dy = 0; + int dx_sym = 0, dy_sym = 0; + int dx_x2 = 0, dy_x2 = 0; + int di = 0; + + _cs = 0; // Chipselect the LCD. + + dx = x1-x0; + dy = y1-y0; + + + if(dx == 0) /* vertical line */ + { + for(int y=y0; y<y1; y++){ + _window(x0, y, 1, 1); + _putp(colour); + } + return; + } + + if(dx > 0) + { + dx_sym = 1; + } + else + { + dx_sym = -1; + } + + + if(dy == 0) /* horizontal line */ + { + for(int x=x0; x<x1; x++){ + _window(x, y0, 1, 1); + _putp(colour); + } + return; + } + + + if(dy > 0) + { + dy_sym = 1; + } + else + { + dy_sym = -1; + } + + dx = dx_sym*dx; + dy = dy_sym*dy; + + dx_x2 = dx*2; + dy_x2 = dy*2; + + if(dx >= dy) + { + di = dy_x2 - dx; + while(x0 != x1) + { + + _window(x0, y0, 1, 1); + _putp(colour); + x0 += dx_sym; + if(di<0) + { + di += dy_x2; + } + else + { + di += dy_x2 - dx_x2; + y0 += dy_sym; + } + } + _window(x0, y0, 1, 1); + _putp(colour); + } + else + { + di = dx_x2 - dy; + while(y0 != y1) + { + _window(x0, y0, 1, 1); + _putp(colour); + y0 += dy_sym; + if(di < 0) + { + di += dx_x2; + } + else + { + di += dx_x2 - dy_x2; + x0 += dx_sym; + } + } + _window(x0, y, 1, 1); + _putp(colour); + } + _cs = 1; + return; +} + void NokiaLCD::blit(int x, int y, int width, int height, const int* colour) { _cs = 0; _window(x, y, width, height);