forked from len0rd/rockbox
lcd-*: Merge common viewport operations into lcd-bitmap-common.c
Change-Id: Ibec2d039ac0ba1214c9bd1b667bc8a9538a0d3d7
This commit is contained in:
parent
87c6df98a3
commit
47c8d3c14d
6 changed files with 48 additions and 224 deletions
|
@ -68,48 +68,6 @@ void lcd_init(void)
|
||||||
lcd_init_device();
|
lcd_init_device();
|
||||||
scroll_init();
|
scroll_init();
|
||||||
}
|
}
|
||||||
/*** Viewports ***/
|
|
||||||
|
|
||||||
void lcd_set_viewport(struct viewport* vp)
|
|
||||||
{
|
|
||||||
if (vp == NULL)
|
|
||||||
current_vp = &default_vp;
|
|
||||||
else
|
|
||||||
current_vp = vp;
|
|
||||||
|
|
||||||
#if defined(SIMULATOR)
|
|
||||||
/* Force the viewport to be within bounds. If this happens it should
|
|
||||||
* be considered an error - the viewport will not draw as it might be
|
|
||||||
* expected.
|
|
||||||
*/
|
|
||||||
if((unsigned) current_vp->x > (unsigned) LCD_WIDTH
|
|
||||||
|| (unsigned) current_vp->y > (unsigned) LCD_HEIGHT
|
|
||||||
|| current_vp->x + current_vp->width > LCD_WIDTH
|
|
||||||
|| current_vp->y + current_vp->height > LCD_HEIGHT)
|
|
||||||
{
|
|
||||||
#if !defined(HAVE_VIEWPORT_CLIP)
|
|
||||||
DEBUGF("ERROR: "
|
|
||||||
#else
|
|
||||||
DEBUGF("NOTE: "
|
|
||||||
#endif
|
|
||||||
"set_viewport out of bounds: x: %d y: %d width: %d height:%d\n",
|
|
||||||
current_vp->x, current_vp->y,
|
|
||||||
current_vp->width, current_vp->height);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void lcd_update_viewport(void)
|
|
||||||
{
|
|
||||||
lcd_update_rect(current_vp->x, current_vp->y,
|
|
||||||
current_vp->width, current_vp->height);
|
|
||||||
}
|
|
||||||
|
|
||||||
void lcd_update_viewport_rect(int x, int y, int width, int height)
|
|
||||||
{
|
|
||||||
lcd_update_rect(current_vp->x + x, current_vp->y + y, width, height);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Clear the current viewport */
|
/* Clear the current viewport */
|
||||||
void lcd_clear_viewport(void)
|
void lcd_clear_viewport(void)
|
||||||
|
|
|
@ -60,49 +60,6 @@ static struct viewport default_vp =
|
||||||
|
|
||||||
static struct viewport* current_vp = &default_vp;
|
static struct viewport* current_vp = &default_vp;
|
||||||
|
|
||||||
/*** Viewports ***/
|
|
||||||
|
|
||||||
void LCDFN(set_viewport)(struct viewport* vp)
|
|
||||||
{
|
|
||||||
if (vp == NULL)
|
|
||||||
current_vp = &default_vp;
|
|
||||||
else
|
|
||||||
current_vp = vp;
|
|
||||||
|
|
||||||
#if defined(SIMULATOR)
|
|
||||||
/* Force the viewport to be within bounds. If this happens it should
|
|
||||||
* be considered an error - the viewport will not draw as it might be
|
|
||||||
* expected.
|
|
||||||
*/
|
|
||||||
if((unsigned) current_vp->x > (unsigned) LCDM(WIDTH)
|
|
||||||
|| (unsigned) current_vp->y > (unsigned) LCDM(HEIGHT)
|
|
||||||
|| current_vp->x + current_vp->width > LCDM(WIDTH)
|
|
||||||
|| current_vp->y + current_vp->height > LCDM(HEIGHT))
|
|
||||||
{
|
|
||||||
#if !defined(HAVE_VIEWPORT_CLIP)
|
|
||||||
DEBUGF("ERROR: "
|
|
||||||
#else
|
|
||||||
DEBUGF("NOTE: "
|
|
||||||
#endif
|
|
||||||
"set_viewport out of bounds: x: %d y: %d width: %d height:%d\n",
|
|
||||||
current_vp->x, current_vp->y,
|
|
||||||
current_vp->width, current_vp->height);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void LCDFN(update_viewport)(void)
|
|
||||||
{
|
|
||||||
LCDFN(update_rect)(current_vp->x, current_vp->y,
|
|
||||||
current_vp->width, current_vp->height);
|
|
||||||
}
|
|
||||||
|
|
||||||
void LCDFN(update_viewport_rect)(int x, int y, int width, int height)
|
|
||||||
{
|
|
||||||
LCDFN(update_rect)(current_vp->x + x, current_vp->y + y, width, height);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* LCD init */
|
/* LCD init */
|
||||||
void LCDFN(init)(void)
|
void LCDFN(init)(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -77,52 +77,6 @@ void lcd_init(void)
|
||||||
scroll_init();
|
scroll_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*** Viewports ***/
|
|
||||||
|
|
||||||
void lcd_set_viewport(struct viewport* vp)
|
|
||||||
{
|
|
||||||
if (vp == NULL)
|
|
||||||
current_vp = &default_vp;
|
|
||||||
else
|
|
||||||
current_vp = vp;
|
|
||||||
|
|
||||||
fg_pattern = 0x55 * (~current_vp->fg_pattern & 3);
|
|
||||||
bg_pattern = 0x55 * (~current_vp->bg_pattern & 3);
|
|
||||||
|
|
||||||
#if defined(SIMULATOR)
|
|
||||||
/* Force the viewport to be within bounds. If this happens it should
|
|
||||||
* be considered an error - the viewport will not draw as it might be
|
|
||||||
* expected.
|
|
||||||
*/
|
|
||||||
if((unsigned) current_vp->x > (unsigned) LCD_WIDTH
|
|
||||||
|| (unsigned) current_vp->y > (unsigned) LCD_HEIGHT
|
|
||||||
|| current_vp->x + current_vp->width > LCD_WIDTH
|
|
||||||
|| current_vp->y + current_vp->height > LCD_HEIGHT)
|
|
||||||
{
|
|
||||||
#if !defined(HAVE_VIEWPORT_CLIP)
|
|
||||||
DEBUGF("ERROR: "
|
|
||||||
#else
|
|
||||||
DEBUGF("NOTE: "
|
|
||||||
#endif
|
|
||||||
"set_viewport out of bounds: x: %d y: %d width: %d height:%d\n",
|
|
||||||
current_vp->x, current_vp->y,
|
|
||||||
current_vp->width, current_vp->height);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void lcd_update_viewport(void)
|
|
||||||
{
|
|
||||||
lcd_update_rect(current_vp->x, current_vp->y,
|
|
||||||
current_vp->width, current_vp->height);
|
|
||||||
}
|
|
||||||
|
|
||||||
void lcd_update_viewport_rect(int x, int y, int width, int height)
|
|
||||||
{
|
|
||||||
lcd_update_rect(current_vp->x + x, current_vp->y + y, width, height);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*** parameter handling ***/
|
/*** parameter handling ***/
|
||||||
|
|
||||||
void lcd_set_drawmode(int mode)
|
void lcd_set_drawmode(int mode)
|
||||||
|
|
|
@ -79,53 +79,6 @@ void lcd_init(void)
|
||||||
scroll_init();
|
scroll_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*** Viewports ***/
|
|
||||||
|
|
||||||
void lcd_set_viewport(struct viewport* vp)
|
|
||||||
{
|
|
||||||
if (vp == NULL)
|
|
||||||
current_vp = &default_vp;
|
|
||||||
else
|
|
||||||
current_vp = vp;
|
|
||||||
|
|
||||||
fg_pattern = 0x55 * (~current_vp->fg_pattern & 3);
|
|
||||||
bg_pattern = 0x55 * (~current_vp->bg_pattern & 3);
|
|
||||||
|
|
||||||
#if defined(SIMULATOR)
|
|
||||||
/* Force the viewport to be within bounds. If this happens it should
|
|
||||||
* be considered an error - the viewport will not draw as it might be
|
|
||||||
* expected.
|
|
||||||
*/
|
|
||||||
if((unsigned) current_vp->x > (unsigned) LCD_WIDTH
|
|
||||||
|| (unsigned) current_vp->y > (unsigned) LCD_HEIGHT
|
|
||||||
|| current_vp->x + current_vp->width > LCD_WIDTH
|
|
||||||
|| current_vp->y + current_vp->height > LCD_HEIGHT)
|
|
||||||
{
|
|
||||||
#if !defined(HAVE_VIEWPORT_CLIP)
|
|
||||||
DEBUGF("ERROR: "
|
|
||||||
#else
|
|
||||||
DEBUGF("NOTE: "
|
|
||||||
#endif
|
|
||||||
"set_viewport out of bounds: x: %d y: %d width: %d height:%d\n",
|
|
||||||
current_vp->x, current_vp->y,
|
|
||||||
current_vp->width, current_vp->height);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void lcd_update_viewport(void)
|
|
||||||
{
|
|
||||||
lcd_update_rect(current_vp->x, current_vp->y,
|
|
||||||
current_vp->width, current_vp->height);
|
|
||||||
}
|
|
||||||
|
|
||||||
void lcd_update_viewport_rect(int x, int y, int width, int height)
|
|
||||||
{
|
|
||||||
lcd_update_rect(current_vp->x + x, current_vp->y + y, width, height);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*** parameter handling ***/
|
/*** parameter handling ***/
|
||||||
|
|
||||||
void lcd_set_drawmode(int mode)
|
void lcd_set_drawmode(int mode)
|
||||||
|
|
|
@ -74,52 +74,6 @@ static struct viewport * current_vp IBSS_ATTR;
|
||||||
static unsigned fg_pattern IBSS_ATTR;
|
static unsigned fg_pattern IBSS_ATTR;
|
||||||
static unsigned bg_pattern IBSS_ATTR;
|
static unsigned bg_pattern IBSS_ATTR;
|
||||||
|
|
||||||
/*** Viewports ***/
|
|
||||||
|
|
||||||
void LCDFN(set_viewport)(struct viewport* vp)
|
|
||||||
{
|
|
||||||
if (vp == NULL)
|
|
||||||
current_vp = &default_vp;
|
|
||||||
else
|
|
||||||
current_vp = vp;
|
|
||||||
|
|
||||||
fg_pattern = patterns[current_vp->fg_pattern & 3];
|
|
||||||
bg_pattern = patterns[current_vp->bg_pattern & 3];
|
|
||||||
|
|
||||||
#if defined(SIMULATOR)
|
|
||||||
/* Force the viewport to be within bounds. If this happens it should
|
|
||||||
* be considered an error - the viewport will not draw as it might be
|
|
||||||
* expected.
|
|
||||||
*/
|
|
||||||
if((unsigned) current_vp->x > (unsigned) LCDM(WIDTH)
|
|
||||||
|| (unsigned) current_vp->y > (unsigned) LCDM(HEIGHT)
|
|
||||||
|| current_vp->x + current_vp->width > LCDM(WIDTH)
|
|
||||||
|| current_vp->y + current_vp->height > LCDM(HEIGHT))
|
|
||||||
{
|
|
||||||
#if !defined(HAVE_VIEWPORT_CLIP)
|
|
||||||
DEBUGF("ERROR: "
|
|
||||||
#else
|
|
||||||
DEBUGF("NOTE: "
|
|
||||||
#endif
|
|
||||||
"set_viewport out of bounds: x: %d y: %d width: %d height:%d\n",
|
|
||||||
current_vp->x, current_vp->y,
|
|
||||||
current_vp->width, current_vp->height);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void LCDFN(update_viewport)(void)
|
|
||||||
{
|
|
||||||
LCDFN(update_rect)(current_vp->x, current_vp->y,
|
|
||||||
current_vp->width, current_vp->height);
|
|
||||||
}
|
|
||||||
|
|
||||||
void LCDFN(update_viewport_rect)(int x, int y, int width, int height)
|
|
||||||
{
|
|
||||||
LCDFN(update_rect)(current_vp->x + x, current_vp->y + y, width, height);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* LCD init */
|
/* LCD init */
|
||||||
void LCDFN(init)(void)
|
void LCDFN(init)(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -141,6 +141,54 @@ void LCDFN(fill_viewport)(void)
|
||||||
LCDFN(fillrect)(0, 0, current_vp->width, current_vp->height);
|
LCDFN(fillrect)(0, 0, current_vp->width, current_vp->height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*** Viewports ***/
|
||||||
|
|
||||||
|
void LCDFN(set_viewport)(struct viewport* vp)
|
||||||
|
{
|
||||||
|
if (vp == NULL)
|
||||||
|
current_vp = &default_vp;
|
||||||
|
else
|
||||||
|
current_vp = vp;
|
||||||
|
|
||||||
|
#if LCDM(DEPTH) > 1
|
||||||
|
LCDFN(set_foreground)(current_vp->fg_pattern);
|
||||||
|
LCDFN(set_background)(current_vp->bg_pattern);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(SIMULATOR)
|
||||||
|
/* Force the viewport to be within bounds. If this happens it should
|
||||||
|
* be considered an error - the viewport will not draw as it might be
|
||||||
|
* expected.
|
||||||
|
*/
|
||||||
|
if((unsigned) current_vp->x > (unsigned) LCDM(WIDTH)
|
||||||
|
|| (unsigned) current_vp->y > (unsigned) LCDM(HEIGHT)
|
||||||
|
|| current_vp->x + current_vp->width > LCDM(WIDTH)
|
||||||
|
|| current_vp->y + current_vp->height > LCDM(HEIGHT))
|
||||||
|
{
|
||||||
|
#if !defined(HAVE_VIEWPORT_CLIP)
|
||||||
|
DEBUGF("ERROR: "
|
||||||
|
#else
|
||||||
|
DEBUGF("NOTE: "
|
||||||
|
#endif
|
||||||
|
"set_viewport out of bounds: x: %d y: %d width: %d height:%d\n",
|
||||||
|
current_vp->x, current_vp->y,
|
||||||
|
current_vp->width, current_vp->height);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void LCDFN(update_viewport)(void)
|
||||||
|
{
|
||||||
|
LCDFN(update_rect)(current_vp->x, current_vp->y,
|
||||||
|
current_vp->width, current_vp->height);
|
||||||
|
}
|
||||||
|
|
||||||
|
void LCDFN(update_viewport_rect)(int x, int y, int width, int height)
|
||||||
|
{
|
||||||
|
LCDFN(update_rect)(current_vp->x + x, current_vp->y + y, width, height);
|
||||||
|
}
|
||||||
|
|
||||||
/* put a string at a given pixel position, skipping first ofs pixel columns */
|
/* put a string at a given pixel position, skipping first ofs pixel columns */
|
||||||
static void LCDFN(putsxyofs)(int x, int y, int ofs, const unsigned char *str)
|
static void LCDFN(putsxyofs)(int x, int y, int ofs, const unsigned char *str)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue