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 8abbcddb39..66675ce95a 100644 --- a/apps/gui/skin_engine/skin_display.c +++ b/apps/gui/skin_engine/skin_display.c | |||
@@ -64,6 +64,7 @@ | |||
64 | 64 | ||
65 | #include "wps_internals.h" | 65 | #include "wps_internals.h" |
66 | #include "skin_engine.h" | 66 | #include "skin_engine.h" |
67 | #include "statusbar-skinned.h" | ||
67 | 68 | ||
68 | static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode); | 69 | static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode); |
69 | 70 | ||
@@ -83,7 +84,6 @@ bool gui_wps_display(struct gui_wps *gwps) | |||
83 | vp->bg_pattern = display->get_background(); | 84 | vp->bg_pattern = display->get_background(); |
84 | } | 85 | } |
85 | #endif | 86 | #endif |
86 | display->clear_display(); | ||
87 | display->backdrop_show(BACKDROP_SKIN_WPS); | 87 | display->backdrop_show(BACKDROP_SKIN_WPS); |
88 | return skin_redraw(gwps, WPS_REFRESH_ALL); | 88 | return skin_redraw(gwps, WPS_REFRESH_ALL); |
89 | } | 89 | } |
@@ -115,28 +115,30 @@ void skin_statusbar_changed(struct gui_wps *skin) | |||
115 | return; | 115 | return; |
116 | struct wps_data *data = skin->data; | 116 | struct wps_data *data = skin->data; |
117 | const struct screen *display = skin->display; | 117 | const struct screen *display = skin->display; |
118 | const int screen = display->screen_type; | ||
118 | 119 | ||
119 | struct viewport *vp = &find_viewport(VP_DEFAULT_LABEL, data)->vp; | 120 | struct viewport *vp = &find_viewport(VP_DEFAULT_LABEL, data)->vp; |
120 | viewport_set_fullscreen(vp, display->screen_type); | 121 | viewport_set_fullscreen(vp, screen); |
121 | 122 | ||
122 | if (data->wps_sb_tag) | 123 | if (data->wps_sb_tag) |
123 | { /* fix up the default viewport */ | 124 | { /* fix up the default viewport */ |
124 | if (data->show_sb_on_wps) | 125 | if (data->show_sb_on_wps) |
125 | { | 126 | { |
126 | bool bar_at_top = | 127 | if (statusbar_position(screen) != STATUSBAR_OFF) |
127 | statusbar_position(display->screen_type) != STATUSBAR_BOTTOM; | 128 | return; /* vp is fixed already */ |
128 | 129 | ||
129 | vp->y = bar_at_top?STATUSBAR_HEIGHT:0; | 130 | vp->y = STATUSBAR_HEIGHT; |
130 | vp->height = display->lcdheight - STATUSBAR_HEIGHT; | 131 | vp->height = display->lcdheight - STATUSBAR_HEIGHT; |
131 | } | 132 | } |
132 | else | 133 | else |
133 | { | 134 | { |
134 | vp->y = 0; | 135 | if (statusbar_position(screen) == STATUSBAR_OFF) |
136 | return; /* vp is fixed already */ | ||
137 | vp->y = vp->x = 0; | ||
135 | vp->height = display->lcdheight; | 138 | vp->height = display->lcdheight; |
139 | vp->width = display->lcdwidth; | ||
136 | } | 140 | } |
137 | } | 141 | } |
138 | |||
139 | |||
140 | } | 142 | } |
141 | 143 | ||
142 | static void draw_progressbar(struct gui_wps *gwps, | 144 | static void draw_progressbar(struct gui_wps *gwps, |
@@ -168,7 +170,7 @@ static void draw_progressbar(struct gui_wps *gwps, | |||
168 | elapsed = 0; | 170 | elapsed = 0; |
169 | length = 0; | 171 | length = 0; |
170 | } | 172 | } |
171 | 173 | ||
172 | if (pb->have_bitmap_pb) | 174 | if (pb->have_bitmap_pb) |
173 | gui_bitmap_scrollbar_draw(display, pb->bm, | 175 | gui_bitmap_scrollbar_draw(display, pb->bm, |
174 | pb->x, y, pb->width, pb->bm.height, | 176 | pb->x, y, pb->width, pb->bm.height, |
@@ -256,7 +258,7 @@ static void wps_display_images(struct gui_wps *gwps, struct viewport* vp) | |||
256 | } | 258 | } |
257 | #ifdef HAVE_ALBUMART | 259 | #ifdef HAVE_ALBUMART |
258 | /* now draw the AA */ | 260 | /* now draw the AA */ |
259 | if (data->albumart && data->albumart->vp == vp | 261 | if (data->albumart && data->albumart->vp == vp |
260 | && data->albumart->draw) | 262 | && data->albumart->draw) |
261 | { | 263 | { |
262 | draw_album_art(gwps, playback_current_aa_hid(data->playback_aa_slot), | 264 | 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) | |||
496 | 498 | ||
497 | return true; | 499 | return true; |
498 | } | 500 | } |
501 | |||
499 | #ifdef HAVE_LCD_BITMAP | 502 | #ifdef HAVE_LCD_BITMAP |
500 | struct gui_img* find_image(char label, struct wps_data *data) | 503 | struct gui_img* find_image(char label, struct wps_data *data) |
501 | { | 504 | { |
@@ -946,15 +949,19 @@ static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode) | |||
946 | if (refresh_mode == WPS_REFRESH_ALL) | 949 | if (refresh_mode == WPS_REFRESH_ALL) |
947 | { | 950 | { |
948 | struct skin_line *line; | 951 | struct skin_line *line; |
952 | struct skin_viewport *skin_viewport = find_viewport(VP_DEFAULT_LABEL, data); | ||
949 | 953 | ||
950 | display->set_viewport(&find_viewport(VP_DEFAULT_LABEL, data)->vp); | 954 | if (!(skin_viewport->hidden_flags & VP_NEVER_VISIBLE)) |
951 | display->clear_viewport(); | 955 | { |
956 | display->set_viewport(&skin_viewport->vp); | ||
957 | display->clear_viewport(); | ||
958 | } | ||
952 | 959 | ||
953 | for (viewport_list = data->viewports; | 960 | for (viewport_list = data->viewports; |
954 | viewport_list; viewport_list = viewport_list->next) | 961 | viewport_list; viewport_list = viewport_list->next) |
955 | { | 962 | { |
956 | struct skin_viewport *skin_viewport = | 963 | skin_viewport = |
957 | (struct skin_viewport *)viewport_list->token->value.data; | 964 | (struct skin_viewport *)viewport_list->token->value.data; |
958 | for(line = skin_viewport->lines; line; line = line->next) | 965 | for(line = skin_viewport->lines; line; line = line->next) |
959 | { | 966 | { |
960 | line->curr_subline = NULL; | 967 | line->curr_subline = NULL; |
@@ -977,6 +984,10 @@ static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode) | |||
977 | { | 984 | { |
978 | struct skin_viewport *skin_viewport = | 985 | struct skin_viewport *skin_viewport = |
979 | (struct skin_viewport *)viewport_list->token->value.data; | 986 | (struct skin_viewport *)viewport_list->token->value.data; |
987 | if (skin_viewport->hidden_flags&VP_NEVER_VISIBLE) | ||
988 | { | ||
989 | continue; | ||
990 | } | ||
980 | if (skin_viewport->hidden_flags&VP_DRAW_HIDEABLE) | 991 | if (skin_viewport->hidden_flags&VP_DRAW_HIDEABLE) |
981 | { | 992 | { |
982 | if (skin_viewport->hidden_flags&VP_DRAW_HIDDEN) | 993 | if (skin_viewport->hidden_flags&VP_DRAW_HIDDEN) |
@@ -992,8 +1003,11 @@ static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode) | |||
992 | struct skin_viewport *skin_viewport = | 1003 | struct skin_viewport *skin_viewport = |
993 | (struct skin_viewport *)viewport_list->token->value.data; | 1004 | (struct skin_viewport *)viewport_list->token->value.data; |
994 | unsigned vp_refresh_mode = refresh_mode; | 1005 | unsigned vp_refresh_mode = refresh_mode; |
1006 | |||
995 | display->set_viewport(&skin_viewport->vp); | 1007 | display->set_viewport(&skin_viewport->vp); |
996 | 1008 | ||
1009 | int hidden_vp = 0; | ||
1010 | |||
997 | #ifdef HAVE_LCD_BITMAP | 1011 | #ifdef HAVE_LCD_BITMAP |
998 | /* Set images to not to be displayed */ | 1012 | /* Set images to not to be displayed */ |
999 | struct skin_token_list *imglist = data->images; | 1013 | struct skin_token_list *imglist = data->images; |
@@ -1005,7 +1019,11 @@ static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode) | |||
1005 | } | 1019 | } |
1006 | #endif | 1020 | #endif |
1007 | /* dont redraw the viewport if its disabled */ | 1021 | /* dont redraw the viewport if its disabled */ |
1008 | if ((skin_viewport->hidden_flags&VP_DRAW_HIDDEN)) | 1022 | if (skin_viewport->hidden_flags&VP_NEVER_VISIBLE) |
1023 | { /* don't draw anything into this one */ | ||
1024 | vp_refresh_mode = 0; hidden_vp = true; | ||
1025 | } | ||
1026 | else if ((skin_viewport->hidden_flags&VP_DRAW_HIDDEN)) | ||
1009 | { | 1027 | { |
1010 | if (!(skin_viewport->hidden_flags&VP_DRAW_WASHIDDEN)) | 1028 | if (!(skin_viewport->hidden_flags&VP_DRAW_WASHIDDEN)) |
1011 | display->scroll_stop(&skin_viewport->vp); | 1029 | display->scroll_stop(&skin_viewport->vp); |
@@ -1019,6 +1037,7 @@ static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode) | |||
1019 | vp_refresh_mode = WPS_REFRESH_ALL; | 1037 | vp_refresh_mode = WPS_REFRESH_ALL; |
1020 | skin_viewport->hidden_flags = VP_DRAW_HIDEABLE; | 1038 | skin_viewport->hidden_flags = VP_DRAW_HIDEABLE; |
1021 | } | 1039 | } |
1040 | |||
1022 | if (vp_refresh_mode == WPS_REFRESH_ALL) | 1041 | if (vp_refresh_mode == WPS_REFRESH_ALL) |
1023 | { | 1042 | { |
1024 | display->clear_viewport(); | 1043 | display->clear_viewport(); |
@@ -1040,7 +1059,7 @@ static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode) | |||
1040 | flags = line->curr_subline->line_type; | 1059 | flags = line->curr_subline->line_type; |
1041 | 1060 | ||
1042 | if (vp_refresh_mode == WPS_REFRESH_ALL || (flags & vp_refresh_mode) | 1061 | if (vp_refresh_mode == WPS_REFRESH_ALL || (flags & vp_refresh_mode) |
1043 | || new_subline_refresh) | 1062 | || new_subline_refresh || hidden_vp) |
1044 | { | 1063 | { |
1045 | /* get_line tells us if we need to update the line */ | 1064 | /* get_line tells us if we need to update the line */ |
1046 | update_line = get_line(gwps, subline, | 1065 | update_line = get_line(gwps, subline, |
@@ -1086,7 +1105,7 @@ static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode) | |||
1086 | } | 1105 | } |
1087 | #endif | 1106 | #endif |
1088 | 1107 | ||
1089 | if (update_line && | 1108 | if (update_line && !hidden_vp && |
1090 | /* conditionals clear the line which means if the %Vd is put into the default | 1109 | /* conditionals clear the line which means if the %Vd is put into the default |
1091 | viewport there will be a blank line. | 1110 | viewport there will be a blank line. |
1092 | To get around this we dont allow any actual drawing to happen in the | 1111 | 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) | |||
1105 | write_line(display, &align, line_count, false); | 1124 | write_line(display, &align, line_count, false); |
1106 | } | 1125 | } |
1107 | } | 1126 | } |
1108 | |||
1109 | #ifdef HAVE_LCD_BITMAP | 1127 | #ifdef HAVE_LCD_BITMAP |
1110 | /* progressbar */ | 1128 | /* progressbar */ |
1111 | if (vp_refresh_mode & WPS_REFRESH_PLAYER_PROGRESS) | 1129 | if (vp_refresh_mode & WPS_REFRESH_PLAYER_PROGRESS) |
@@ -1116,7 +1134,8 @@ static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode) | |||
1116 | } | 1134 | } |
1117 | } | 1135 | } |
1118 | /* Now display any images in this viewport */ | 1136 | /* Now display any images in this viewport */ |
1119 | wps_display_images(gwps, &skin_viewport->vp); | 1137 | if (!hidden_vp) |
1138 | wps_display_images(gwps, &skin_viewport->vp); | ||
1120 | #endif | 1139 | #endif |
1121 | } | 1140 | } |
1122 | 1141 | ||
diff --git a/apps/gui/skin_engine/skin_engine.h b/apps/gui/skin_engine/skin_engine.h index c52f720d06..704a7851c2 100644 --- a/apps/gui/skin_engine/skin_engine.h +++ b/apps/gui/skin_engine/skin_engine.h | |||
@@ -27,7 +27,6 @@ | |||
27 | 27 | ||
28 | #include "wps_internals.h" /* TODO: remove this line.. shoudlnt be needed */ | 28 | #include "wps_internals.h" /* TODO: remove this line.. shoudlnt be needed */ |
29 | 29 | ||
30 | |||
31 | #ifdef HAVE_TOUCHSCREEN | 30 | #ifdef HAVE_TOUCHSCREEN |
32 | int wps_get_touchaction(struct wps_data *data); | 31 | int wps_get_touchaction(struct wps_data *data); |
33 | #endif | 32 | #endif |
@@ -44,7 +43,6 @@ bool skin_update(struct gui_wps *gwps, unsigned int update_type); | |||
44 | * or from a skinfile (isfile = true) | 43 | * or from a skinfile (isfile = true) |
45 | */ | 44 | */ |
46 | bool skin_data_load(struct wps_data *wps_data, | 45 | bool skin_data_load(struct wps_data *wps_data, |
47 | struct screen *display, | ||
48 | const char *buf, | 46 | const char *buf, |
49 | bool isfile); | 47 | bool isfile); |
50 | 48 | ||
diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c index fa35ed994f..434e7c9fa5 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, | |||
683 | curr_line = NULL; | 683 | curr_line = NULL; |
684 | if (!skin_start_new_line(skin_vp, wps_data->num_tokens)) | 684 | if (!skin_start_new_line(skin_vp, wps_data->num_tokens)) |
685 | return WPS_ERROR_INVALID_PARAM; | 685 | return WPS_ERROR_INVALID_PARAM; |
686 | 686 | ||
687 | if (*ptr == 'l') | 687 | |
688 | if (*ptr == 'i') | ||
689 | { | ||
690 | skin_vp->label = VP_INFO_LABEL; | ||
691 | skin_vp->hidden_flags = VP_NEVER_VISIBLE; | ||
692 | ++ptr; | ||
693 | } | ||
694 | else if (*ptr == 'l') | ||
688 | { | 695 | { |
689 | if (*(ptr+1) == '|') | 696 | if (*(ptr+1) == '|') |
690 | { | 697 | { |
@@ -1674,7 +1681,6 @@ static bool load_skin_bmp(struct wps_data *wps_data, struct bitmap *bitmap, char | |||
1674 | else | 1681 | else |
1675 | { | 1682 | { |
1676 | /* Abort if we can't load an image */ | 1683 | /* Abort if we can't load an image */ |
1677 | DEBUGF("ERR: Failed to load image - %s\n",img_path); | ||
1678 | loaded = false; | 1684 | loaded = false; |
1679 | } | 1685 | } |
1680 | return loaded; | 1686 | return loaded; |
@@ -1733,7 +1739,6 @@ static bool load_skin_bitmaps(struct wps_data *wps_data, char *bmpdir) | |||
1733 | /* to setup up the wps-data from a format-buffer (isfile = false) | 1739 | /* to setup up the wps-data from a format-buffer (isfile = false) |
1734 | from a (wps-)file (isfile = true)*/ | 1740 | from a (wps-)file (isfile = true)*/ |
1735 | bool skin_data_load(struct wps_data *wps_data, | 1741 | bool skin_data_load(struct wps_data *wps_data, |
1736 | struct screen *display, | ||
1737 | const char *buf, | 1742 | const char *buf, |
1738 | bool isfile) | 1743 | bool isfile) |
1739 | { | 1744 | { |
@@ -1755,6 +1760,7 @@ bool skin_data_load(struct wps_data *wps_data, | |||
1755 | 1760 | ||
1756 | skin_data_reset(wps_data); | 1761 | skin_data_reset(wps_data); |
1757 | 1762 | ||
1763 | /* alloc default viewport, will be fixed up later */ | ||
1758 | curr_vp = skin_buffer_alloc(sizeof(struct skin_viewport)); | 1764 | curr_vp = skin_buffer_alloc(sizeof(struct skin_viewport)); |
1759 | if (!curr_vp) | 1765 | if (!curr_vp) |
1760 | return false; | 1766 | return false; |
@@ -1766,9 +1772,6 @@ bool skin_data_load(struct wps_data *wps_data, | |||
1766 | 1772 | ||
1767 | /* Initialise the first (default) viewport */ | 1773 | /* Initialise the first (default) viewport */ |
1768 | curr_vp->label = VP_DEFAULT_LABEL; | 1774 | curr_vp->label = VP_DEFAULT_LABEL; |
1769 | curr_vp->vp.x = 0; | ||
1770 | curr_vp->vp.width = display->getwidth(); | ||
1771 | curr_vp->vp.height = display->getheight(); | ||
1772 | curr_vp->pb = NULL; | 1775 | curr_vp->pb = NULL; |
1773 | curr_vp->hidden_flags = 0; | 1776 | curr_vp->hidden_flags = 0; |
1774 | curr_vp->lines = NULL; | 1777 | curr_vp->lines = NULL; |
@@ -1777,31 +1780,6 @@ bool skin_data_load(struct wps_data *wps_data, | |||
1777 | if (!skin_start_new_line(curr_vp, 0)) | 1780 | if (!skin_start_new_line(curr_vp, 0)) |
1778 | return false; | 1781 | return false; |
1779 | 1782 | ||
1780 | switch (statusbar_position(display->screen_type)) | ||
1781 | { | ||
1782 | case STATUSBAR_OFF: | ||
1783 | curr_vp->vp.y = 0; | ||
1784 | break; | ||
1785 | case STATUSBAR_TOP: | ||
1786 | curr_vp->vp.y = STATUSBAR_HEIGHT; | ||
1787 | curr_vp->vp.height -= STATUSBAR_HEIGHT; | ||
1788 | break; | ||
1789 | case STATUSBAR_BOTTOM: | ||
1790 | curr_vp->vp.y = 0; | ||
1791 | curr_vp->vp.height -= STATUSBAR_HEIGHT; | ||
1792 | break; | ||
1793 | } | ||
1794 | #ifdef HAVE_LCD_BITMAP | ||
1795 | curr_vp->vp.font = FONT_UI; | ||
1796 | curr_vp->vp.drawmode = DRMODE_SOLID; | ||
1797 | #endif | ||
1798 | #if LCD_DEPTH > 1 | ||
1799 | if (display->depth > 1) | ||
1800 | { | ||
1801 | curr_vp->vp.fg_pattern = display->get_foreground(); | ||
1802 | curr_vp->vp.bg_pattern = display->get_background(); | ||
1803 | } | ||
1804 | #endif | ||
1805 | if (!isfile) | 1783 | if (!isfile) |
1806 | { | 1784 | { |
1807 | return wps_parse(wps_data, buf, false); | 1785 | 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 e0e2882556..3dbf4e0087 100644 --- a/apps/gui/skin_engine/wps_internals.h +++ b/apps/gui/skin_engine/wps_internals.h | |||
@@ -191,11 +191,14 @@ struct skin_line { | |||
191 | struct skin_line *next; | 191 | struct skin_line *next; |
192 | }; | 192 | }; |
193 | 193 | ||
194 | #define VP_DRAW_HIDEABLE 0x1 | 194 | #define VP_DRAW_HIDEABLE 0x1 |
195 | #define VP_DRAW_HIDDEN 0x2 | 195 | #define VP_DRAW_HIDDEN 0x2 |
196 | #define VP_DRAW_WASHIDDEN 0x4 | 196 | #define VP_DRAW_WASHIDDEN 0x4 |
197 | #define VP_DEFAULT_LABEL '|' | 197 | /* these are never drawn, nor cleared, i.e. just ignored */ |
198 | #define VP_NO_LABEL '-' | 198 | #define VP_NEVER_VISIBLE 0x8 |
199 | #define VP_DEFAULT_LABEL '|' | ||
200 | #define VP_NO_LABEL '-' | ||
201 | #define VP_INFO_LABEL '_' | ||
199 | struct skin_viewport { | 202 | struct skin_viewport { |
200 | struct viewport vp; /* The LCD viewport struct */ | 203 | struct viewport vp; /* The LCD viewport struct */ |
201 | struct progressbar *pb; | 204 | struct progressbar *pb; |