Added support for splash screen positioning
This patch adds support splash image positioning by adding an additional variable "splashpos" to the environment. Please see README for details. Signed-off-by: Matthias Weisser <matthias.weisser@graf-syteco.de> Acked-by: Matthias Fuchs <matthias.fuchs@esd.eu> Signed-off-by: Anatolij Gustschin <agust@denx.de>
This commit is contained in:
parent
9d173e0233
commit
1ca298ced0
20
README
20
README
@ -1074,6 +1074,26 @@ The following options need to be configured:
|
||||
allows for a "silent" boot where a splash screen is
|
||||
loaded very quickly after power-on.
|
||||
|
||||
CONFIG_SPLASH_SCREEN_ALIGN
|
||||
|
||||
If this option is set the splash image can be freely positioned
|
||||
on the screen. Environment variable "splashpos" specifies the
|
||||
position as "x,y". If a positive number is given it is used as
|
||||
number of pixel from left/top. If a negative number is given it
|
||||
is used as number of pixel from right/bottom. You can also
|
||||
specify 'm' for centering the image.
|
||||
|
||||
Example:
|
||||
setenv splashpos m,m
|
||||
=> image at center of screen
|
||||
|
||||
setenv splashpos 30,20
|
||||
=> image at x = 30 and y = 20
|
||||
|
||||
setenv splashpos -10,m
|
||||
=> vertically centered image
|
||||
at x = dspWidth - bmpWidth - 9
|
||||
|
||||
- Gzip compressed BMP image support: CONFIG_VIDEO_BMP_GZIP
|
||||
|
||||
If this option is set, additionally to standard BMP
|
||||
|
39
common/lcd.c
39
common/lcd.c
@ -620,6 +620,11 @@ void bitmap_plot (int x, int y)
|
||||
* Display the BMP file located at address bmp_image.
|
||||
* Only uncompressed.
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_SPLASH_SCREEN_ALIGN
|
||||
#define BMP_ALIGN_CENTER 0x7FFF
|
||||
#endif
|
||||
|
||||
int lcd_display_bitmap(ulong bmp_image, int x, int y)
|
||||
{
|
||||
#if !defined(CONFIG_MCC200)
|
||||
@ -731,6 +736,19 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
|
||||
#endif
|
||||
|
||||
padded_line = (width&0x3) ? ((width&~0x3)+4) : (width);
|
||||
|
||||
#ifdef CONFIG_SPLASH_SCREEN_ALIGN
|
||||
if (x == BMP_ALIGN_CENTER)
|
||||
x = max(0, (pwidth - width) / 2);
|
||||
else if (x < 0)
|
||||
x = max(0, pwidth - width + x + 1);
|
||||
|
||||
if (y == BMP_ALIGN_CENTER)
|
||||
y = max(0, (panel_info.vl_row - height) / 2);
|
||||
else if (y < 0)
|
||||
y = max(0, panel_info.vl_row - height + y + 1);
|
||||
#endif /* CONFIG_SPLASH_SCREEN_ALIGN */
|
||||
|
||||
if ((x + width)>pwidth)
|
||||
width = pwidth - x;
|
||||
if ((y + height)>panel_info.vl_row)
|
||||
@ -809,9 +827,26 @@ static void *lcd_logo (void)
|
||||
static int do_splash = 1;
|
||||
|
||||
if (do_splash && (s = getenv("splashimage")) != NULL) {
|
||||
addr = simple_strtoul(s, NULL, 16);
|
||||
int x = 0, y = 0;
|
||||
do_splash = 0;
|
||||
|
||||
addr = simple_strtoul (s, NULL, 16);
|
||||
#ifdef CONFIG_SPLASH_SCREEN_ALIGN
|
||||
if ((s = getenv ("splashpos")) != NULL) {
|
||||
if (s[0] == 'm')
|
||||
x = BMP_ALIGN_CENTER;
|
||||
else
|
||||
x = simple_strtol (s, NULL, 0);
|
||||
|
||||
if ((s = strchr (s + 1, ',')) != NULL) {
|
||||
if (s[1] == 'm')
|
||||
y = BMP_ALIGN_CENTER;
|
||||
else
|
||||
y = simple_strtol (s + 1, NULL, 0);
|
||||
}
|
||||
}
|
||||
#endif /* CONFIG_SPLASH_SCREEN_ALIGN */
|
||||
|
||||
#ifdef CONFIG_VIDEO_BMP_GZIP
|
||||
bmp_image_t *bmp = (bmp_image_t *)addr;
|
||||
unsigned long len;
|
||||
@ -822,7 +857,7 @@ static void *lcd_logo (void)
|
||||
}
|
||||
#endif
|
||||
|
||||
if (lcd_display_bitmap (addr, 0, 0) == 0) {
|
||||
if (lcd_display_bitmap (addr, x, y) == 0) {
|
||||
return ((void *)lcd_base);
|
||||
}
|
||||
}
|
||||
|
@ -193,6 +193,11 @@ CONFIG_VIDEO_HW_CURSOR: - Uses the hardware cursor capability of the
|
||||
#if defined(CONFIG_CMD_BMP) || defined(CONFIG_SPLASH_SCREEN)
|
||||
#include <watchdog.h>
|
||||
#include <bmp_layout.h>
|
||||
|
||||
#ifdef CONFIG_SPLASH_SCREEN_ALIGN
|
||||
#define BMP_ALIGN_CENTER 0x7FFF
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
/*****************************************************************************/
|
||||
@ -877,6 +882,18 @@ int video_display_bitmap (ulong bmp_image, int x, int y)
|
||||
|
||||
padded_line = (((width * bpp + 7) / 8) + 3) & ~0x3;
|
||||
|
||||
#ifdef CONFIG_SPLASH_SCREEN_ALIGN
|
||||
if (x == BMP_ALIGN_CENTER)
|
||||
x = max(0, (VIDEO_VISIBLE_COLS - width) / 2);
|
||||
else if (x < 0)
|
||||
x = max(0, VIDEO_VISIBLE_COLS - width + x + 1);
|
||||
|
||||
if (y == BMP_ALIGN_CENTER)
|
||||
y = max(0, (VIDEO_VISIBLE_ROWS - height) / 2);
|
||||
else if (y < 0)
|
||||
y = max(0, VIDEO_VISIBLE_ROWS - height + y + 1);
|
||||
#endif /* CONFIG_SPLASH_SCREEN_ALIGN */
|
||||
|
||||
if ((x + width) > VIDEO_VISIBLE_COLS)
|
||||
width = VIDEO_VISIBLE_COLS - x;
|
||||
if ((y + height) > VIDEO_VISIBLE_ROWS)
|
||||
@ -1188,9 +1205,26 @@ static void *video_logo (void)
|
||||
ulong addr;
|
||||
|
||||
if ((s = getenv ("splashimage")) != NULL) {
|
||||
addr = simple_strtoul (s, NULL, 16);
|
||||
int x = 0, y = 0;
|
||||
|
||||
if (video_display_bitmap (addr, 0, 0) == 0) {
|
||||
addr = simple_strtoul (s, NULL, 16);
|
||||
#ifdef CONFIG_SPLASH_SCREEN_ALIGN
|
||||
if ((s = getenv ("splashpos")) != NULL) {
|
||||
if (s[0] == 'm')
|
||||
x = BMP_ALIGN_CENTER;
|
||||
else
|
||||
x = simple_strtol (s, NULL, 0);
|
||||
|
||||
if ((s = strchr (s + 1, ',')) != NULL) {
|
||||
if (s[1] == 'm')
|
||||
y = BMP_ALIGN_CENTER;
|
||||
else
|
||||
y = simple_strtol (s + 1, NULL, 0);
|
||||
}
|
||||
}
|
||||
#endif /* CONFIG_SPLASH_SCREEN_ALIGN */
|
||||
|
||||
if (video_display_bitmap (addr, x, y) == 0) {
|
||||
return ((void *) (video_fb_address));
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user