When you use splash() and a centered output, it will now put the text in

a centered "box" on the screen and will not clear the rest of the screen.
This makes a neat "windows-effect", as can be seen on these demo-shots:

http://www.contactor.se/~dast/splash3.png
http://www.contactor.se/~dast/splash2.png
http://www.contactor.se/~dast/splash.png

Needless to say, current code that "pops-up" information should be moved
to use splash() instead...


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@3476 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Daniel Stenberg 2003-03-18 16:04:58 +00:00
parent 6b6f97ddda
commit 078f328544

View file

@ -469,7 +469,7 @@ bool f3_screen(void)
#endif #endif
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
#define SPACE 4 /* pixels between words */ #define SPACE 3 /* pixels between words */
#define MAXLETTERS 128 /* 16*8 */ #define MAXLETTERS 128 /* 16*8 */
#define MAXLINES 10 #define MAXLINES 10
#else #else
@ -499,13 +499,15 @@ void splash(int ticks, /* how long */
unsigned char widths[MAXLINES]; unsigned char widths[MAXLINES];
int line=0; int line=0;
bool first=true; bool first=true;
#ifdef HAVE_LCD_BITMAP
int maxw=0;
#endif
va_start( ap, fmt ); va_start( ap, fmt );
vsnprintf( splash_buf, sizeof(splash_buf), fmt, ap ); vsnprintf( splash_buf, sizeof(splash_buf), fmt, ap );
lcd_clear_display();
if(center) { if(center) {
/* first a pass to measure sizes */ /* first a pass to measure sizes */
next = strtok_r(splash_buf, " ", &store); next = strtok_r(splash_buf, " ", &store);
while (next) { while (next) {
@ -513,11 +515,11 @@ void splash(int ticks, /* how long */
lcd_getstringsize(next, &w, &h); lcd_getstringsize(next, &w, &h);
#else #else
w = strlen(next); w = strlen(next);
h = 1; h = 1; /* store height in characters */
#endif #endif
if(!first) { if(!first) {
if(x+w> LCD_WIDTH) { if(x+w> LCD_WIDTH) {
/* too wide */ /* Too wide, wrap */
y+=h; y+=h;
line++; line++;
if((y > (LCD_HEIGHT-h)) || (line > MAXLINES)) if((y > (LCD_HEIGHT-h)) || (line > MAXLINES))
@ -535,6 +537,11 @@ void splash(int ticks, /* how long */
x += w+SPACE; x += w+SPACE;
widths[line]=x-SPACE; /* don't count the trailing space */ widths[line]=x-SPACE; /* don't count the trailing space */
#ifdef HAVE_LCD_BITMAP
/* store the widest line */
if(widths[line]>maxw)
maxw = widths[line];
#endif
next = strtok_r(NULL, " ", &store); next = strtok_r(NULL, " ", &store);
} }
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
@ -545,14 +552,37 @@ void splash(int ticks, /* how long */
#else #else
y = 0; /* vertical center on 2 lines would be silly */ y = 0; /* vertical center on 2 lines would be silly */
#endif #endif
line=0;
first=true; first=true;
/* Now recreate the string again since the strtok_r() above has ruined
the one we already have! Here's room for improvements! */
vsnprintf( splash_buf, sizeof(splash_buf), fmt, ap ); vsnprintf( splash_buf, sizeof(splash_buf), fmt, ap );
} }
va_end( ap ); va_end( ap );
if(center) if(center)
x = (LCD_WIDTH-widths[0])/2; x = (LCD_WIDTH-widths[0])/2;
#ifdef HAVE_LCD_BITMAP
/* If we center the display and it wouldn't cover the full screen,
then just clear the box we need and put a nice little frame and
put the text in there! */
if(center && (y > 2)) {
if(maxw < (LCD_WIDTH -4)) {
int xx = (LCD_WIDTH-maxw)/2 - 2;
lcd_clearrect(xx, y-2, maxw+4, LCD_HEIGHT-y*2+4);
lcd_drawrect(xx, y-2, maxw+4, LCD_HEIGHT-y*2+4);
}
else {
lcd_clearrect(0, y-2, LCD_WIDTH, LCD_HEIGHT-y*2+4);
lcd_drawline(0, y-2, LCD_WIDTH, y-2);
lcd_drawline(0, LCD_HEIGHT-y+2, LCD_WIDTH, LCD_HEIGHT-y+2);
}
}
else
#endif
lcd_clear_display();
line=0;
next = strtok_r(splash_buf, " ", &store); next = strtok_r(splash_buf, " ", &store);
while (next) { while (next) {
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP