summaryrefslogtreecommitdiff
path: root/apps/gui/gwps-common.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/gui/gwps-common.c')
-rw-r--r--apps/gui/gwps-common.c76
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,