From 60895bc107f5689f19de61828d8ffe0f2f1f59b5 Mon Sep 17 00:00:00 2001 From: Linus Nielsen Feltzing Date: Fri, 2 Sep 2005 05:39:09 +0000 Subject: Patch #1272052 by Henrik Backe - Move credits to a plugin git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7450 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/credits.c | 154 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 apps/plugins/credits.c (limited to 'apps/plugins/credits.c') diff --git a/apps/plugins/credits.c b/apps/plugins/credits.c new file mode 100644 index 0000000000..f172cc6c18 --- /dev/null +++ b/apps/plugins/credits.c @@ -0,0 +1,154 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2002 by Robert Hak + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ +#include "plugin.h" + +void roll_credits(void); +const char* const credits[] = { +#include "credits.raw" /* generated list of names from docs/CREDITS */ +}; + +static struct plugin_api* rb; + +enum plugin_status plugin_start(struct plugin_api* api, void* parameter) +{ + int j = 0; + int btn; + + TEST_PLUGIN_API(api); + (void)parameter; + rb = api; + + rb->show_logo(); +#ifdef HAVE_LCD_CHARCELLS + rb->lcd_double_height(false); +#endif + + for (j = 0; j < 10; j++) { + rb->sleep((HZ*2)/10); + + btn = rb->button_get(false); + if (btn != BUTTON_NONE && !(btn & BUTTON_REL)) + return PLUGIN_OK; + } + + roll_credits(); + + return PLUGIN_OK; +} + +#ifdef HAVE_LCD_CHARCELLS +void roll_credits(void) +{ + int numnames = sizeof(credits)/sizeof(char*); + int curr_name = 0; + int curr_len = rb->strlen(credits[0]); + int curr_index = 0; + int curr_line = 0; + int name, len, new_len, line, x; + + while (1) + { + rb->lcd_clear_display(); + + name = curr_name; + x = -curr_index; + len = curr_len; + line = curr_line; + + while (x < 11) + { + int x2; + + if (x < 0) + rb->lcd_puts(0, line, credits[name] - x); + else + rb->lcd_puts(x, line, credits[name]); + + if (++name >= numnames) + break; + line ^= 1; + + x2 = x + len/2; + if ((unsigned)x2 < 11) + rb->lcd_putc(x2, line, '*'); + + new_len = rb->strlen(credits[name]); + x += MAX(len/2 + 2, len - new_len/2 + 1); + len = new_len; + } + /* abort on keypress */ + if (rb->button_get_w_tmo(HZ/8) & BUTTON_REL) + return; + + if (++curr_index >= curr_len) + { + if (++curr_name >= numnames) + break; + new_len = rb->strlen(credits[curr_name]); + curr_index -= MAX(curr_len/2 + 2, curr_len - new_len/2 + 1); + curr_len = new_len; + curr_line ^= 1; + } + } +} +#else + +void roll_credits(void) +{ + int i; + int line = 0; + int numnames = sizeof(credits)/sizeof(char*); + char buffer[40]; + + int y=LCD_HEIGHT; + + int height; + int width; + + rb->lcd_setfont(FONT_UI); + + rb->lcd_getstringsize("A", &width, &height); + + while(1) { + rb->lcd_clear_display(); + for ( i=0; i <= (LCD_HEIGHT-y)/height; i++ ) + rb->lcd_putsxy(0, i*height+y, line+isnprintf(buffer, sizeof(buffer), " [Credits] %2d/%2d ", + line+1, numnames); + rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); + rb->lcd_fillrect(0, 0, LCD_WIDTH, height); + rb->lcd_set_drawmode(DRMODE_SOLID); + rb->lcd_putsxy(0, 0, buffer); + rb->lcd_update(); + + if (rb->button_get_w_tmo(HZ/20) & BUTTON_REL) + return; + + y--; + + if(y<0) { + line++; + if(line >= numnames) + break; + y+=height; + } + + } +} +#endif -- cgit v1.2.3