summaryrefslogtreecommitdiff
path: root/firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c')
-rw-r--r--firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c38
1 files changed, 19 insertions, 19 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);
}