diff options
author | Thomas Martitz <kugel@rockbox.org> | 2010-01-07 19:35:36 +0000 |
---|---|---|
committer | Thomas Martitz <kugel@rockbox.org> | 2010-01-07 19:35:36 +0000 |
commit | 5fd54dee4ff3e0299c8b5d6c12e5633728396c72 (patch) | |
tree | 126b83a2a83d3df37da4890c53005bd26f2eed62 /firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c | |
parent | 2f2213d63ee6586eb5c4b1c95ac9a8378cec4a16 (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/sansa-e200v2/lcd-e200v2.c')
-rw-r--r-- | firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c | 38 |
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); } |