Index: apps/gui/gwps-common.c =================================================================== --- apps/gui/gwps-common.c (revision 17888) +++ apps/gui/gwps-common.c (working copy) @@ -499,18 +499,45 @@ #ifdef HAVE_LCD_BITMAP +static void slider_progressbar_draw(struct screen * screen, struct bitmap bm, + int pb_x, int pb_y, int pb_width, + long total_length, long progress) +{ + int slider_x = pb_x + (pb_width - bm.width) * progress / total_length; + + 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 +} + static void draw_progressbar(struct gui_wps *gwps, struct progressbar *pb) { struct screen *display = gwps->display; struct wps_state *state = gwps->state; - if (pb->have_bitmap_pb) + if (!pb->is_slider && pb->have_bitmap_pb) gui_bitmap_scrollbar_draw(display, pb->bm, pb->x, pb->y, pb->width, pb->bm.height, state->id3->length ? state->id3->length : 1, 0, state->id3->length ? state->id3->elapsed + state->ff_rewind_count : 0, HORIZONTAL); + else if (pb->is_slider) + slider_progressbar_draw(display, pb->bm, pb->x, pb->y, pb->width, + state->id3->length?state->id3->length:1, + state->id3->length?state->id3->elapsed + state->ff_rewind_count:0); + else gui_scrollbar_draw(display, pb->x, pb->y, pb->width, pb->height, state->id3->length ? state->id3->length : 1, 0, Index: apps/gui/wps_parser.c =================================================================== --- apps/gui/wps_parser.c (revision 17888) +++ apps/gui/wps_parser.c (working copy) @@ -863,6 +863,10 @@ pb->y = y; else pb->y = line_y_pos + (font_height-pb->height)/2; + + if (*(strchr(ptr, '\n')-1) == 's') + pb->is_slider = true; + wps_data->progressbar[wps_data->progressbar_count].have_bitmap_pb = false; wps_data->viewports[wps_data->num_viewports].pb = &wps_data->progressbar[wps_data->progressbar_count]; @@ -1405,6 +1409,7 @@ data->img[i].always_display = false; data->img[i].num_subimages = 1; } + data->progressbar->is_slider = false; } #endif Index: apps/gui/gwps.h =================================================================== --- apps/gui/gwps.h (revision 17888) +++ apps/gui/gwps.h (working copy) @@ -81,6 +81,7 @@ /*progressbar image*/ struct bitmap bm; bool have_bitmap_pb; + bool is_slider; }; #endif