Index: apps/gui/gwps-common.c
===================================================================
--- apps/gui/gwps-common.c	(révision 12352)
+++ apps/gui/gwps-common.c	(copie de travail)
@@ -180,13 +180,17 @@
 
         case 'P':
             /* progress bar image */
+        case 'S':
+            /* Progress slider */
         {
             int ret = 0;
             char *ptr = buf+2;
             char *pos = NULL;
             char imgname[MAX_PATH];
 
-            /* format: %P|filename.bmp| */
+            /* format: %P|filename.bmp|
+                    or %S|filename.bmp| */
+
             {
                 /* get filename */
                 pos = strchr(ptr, '|');
@@ -222,7 +226,7 @@
                      data->img_buf_free -= ret;
 
                      if (data->progressbar.bm.width <= LCD_WIDTH) {
-                          data->progressbar.have_bitmap_pb=true;
+                          data->progressbar.pb_type = c=='P' ? BITMAP : SLIDER;
                           return true;
                      } else
                           return false;
@@ -1823,7 +1827,7 @@
                 if (!data->progress_end)
                     data->progress_end=display->width;
                 
-                if (gwps->data->progressbar.have_bitmap_pb)
+                if (gwps->data->progressbar.pb_type == BITMAP)
                     gui_bitmap_scrollbar_draw(display, data->progressbar.bm,
                                         data->progress_start, sb_y, 
                                         data->progress_end-data->progress_start,
@@ -1831,6 +1835,12 @@
                                         state->id3->length?state->id3->length:1, 0,
                                         state->id3->length?state->id3->elapsed + state->ff_rewind_count:0,
                                         HORIZONTAL);
+                else if (gwps->data->progressbar.pb_type == SLIDER)
+                    slider_progressbar_draw(display, data->progressbar.bm,
+                                            data->progress_start, sb_y,
+                                            data->progress_end-data->progress_start,
+                                            state->id3->length?state->id3->length:1,
+                                            state->id3->length?state->id3->elapsed + state->ff_rewind_count:0);
                 else
                     gui_scrollbar_draw(display, data->progress_start, sb_y, 
                                         data->progress_end-data->progress_start,
@@ -2655,3 +2665,27 @@
     gui_syncsplash(HZ, true, s);
 }
 
+#ifdef HAVE_LCD_BITMAP
+void slider_progressbar_draw(struct screen * screen, struct bitmap bm,
+                             int pb_x, int pb_y, int pb_width,
+                             int total_length, int progress)
+{
+    int slider_x = pb_x + (pb_width - bm.width) * (progress / 1000)
+                                                    / (total_length / 1000);
+
+    screen->set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
+    screen->fillrect(pb_x, pb_y, pb_width, bm.height);
+
+    screen->set_drawmode(DRMODE_FG);
+#if LCD_DEPTH > 1
+    if(bm.format == FORMAT_MONO) {
+#endif
+        screen->mono_bitmap(bm.data, slider_x, pb_y, bm.width, bm.height);
+#if LCD_DEPTH > 1
+    } else {
+        screen->transparent_bitmap((fb_data *)bm.data, slider_x,
+                                    pb_y, bm.width, bm.height);
+    }
+#endif
+}
+#endif
Index: apps/gui/gwps-common.h
===================================================================
--- apps/gui/gwps-common.h	(révision 12352)
+++ apps/gui/gwps-common.h	(copie de travail)
@@ -23,6 +23,10 @@
 
 #include "gwps.h"
 
+void slider_progressbar_draw(struct screen * screen, struct bitmap bm,
+                             int pb_x, int pb_y, int pb_width,
+                             int total_length, int progress);
+
 void fade(bool fade_in);
 void gui_wps_format(struct wps_data *data);
 bool gui_wps_refresh(struct gui_wps *gwps, int ffwd_offset,
Index: apps/gui/gwps.c
===================================================================
--- apps/gui/gwps.c	(révision 12352)
+++ apps/gui/gwps.c	(copie de travail)
@@ -718,7 +718,7 @@
     }
     data->wps_sb_tag = false;
     data->show_sb_on_wps = false;
-    data->progressbar.have_bitmap_pb=false;
+    data->progressbar.pb_type = NORMAL;
 }
 #else
 #define wps_clear(a)
Index: apps/gui/gwps.h
===================================================================
--- apps/gui/gwps.h	(révision 12352)
+++ apps/gui/gwps.h	(copie de travail)
@@ -39,6 +39,11 @@
 #define WPS_ALIGN_CENTER 64
 #define WPS_ALIGN_LEFT 128
 
+/* progressbar types */
+#define NORMAL 0
+#define BITMAP 1
+#define SLIDER 2
+
 /* wps_data*/
 
 #ifdef HAVE_LCD_BITMAP
@@ -53,7 +58,7 @@
 
 struct prog_img{ /*progressbar image*/
     struct bitmap bm;
-    bool have_bitmap_pb;
+    short pb_type;
 };
 #endif
 
