summaryrefslogtreecommitdiffstats
path: root/firmware
diff options
context:
space:
mode:
authorMarkus Braun <markus.braun@krawel.de>2002-08-28 14:21:25 +0000
committerMarkus Braun <markus.braun@krawel.de>2002-08-28 14:21:25 +0000
commit513044fe58db65732961650e8161c174a1bab0db (patch)
treeb327d2193ad570787b82ba9399c1d9a224e75f56 /firmware
parent4368a7378a11786a930ff3cef81b91cd79b46c4c (diff)
downloadrockbox-513044fe58db65732961650e8161c174a1bab0db.tar.gz
rockbox-513044fe58db65732961650e8161c174a1bab0db.zip
Changed lcd_drawrect() to use upper left corner and height/width as parameters
Added function lcd_invertpixel() git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2037 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r--firmware/drivers/lcd.c50
-rw-r--r--firmware/drivers/lcd.h1
2 files changed, 39 insertions, 12 deletions
diff --git a/firmware/drivers/lcd.c b/firmware/drivers/lcd.c
index 1984f66617..4bdecd41f5 100644
--- a/firmware/drivers/lcd.c
+++ b/firmware/drivers/lcd.c
@@ -1027,11 +1027,29 @@ void lcd_bitmap (unsigned char *src, int x, int y, int nx, int ny,
*/
void lcd_drawrect (int x, int y, int nx, int ny)
{
- lcd_drawline(x, y, nx, y);
- lcd_drawline(x, ny, nx, ny);
+ int i;
+
+ if (x > LCD_WIDTH)
+ return;
+ if (y > LCD_HEIGHT)
+ return;
+
+ if (x + nx > LCD_WIDTH)
+ nx = LCD_WIDTH - x;
+ if (y + ny > LCD_HEIGHT)
+ ny = LCD_HEIGHT - y;
+
+ /* vertical lines */
+ for (i = 0; i < ny; i++) {
+ DRAW_PIXEL(x, (y + i));
+ DRAW_PIXEL((x + nx - 1), (y + i));
+ }
- lcd_drawline(x, y, x, ny);
- lcd_drawline(nx, y, nx, ny);
+ /* horizontal lines */
+ for (i = 0; i < nx; i++) {
+ DRAW_PIXEL((x + i),y);
+ DRAW_PIXEL((x + i),(y + ny - 1));
+ }
}
/*
@@ -1057,21 +1075,21 @@ void lcd_fillrect (int x, int y, int nx, int ny)
/* Invert a rectangular area at (x, y), size (nx, ny) */
void lcd_invertrect (int x, int y, int nx, int ny)
{
- int i,j;
+ int i, j;
- if (x>LCD_WIDTH)
+ if (x > LCD_WIDTH)
return;
- if (y>LCD_HEIGHT)
+ if (y > LCD_HEIGHT)
return;
- if (x+nx>LCD_WIDTH)
- nx=LCD_WIDTH-x;
- if (y+ny>LCD_HEIGHT)
- ny=LCD_HEIGHT-y;
+ if (x + nx > LCD_WIDTH)
+ nx = LCD_WIDTH - x;
+ if (y + ny > LCD_HEIGHT)
+ ny = LCD_HEIGHT - y;
for (i = 0; i < nx; i++)
for (j = 0; j < ny; j++)
- INVERT_PIXEL((x+i),(y+j));
+ INVERT_PIXEL((x + i), (y + j));
}
void lcd_drawline( int x1, int y1, int x2, int y2 )
@@ -1231,6 +1249,14 @@ void lcd_clearpixel(int x, int y)
}
/*
+ * Invert a single pixel
+ */
+void lcd_invertpixel(int x, int y)
+{
+ INVERT_PIXEL(x,y);
+}
+
+/*
* Return width and height of a given font.
*/
void lcd_getfontsize(unsigned int font, int *width, int *height)
diff --git a/firmware/drivers/lcd.h b/firmware/drivers/lcd.h
index b99fa54389..1e623a7d09 100644
--- a/firmware/drivers/lcd.h
+++ b/firmware/drivers/lcd.h
@@ -113,6 +113,7 @@ extern void lcd_drawline( int x1, int y1, int x2, int y2 );
extern void lcd_clearline( int x1, int y1, int x2, int y2 );
extern void lcd_drawpixel(int x, int y);
extern void lcd_clearpixel(int x, int y);
+extern void lcd_invertpixel(int x, int y);
#endif /* CHARCELLS / BITMAP */