diff options
Diffstat (limited to 'apps/gui/skin_engine')
| -rw-r--r-- | apps/gui/skin_engine/skin_display.c | 57 | ||||
| -rw-r--r-- | apps/gui/skin_engine/skin_engine.h | 2 | ||||
| -rw-r--r-- | apps/gui/skin_engine/skin_parser.c | 42 | ||||
| -rw-r--r-- | apps/gui/skin_engine/wps_internals.h | 13 |
4 files changed, 56 insertions, 58 deletions
diff --git a/apps/gui/skin_engine/skin_display.c b/apps/gui/skin_engine/skin_display.c index 8abbcdd..66675ce 100644 --- a/apps/gui/skin_engine/skin_display.c +++ b/apps/gui/skin_engine/skin_display.c @@ -64,6 +64,7 @@ #include "wps_internals.h" #include "skin_engine.h" +#include "statusbar-skinned.h" static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode); @@ -83,7 +84,6 @@ bool gui_wps_display(struct gui_wps *gwps) vp->bg_pattern = display->get_background(); } #endif - display->clear_display(); display->backdrop_show(BACKDROP_SKIN_WPS); return skin_redraw(gwps, WPS_REFRESH_ALL); } @@ -115,28 +115,30 @@ void skin_statusbar_changed(struct gui_wps *skin) return; struct wps_data *data = skin->data; const struct screen *display = skin->display; + const int screen = display->screen_type; struct viewport *vp = &find_viewport(VP_DEFAULT_LABEL, data)->vp; - viewport_set_fullscreen(vp, display->screen_type); + viewport_set_fullscreen(vp, screen); if (data->wps_sb_tag) { /* fix up the default viewport */ if (data->show_sb_on_wps) { - bool bar_at_top = - statusbar_position(display->screen_type) != STATUSBAR_BOTTOM; + if (statusbar_position(screen) != STATUSBAR_OFF) + return; /* vp is fixed already */ - vp->y = bar_at_top?STATUSBAR_HEIGHT:0; + vp->y = STATUSBAR_HEIGHT; vp->height = display->lcdheight - STATUSBAR_HEIGHT; } else { - vp->y = 0; + if (statusbar_position(screen) == STATUSBAR_OFF) + return; /* vp is fixed already */ + vp->y = vp->x = 0; vp->height = display->lcdheight; + vp->width = display->lcdwidth; } } - - } static void draw_progressbar(struct gui_wps *gwps, @@ -168,7 +170,7 @@ static void draw_progressbar(struct gui_wps *gwps, elapsed = 0; length = 0; } - + if (pb->have_bitmap_pb) gui_bitmap_scrollbar_draw(display, pb->bm, pb->x, y, pb->width, pb->bm.height, @@ -256,7 +258,7 @@ static void wps_display_images(struct gui_wps *gwps, struct viewport* vp) } #ifdef HAVE_ALBUMART /* now draw the AA */ - if (data->albumart && data->albumart->vp == vp + if (data->albumart && data->albumart->vp == vp && data->albumart->draw) { draw_album_art(gwps, playback_current_aa_hid(data->playback_aa_slot), @@ -496,6 +498,7 @@ static bool evaluate_conditional(struct gui_wps *gwps, int *token_index) return true; } + #ifdef HAVE_LCD_BITMAP struct gui_img* find_image(char label, struct wps_data *data) { @@ -946,15 +949,19 @@ static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode) if (refresh_mode == WPS_REFRESH_ALL) { struct skin_line *line; + struct skin_viewport *skin_viewport = find_viewport(VP_DEFAULT_LABEL, data); - display->set_viewport(&find_viewport(VP_DEFAULT_LABEL, data)->vp); - display->clear_viewport(); + if (!(skin_viewport->hidden_flags & VP_NEVER_VISIBLE)) + { + display->set_viewport(&skin_viewport->vp); + display->clear_viewport(); + } for (viewport_list = data->viewports; viewport_list; viewport_list = viewport_list->next) { - struct skin_viewport *skin_viewport = - (struct skin_viewport *)viewport_list->token->value.data; + skin_viewport = + (struct skin_viewport *)viewport_list->token->value.data; for(line = skin_viewport->lines; line; line = line->next) { line->curr_subline = NULL; @@ -977,6 +984,10 @@ static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode) { struct skin_viewport *skin_viewport = (struct skin_viewport *)viewport_list->token->value.data; + if (skin_viewport->hidden_flags&VP_NEVER_VISIBLE) + { + continue; + } if (skin_viewport->hidden_flags&VP_DRAW_HIDEABLE) { if (skin_viewport->hidden_flags&VP_DRAW_HIDDEN) @@ -992,8 +1003,11 @@ static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode) struct skin_viewport *skin_viewport = (struct skin_viewport *)viewport_list->token->value.data; unsigned vp_refresh_mode = refresh_mode; + display->set_viewport(&skin_viewport->vp); + int hidden_vp = 0; + #ifdef HAVE_LCD_BITMAP /* Set images to not to be displayed */ struct skin_token_list *imglist = data->images; @@ -1005,7 +1019,11 @@ static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode) } #endif /* dont redraw the viewport if its disabled */ - if ((skin_viewport->hidden_flags&VP_DRAW_HIDDEN)) + if (skin_viewport->hidden_flags&VP_NEVER_VISIBLE) + { /* don't draw anything into this one */ + vp_refresh_mode = 0; hidden_vp = true; + } + else if ((skin_viewport->hidden_flags&VP_DRAW_HIDDEN)) { if (!(skin_viewport->hidden_flags&VP_DRAW_WASHIDDEN)) display->scroll_stop(&skin_viewport->vp); @@ -1019,6 +1037,7 @@ static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode) vp_refresh_mode = WPS_REFRESH_ALL; skin_viewport->hidden_flags = VP_DRAW_HIDEABLE; } + if (vp_refresh_mode == WPS_REFRESH_ALL) { display->clear_viewport(); @@ -1040,7 +1059,7 @@ static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode) flags = line->curr_subline->line_type; if (vp_refresh_mode == WPS_REFRESH_ALL || (flags & vp_refresh_mode) - || new_subline_refresh) + || new_subline_refresh || hidden_vp) { /* get_line tells us if we need to update the line */ update_line = get_line(gwps, subline, @@ -1086,7 +1105,7 @@ static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode) } #endif - if (update_line && + if (update_line && !hidden_vp && /* conditionals clear the line which means if the %Vd is put into the default viewport there will be a blank line. To get around this we dont allow any actual drawing to happen in the @@ -1105,7 +1124,6 @@ static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode) write_line(display, &align, line_count, false); } } - #ifdef HAVE_LCD_BITMAP /* progressbar */ if (vp_refresh_mode & WPS_REFRESH_PLAYER_PROGRESS) @@ -1116,7 +1134,8 @@ static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode) } } /* Now display any images in this viewport */ - wps_display_images(gwps, &skin_viewport->vp); + if (!hidden_vp) + wps_display_images(gwps, &skin_viewport->vp); #endif } diff --git a/apps/gui/skin_engine/skin_engine.h b/apps/gui/skin_engine/skin_engine.h index c52f720..704a785 100644 --- a/apps/gui/skin_engine/skin_engine.h +++ b/apps/gui/skin_engine/skin_engine.h @@ -27,7 +27,6 @@ #include "wps_internals.h" /* TODO: remove this line.. shoudlnt be needed */ - #ifdef HAVE_TOUCHSCREEN int wps_get_touchaction(struct wps_data *data); #endif @@ -44,7 +43,6 @@ bool skin_update(struct gui_wps *gwps, unsigned int update_type); * or from a skinfile (isfile = true) */ bool skin_data_load(struct wps_data *wps_data, - struct screen *display, const char *buf, bool isfile); diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c index fa35ed9..434e7c9 100644 --- a/apps/gui/skin_engine/skin_parser.c +++ b/apps/gui/skin_engine/skin_parser.c @@ -683,8 +683,15 @@ static int parse_viewport(const char *wps_bufptr, curr_line = NULL; if (!skin_start_new_line(skin_vp, wps_data->num_tokens)) return WPS_ERROR_INVALID_PARAM; - - if (*ptr == 'l') + + + if (*ptr == 'i') + { + skin_vp->label = VP_INFO_LABEL; + skin_vp->hidden_flags = VP_NEVER_VISIBLE; + ++ptr; + } + else if (*ptr == 'l') { if (*(ptr+1) == '|') { @@ -1674,7 +1681,6 @@ static bool load_skin_bmp(struct wps_data *wps_data, struct bitmap *bitmap, char else { /* Abort if we can't load an image */ - DEBUGF("ERR: Failed to load image - %s\n",img_path); loaded = false; } return loaded; @@ -1733,7 +1739,6 @@ static bool load_skin_bitmaps(struct wps_data *wps_data, char *bmpdir) /* to setup up the wps-data from a format-buffer (isfile = false) from a (wps-)file (isfile = true)*/ bool skin_data_load(struct wps_data *wps_data, - struct screen *display, const char *buf, bool isfile) { @@ -1755,6 +1760,7 @@ bool skin_data_load(struct wps_data *wps_data, skin_data_reset(wps_data); + /* alloc default viewport, will be fixed up later */ curr_vp = skin_buffer_alloc(sizeof(struct skin_viewport)); if (!curr_vp) return false; @@ -1766,9 +1772,6 @@ bool skin_data_load(struct wps_data *wps_data, /* Initialise the first (default) viewport */ curr_vp->label = VP_DEFAULT_LABEL; - curr_vp->vp.x = 0; - curr_vp->vp.width = display->getwidth(); - curr_vp->vp.height = display->getheight(); curr_vp->pb = NULL; curr_vp->hidden_flags = 0; curr_vp->lines = NULL; @@ -1777,31 +1780,6 @@ bool skin_data_load(struct wps_data *wps_data, if (!skin_start_new_line(curr_vp, 0)) return false; - switch (statusbar_position(display->screen_type)) - { - case STATUSBAR_OFF: - curr_vp->vp.y = 0; - break; - case STATUSBAR_TOP: - curr_vp->vp.y = STATUSBAR_HEIGHT; - curr_vp->vp.height -= STATUSBAR_HEIGHT; - break; - case STATUSBAR_BOTTOM: - curr_vp->vp.y = 0; - curr_vp->vp.height -= STATUSBAR_HEIGHT; - break; - } -#ifdef HAVE_LCD_BITMAP - curr_vp->vp.font = FONT_UI; - curr_vp->vp.drawmode = DRMODE_SOLID; -#endif -#if LCD_DEPTH > 1 - if (display->depth > 1) - { - curr_vp->vp.fg_pattern = display->get_foreground(); - curr_vp->vp.bg_pattern = display->get_background(); - } -#endif if (!isfile) { return wps_parse(wps_data, buf, false); diff --git a/apps/gui/skin_engine/wps_internals.h b/apps/gui/skin_engine/wps_internals.h index e0e2882..3dbf4e0 100644 --- a/apps/gui/skin_engine/wps_internals.h +++ b/apps/gui/skin_engine/wps_internals.h @@ -191,11 +191,14 @@ struct skin_line { struct skin_line *next; }; -#define VP_DRAW_HIDEABLE 0x1 -#define VP_DRAW_HIDDEN 0x2 -#define VP_DRAW_WASHIDDEN 0x4 -#define VP_DEFAULT_LABEL '|' -#define VP_NO_LABEL '-' +#define VP_DRAW_HIDEABLE 0x1 +#define VP_DRAW_HIDDEN 0x2 +#define VP_DRAW_WASHIDDEN 0x4 +/* these are never drawn, nor cleared, i.e. just ignored */ +#define VP_NEVER_VISIBLE 0x8 +#define VP_DEFAULT_LABEL '|' +#define VP_NO_LABEL '-' +#define VP_INFO_LABEL '_' struct skin_viewport { struct viewport vp; /* The LCD viewport struct */ struct progressbar *pb; |