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
diff --git a/apps/plugins/demystify.c b/apps/plugins/demystify.c
index 5589744..44b658e 100644
--- a/apps/plugins/demystify.c
+++ b/apps/plugins/demystify.c
@@ -81,6 +81,10 @@
 #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 @@
 #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 @@
     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 @@
 
             /* 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();
diff --git a/docs/CREDITS b/docs/CREDITS
index 3dbf6f7..dc5d091 100644
--- a/docs/CREDITS
+++ b/docs/CREDITS
@@ -246,3 +246,4 @@
 Stéphane Doyen
 Austin Appel
 Andre Smith
+Travis Hyyppa