summaryrefslogtreecommitdiff
path: root/firmware/target/arm/as3525
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2010-01-07 19:35:36 +0000
committerThomas Martitz <kugel@rockbox.org>2010-01-07 19:35:36 +0000
commit5fd54dee4ff3e0299c8b5d6c12e5633728396c72 (patch)
tree126b83a2a83d3df37da4890c53005bd26f2eed62 /firmware/target/arm/as3525
parent2f2213d63ee6586eb5c4b1c95ac9a8378cec4a16 (diff)
e200v2/Fuze: Correct and simplify clipping clipping code in lcd_update_rect().
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@24197 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/as3525')
-rw-r--r--firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c38
-rw-r--r--firmware/target/arm/as3525/sansa-fuze/lcd-fuze.c40
2 files changed, 39 insertions, 39 deletions
diff --git a/firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c b/firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c
index 0d990dc538..f4d1a7cf56 100644
--- a/firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c
+++ b/firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c
@@ -493,41 +493,41 @@ void lcd_update(void)
void lcd_update_rect(int x, int y, int width, int height)
{
const fb_data *ptr;
- int xmax, ymax;
if (!display_on)
return;
- xmax = x + width;
- if (xmax >= LCD_WIDTH)
- xmax = LCD_WIDTH - 1; /* Clip right */
- if (x < 0)
- x = 0; /* Clip left */
- if (x >= xmax)
- return; /* nothing left to do */
-
- width = xmax - x + 1; /* Fix width */
+ /* nothing to draw? */
+ if ((width <= 0) || (height <= 0) || (x >= LCD_WIDTH) ||
+ (y >= LCD_HEIGHT) || (x + width <= 0) || (y + height <= 0))
+ return;
- ymax = y + height;
- if (ymax >= LCD_HEIGHT)
- ymax = LCD_HEIGHT - 1; /* Clip bottom */
+ if (x < 0)
+ { /* clip left */
+ width += x;
+ x = 0;
+ }
if (y < 0)
- y = 0; /* Clip top */
- if (y >= ymax)
- return; /* nothing left to do */
+ { /* clip top */
+ height += y;
+ y = 0;
+ }
+ if (x + width > LCD_WIDTH)
+ width = LCD_WIDTH - x; /* clip right */
+ if (y + height > LCD_HEIGHT)
+ height = LCD_HEIGHT - y; /* clip bottom */
lcd_write_reg(R_ENTRY_MODE, r_entry_mode);
- lcd_window(x, y, xmax, ymax);
+ lcd_window(x, y, x+width-1, y+height-1);
lcd_write_cmd(R_WRITE_DATA_2_GRAM);
ptr = &lcd_framebuffer[y][x];
- height = ymax - y; /* fix height */
do
{
lcd_write_data(ptr, width);
ptr += LCD_WIDTH;
}
- while (--height >= 0);
+ while (--height > 0);
}
diff --git a/firmware/target/arm/as3525/sansa-fuze/lcd-fuze.c b/firmware/target/arm/as3525/sansa-fuze/lcd-fuze.c
index f9d5e5ace1..3332e0c78c 100644
--- a/firmware/target/arm/as3525/sansa-fuze/lcd-fuze.c
+++ b/firmware/target/arm/as3525/sansa-fuze/lcd-fuze.c
@@ -444,43 +444,43 @@ void lcd_update(void)
void lcd_update_rect(int x, int y, int width, int height)
{
const fb_data *ptr;
- int xmax, ymax;
if (!display_on)
return;
- xmax = x + width;
- if (xmax >= LCD_WIDTH)
- xmax = LCD_WIDTH - 1; /* Clip right */
- if (x < 0)
- x = 0; /* Clip left */
- if (x >= xmax)
- return; /* nothing left to do */
-
- width = xmax - x + 1; /* Fix width */
+ /* nothing to draw? */
+ if ((width <= 0) || (height <= 0) || (x >= LCD_WIDTH) ||
+ (y >= LCD_HEIGHT) || (x + width <= 0) || (y + height <= 0))
+ return;
- ymax = y + height;
- if (ymax >= LCD_HEIGHT)
- ymax = LCD_HEIGHT - 1; /* Clip bottom */
+ if (x < 0)
+ { /* clip left */
+ width += x;
+ x = 0;
+ }
if (y < 0)
- y = 0; /* Clip top */
- if (y >= ymax)
- return; /* nothing left to do */
+ { /* clip top */
+ height += y;
+ y = 0;
+ }
+ if (x + width > LCD_WIDTH)
+ width = LCD_WIDTH - x; /* clip right */
+ if (y + height > LCD_HEIGHT)
+ height = LCD_HEIGHT - y; /* clip bottom */
lcd_write_reg(R_ENTRY_MODE, r_entry_mode);
- lcd_window_x(x, xmax);
- lcd_window_y(y, ymax);
+ lcd_window_x(x, x + width - 1);
+ lcd_window_y(y, y + height -1);
lcd_write_cmd(R_WRITE_DATA_2_GRAM);
ptr = &lcd_framebuffer[y][x];
- height = ymax - y; /* fix height */
do
{
lcd_write_data(ptr, width);
ptr += LCD_WIDTH;
}
- while (--height >= 0);
+ while (--height > 0);
}