diff options
Diffstat (limited to 'apps/gui/gwps-common.c')
-rw-r--r-- | apps/gui/gwps-common.c | 76 |
1 files changed, 70 insertions, 6 deletions
diff --git a/apps/gui/gwps-common.c b/apps/gui/gwps-common.c index 34d868f6a2..c918fddf5c 100644 --- a/apps/gui/gwps-common.c +++ b/apps/gui/gwps-common.c | |||
@@ -190,6 +190,61 @@ bool wps_data_preload_tags(struct wps_data *data, char *buf, | |||
190 | break; | 190 | break; |
191 | #endif | 191 | #endif |
192 | 192 | ||
193 | case 'P': | ||
194 | /* progress bar image */ | ||
195 | { | ||
196 | int ret = 0; | ||
197 | char *ptr = buf+2; | ||
198 | char *pos = NULL; | ||
199 | char imgname[MAX_PATH]; | ||
200 | |||
201 | /* format: %P|filename.bmp| */ | ||
202 | { | ||
203 | /* get filename */ | ||
204 | pos = strchr(ptr, '|'); | ||
205 | if ((pos - ptr) < | ||
206 | (int)sizeof(imgname)-ROCKBOX_DIR_LEN-2) | ||
207 | { | ||
208 | memcpy(imgname, bmpdir, bmpdirlen); | ||
209 | imgname[bmpdirlen] = '/'; | ||
210 | memcpy(&imgname[bmpdirlen+1], | ||
211 | ptr, pos - ptr); | ||
212 | imgname[bmpdirlen+1+pos-ptr] = 0; | ||
213 | } | ||
214 | else | ||
215 | /* filename too long */ | ||
216 | imgname[0] = 0; | ||
217 | |||
218 | ptr = pos+1; | ||
219 | |||
220 | /* load the image */ | ||
221 | data->progressbar.bm.data=data->img_buf_ptr; | ||
222 | ret = read_bmp_file(imgname, &data->progressbar.bm, | ||
223 | data->img_buf_free, | ||
224 | FORMAT_ANY|FORMAT_TRANSPARENT); | ||
225 | |||
226 | if (ret > 0) | ||
227 | { | ||
228 | #if LCD_DEPTH == 16 | ||
229 | if (ret % 2) ret++; | ||
230 | /* Always consume an even number of bytes */ | ||
231 | #endif | ||
232 | |||
233 | data->img_buf_ptr += ret; | ||
234 | data->img_buf_free -= ret; | ||
235 | |||
236 | if (data->progressbar.bm.width <= LCD_WIDTH) { | ||
237 | data->progressbar.have_bitmap_pb=true; | ||
238 | return true; | ||
239 | } else | ||
240 | return false; | ||
241 | } | ||
242 | |||
243 | } | ||
244 | } | ||
245 | |||
246 | break; | ||
247 | |||
193 | case 'x': | 248 | case 'x': |
194 | /* Preload images so the %xd# tag can display it */ | 249 | /* Preload images so the %xd# tag can display it */ |
195 | { | 250 | { |
@@ -1536,12 +1591,21 @@ bool gui_wps_refresh(struct gui_wps *gwps, int ffwd_offset, | |||
1536 | if (!data->progress_end) | 1591 | if (!data->progress_end) |
1537 | data->progress_end=display->width; | 1592 | data->progress_end=display->width; |
1538 | 1593 | ||
1539 | gui_scrollbar_draw(display, data->progress_start, sb_y, | 1594 | if (gwps->data->progressbar.have_bitmap_pb) |
1540 | data->progress_end-data->progress_start, | 1595 | gui_bitmap_scrollbar_draw(display, data->progressbar.bm, |
1541 | data->progress_height, | 1596 | data->progress_start, sb_y, |
1542 | state->id3->length?state->id3->length:1, 0, | 1597 | data->progress_end-data->progress_start, |
1543 | state->id3->length?state->id3->elapsed + state->ff_rewind_count:0, | 1598 | data->progressbar.bm.height, |
1544 | HORIZONTAL); | 1599 | state->id3->length?state->id3->length:1, 0, |
1600 | state->id3->length?state->id3->elapsed + state->ff_rewind_count:0, | ||
1601 | HORIZONTAL); | ||
1602 | else | ||
1603 | gui_scrollbar_draw(display, data->progress_start, sb_y, | ||
1604 | data->progress_end-data->progress_start, | ||
1605 | data->progress_height, | ||
1606 | state->id3->length?state->id3->length:1, 0, | ||
1607 | state->id3->length?state->id3->elapsed + state->ff_rewind_count:0, | ||
1608 | HORIZONTAL); | ||
1545 | #ifdef AB_REPEAT_ENABLE | 1609 | #ifdef AB_REPEAT_ENABLE |
1546 | if ( ab_repeat_mode_enabled() ) | 1610 | if ( ab_repeat_mode_enabled() ) |
1547 | ab_draw_markers(display, state->id3->length, 0, sb_y, | 1611 | ab_draw_markers(display, state->id3->length, 0, sb_y, |