mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-12-08 12:45:26 -05:00
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
This commit is contained in:
parent
2f2213d63e
commit
5fd54dee4f
2 changed files with 39 additions and 39 deletions
|
|
@ -493,41 +493,41 @@ void lcd_update(void)
|
||||||
void lcd_update_rect(int x, int y, int width, int height)
|
void lcd_update_rect(int x, int y, int width, int height)
|
||||||
{
|
{
|
||||||
const fb_data *ptr;
|
const fb_data *ptr;
|
||||||
int xmax, ymax;
|
|
||||||
|
|
||||||
if (!display_on)
|
if (!display_on)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
xmax = x + width;
|
/* nothing to draw? */
|
||||||
if (xmax >= LCD_WIDTH)
|
if ((width <= 0) || (height <= 0) || (x >= LCD_WIDTH) ||
|
||||||
xmax = LCD_WIDTH - 1; /* Clip right */
|
(y >= LCD_HEIGHT) || (x + width <= 0) || (y + height <= 0))
|
||||||
|
return;
|
||||||
|
|
||||||
if (x < 0)
|
if (x < 0)
|
||||||
x = 0; /* Clip left */
|
{ /* clip left */
|
||||||
if (x >= xmax)
|
width += x;
|
||||||
return; /* nothing left to do */
|
x = 0;
|
||||||
|
}
|
||||||
width = xmax - x + 1; /* Fix width */
|
|
||||||
|
|
||||||
ymax = y + height;
|
|
||||||
if (ymax >= LCD_HEIGHT)
|
|
||||||
ymax = LCD_HEIGHT - 1; /* Clip bottom */
|
|
||||||
if (y < 0)
|
if (y < 0)
|
||||||
y = 0; /* Clip top */
|
{ /* clip top */
|
||||||
if (y >= ymax)
|
height += y;
|
||||||
return; /* nothing left to do */
|
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_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);
|
lcd_write_cmd(R_WRITE_DATA_2_GRAM);
|
||||||
|
|
||||||
ptr = &lcd_framebuffer[y][x];
|
ptr = &lcd_framebuffer[y][x];
|
||||||
|
|
||||||
height = ymax - y; /* fix height */
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
lcd_write_data(ptr, width);
|
lcd_write_data(ptr, width);
|
||||||
ptr += LCD_WIDTH;
|
ptr += LCD_WIDTH;
|
||||||
}
|
}
|
||||||
while (--height >= 0);
|
while (--height > 0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -444,43 +444,43 @@ void lcd_update(void)
|
||||||
void lcd_update_rect(int x, int y, int width, int height)
|
void lcd_update_rect(int x, int y, int width, int height)
|
||||||
{
|
{
|
||||||
const fb_data *ptr;
|
const fb_data *ptr;
|
||||||
int xmax, ymax;
|
|
||||||
|
|
||||||
if (!display_on)
|
if (!display_on)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
xmax = x + width;
|
/* nothing to draw? */
|
||||||
if (xmax >= LCD_WIDTH)
|
if ((width <= 0) || (height <= 0) || (x >= LCD_WIDTH) ||
|
||||||
xmax = LCD_WIDTH - 1; /* Clip right */
|
(y >= LCD_HEIGHT) || (x + width <= 0) || (y + height <= 0))
|
||||||
|
return;
|
||||||
|
|
||||||
if (x < 0)
|
if (x < 0)
|
||||||
x = 0; /* Clip left */
|
{ /* clip left */
|
||||||
if (x >= xmax)
|
width += x;
|
||||||
return; /* nothing left to do */
|
x = 0;
|
||||||
|
}
|
||||||
width = xmax - x + 1; /* Fix width */
|
|
||||||
|
|
||||||
ymax = y + height;
|
|
||||||
if (ymax >= LCD_HEIGHT)
|
|
||||||
ymax = LCD_HEIGHT - 1; /* Clip bottom */
|
|
||||||
if (y < 0)
|
if (y < 0)
|
||||||
y = 0; /* Clip top */
|
{ /* clip top */
|
||||||
if (y >= ymax)
|
height += y;
|
||||||
return; /* nothing left to do */
|
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_write_reg(R_ENTRY_MODE, r_entry_mode);
|
||||||
|
|
||||||
lcd_window_x(x, xmax);
|
lcd_window_x(x, x + width - 1);
|
||||||
lcd_window_y(y, ymax);
|
lcd_window_y(y, y + height -1);
|
||||||
|
|
||||||
lcd_write_cmd(R_WRITE_DATA_2_GRAM);
|
lcd_write_cmd(R_WRITE_DATA_2_GRAM);
|
||||||
|
|
||||||
ptr = &lcd_framebuffer[y][x];
|
ptr = &lcd_framebuffer[y][x];
|
||||||
|
|
||||||
height = ymax - y; /* fix height */
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
lcd_write_data(ptr, width);
|
lcd_write_data(ptr, width);
|
||||||
ptr += LCD_WIDTH;
|
ptr += LCD_WIDTH;
|
||||||
}
|
}
|
||||||
while (--height >= 0);
|
while (--height > 0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue