From 5fd54dee4ff3e0299c8b5d6c12e5633728396c72 Mon Sep 17 00:00:00 2001 From: Thomas Martitz Date: Thu, 7 Jan 2010 19:35:36 +0000 Subject: 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 --- .../target/arm/as3525/sansa-e200v2/lcd-e200v2.c | 38 +++++++++++----------- 1 file changed, 19 insertions(+), 19 deletions(-) (limited to 'firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c') 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); } -- cgit v1.2.3