Colorised demystify. Based on patch #5856 by Travis Hyyppa, adapted to properly work with the multi-screen API.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11389 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jens Arnold 2006-10-30 01:31:32 +00:00
parent c1767ddf4a
commit 5421e86969
2 changed files with 54 additions and 0 deletions

View file

@ -81,6 +81,10 @@ PLUGIN_HEADER
#define MAX_POLYGONS 40
#define MIN_POLYGONS 1
#ifdef HAVE_LCD_COLOR
int r,g,b,rc,gc,bc;
#endif
/******************************* Globals ***********************************/
static struct plugin_api* rb; /* global api struct pointer */
@ -280,6 +284,34 @@ void cleanup(void *parameter)
#endif
}
#ifdef HAVE_LCD_COLOR
void new_color(void)
{
r = rb->rand()%255;
g = rb->rand()%255;
b = rb->rand()%255;
}
void change_color(void)
{
if(rc<r)
++rc;
else if(rc>r)
--rc;
if(gc<g)
++gc;
else if(gc>g)
--gc;
if(bc<b)
++bc;
else if(bc>b)
--bc;
rb->lcd_set_foreground(LCD_RGBPACK(rc,gc,bc));
if(rc==r && gc==g && bc==b)
new_color();
}
#endif
/*
* Main function
*/
@ -296,10 +328,23 @@ int plugin_main(void)
struct polygon leading_polygon[NB_SCREENS];
FOR_NB_SCREENS(i)
{
#ifdef HAVE_LCD_COLOR
struct screen *display = rb->screens[i];
if (display->depth > 8)
display->set_background(LCD_BLACK);
#endif
fifo_init(&polygons[i]);
polygon_move_init(&move[i]);
polygon_init(&leading_polygon[i], rb->screens[i]);
}
#ifdef HAVE_LCD_COLOR
new_color();
rc = r;
gc = g;
bc = b;
#endif
while (true)
{
FOR_NB_SCREENS(i)
@ -325,10 +370,18 @@ int plugin_main(void)
/* Now the drawing part */
#ifdef HAVE_LCD_COLOR
if (display->depth > 8)
display->set_foreground(SCREEN_COLOR_TO_NATIVE(display,
LCD_RGBPACK(rc, gc, bc)));
#endif
display->clear_display();
polygons_draw(&polygons[i], display);
display->update();
}
#ifdef HAVE_LCD_COLOR
change_color();
#endif
/* Speed handling*/
if (sleep_time<0)/* full speed */
rb->yield();

View file

@ -246,3 +246,4 @@ Martin Hensel
Stéphane Doyen
Austin Appel
Andre Smith
Travis Hyyppa