diff options
Diffstat (limited to 'apps/gui')
-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 | ||||
-rw-r--r-- | apps/gui/statusbar-skinned.c | 152 | ||||
-rw-r--r-- | apps/gui/statusbar-skinned.h | 51 | ||||
-rw-r--r-- | apps/gui/statusbar.c | 3 | ||||
-rw-r--r-- | apps/gui/statusbar.h | 3 | ||||
-rw-r--r-- | apps/gui/viewport.c | 101 | ||||
-rw-r--r-- | apps/gui/viewport.h | 20 | ||||
-rw-r--r-- | apps/gui/wps.c | 26 |
11 files changed, 355 insertions, 115 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; |
diff --git a/apps/gui/statusbar-skinned.c b/apps/gui/statusbar-skinned.c new file mode 100644 index 0000000000..1cb6aa3623 --- /dev/null +++ b/apps/gui/statusbar-skinned.c | |||
@@ -0,0 +1,152 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2009 Thomas Martitz | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | |||
22 | #include "config.h" | ||
23 | |||
24 | #include "system.h" | ||
25 | #include "settings.h" | ||
26 | #include "appevents.h" | ||
27 | #include "screens.h" | ||
28 | #include "screen_access.h" | ||
29 | #include "skin_engine/skin_engine.h" | ||
30 | #include "skin_engine/wps_internals.h" | ||
31 | #include "viewport.h" | ||
32 | #include "statusbar.h" | ||
33 | #include "statusbar-skinned.h" | ||
34 | #include "debug.h" | ||
35 | |||
36 | |||
37 | /* currently only one wps_state is needed */ | ||
38 | extern struct wps_state wps_state; /* from wps.c */ | ||
39 | static struct gui_wps sb_skin[NB_SCREENS] = {{ .data = NULL }}; | ||
40 | static struct wps_data sb_skin_data[NB_SCREENS] = {{ .wps_loaded = 0 }}; | ||
41 | |||
42 | /* initial setup of wps_data */ | ||
43 | static void sb_skin_update(void*); | ||
44 | static bool loaded_ok[NB_SCREENS] = { false }; | ||
45 | static int skinbars = 0; | ||
46 | static int update_delay = DEFAULT_UPDATE_DELAY; | ||
47 | |||
48 | |||
49 | void sb_skin_data_load(enum screen_type screen, const char *buf, bool isfile) | ||
50 | { | ||
51 | struct wps_data *data = sb_skin[screen].data; | ||
52 | |||
53 | int success; | ||
54 | success = buf && skin_data_load(data, buf, isfile); | ||
55 | |||
56 | if (success) | ||
57 | { /* hide the sb's default viewport because it has nasty effect with stuff | ||
58 | * not part of the statusbar, | ||
59 | * hence .sbs's without any other vps are unsupported*/ | ||
60 | struct skin_viewport *vp = find_viewport(VP_DEFAULT_LABEL, data); | ||
61 | struct skin_token_list *next_vp = data->viewports->next; | ||
62 | |||
63 | if (!next_vp) | ||
64 | { /* no second viewport, let parsing fail */ | ||
65 | success = false; | ||
66 | } | ||
67 | /* hide this viewport, forever */ | ||
68 | vp->hidden_flags = VP_NEVER_VISIBLE; | ||
69 | } | ||
70 | |||
71 | if (!success) | ||
72 | remove_event(GUI_EVENT_ACTIONUPDATE, sb_skin_update); | ||
73 | |||
74 | #ifdef HAVE_REMOVE_LCD | ||
75 | data->remote_wps = !(screen == SCREEN_MAIN); | ||
76 | #endif | ||
77 | loaded_ok[screen] = success; | ||
78 | } | ||
79 | |||
80 | struct viewport *sb_skin_get_info_vp(enum screen_type screen) | ||
81 | { | ||
82 | return &find_viewport(VP_INFO_LABEL, sb_skin[screen].data)->vp; | ||
83 | } | ||
84 | |||
85 | inline bool sb_skin_get_state(enum screen_type screen) | ||
86 | { | ||
87 | return loaded_ok[screen] && (skinbars & VP_SB_ONSCREEN(screen)); | ||
88 | } | ||
89 | |||
90 | void sb_skin_set_state(int state, enum screen_type screen) | ||
91 | { | ||
92 | sb_skin[screen].state->do_full_update = true; | ||
93 | if (state) | ||
94 | { | ||
95 | skinbars |= VP_SB_ONSCREEN(screen); | ||
96 | } | ||
97 | else | ||
98 | { | ||
99 | skinbars &= ~VP_SB_ONSCREEN(screen); | ||
100 | } | ||
101 | |||
102 | if (skinbars) | ||
103 | add_event(GUI_EVENT_ACTIONUPDATE, false, sb_skin_update); | ||
104 | else | ||
105 | remove_event(GUI_EVENT_ACTIONUPDATE, sb_skin_update); | ||
106 | } | ||
107 | |||
108 | static void sb_skin_update(void* param) | ||
109 | { | ||
110 | static long next_update = 0; | ||
111 | int i; | ||
112 | int forced_draw = param || sb_skin[SCREEN_MAIN].state->do_full_update; | ||
113 | if (TIME_AFTER(current_tick, next_update) || forced_draw) | ||
114 | { | ||
115 | FOR_NB_SCREENS(i) | ||
116 | { | ||
117 | if (sb_skin_get_state(i)) | ||
118 | { | ||
119 | skin_update(&sb_skin[i], forced_draw? | ||
120 | WPS_REFRESH_ALL : WPS_REFRESH_NON_STATIC); | ||
121 | } | ||
122 | } | ||
123 | next_update = current_tick + update_delay; /* don't update too often */ | ||
124 | sb_skin[SCREEN_MAIN].state->do_full_update = false; | ||
125 | } | ||
126 | } | ||
127 | |||
128 | void sb_skin_set_update_delay(int delay) | ||
129 | { | ||
130 | update_delay = delay; | ||
131 | } | ||
132 | |||
133 | void sb_skin_init(void) | ||
134 | { | ||
135 | int i; | ||
136 | FOR_NB_SCREENS(i) | ||
137 | { | ||
138 | #ifdef HAVE_ALBUMART | ||
139 | sb_skin_data[i].albumart = NULL; | ||
140 | sb_skin_data[i].playback_aa_slot = -1; | ||
141 | #endif | ||
142 | #ifdef HAVE_REMOTE_LCD | ||
143 | sb_skin_data[i].remote_wps = (i == SCREEN_REMOTE); | ||
144 | #endif | ||
145 | sb_skin[i].data = &sb_skin_data[i]; | ||
146 | sb_skin[i].display = &screens[i]; | ||
147 | /* Currently no seperate wps_state needed/possible | ||
148 | so use the only available ( "global" ) one */ | ||
149 | sb_skin[i].state = &wps_state; | ||
150 | sb_skin[i].statusbars = &skinbars; | ||
151 | } | ||
152 | } | ||
diff --git a/apps/gui/statusbar-skinned.h b/apps/gui/statusbar-skinned.h new file mode 100644 index 0000000000..7c81eb8d01 --- /dev/null +++ b/apps/gui/statusbar-skinned.h | |||
@@ -0,0 +1,51 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2009 Thomas Martitz | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | #ifndef __STATUSBAR_SKINNED_H__ | ||
22 | #define __STATUSBAR_SKINNED_H__ | ||
23 | |||
24 | #define DEFAULT_UPDATE_DELAY (HZ/7) | ||
25 | |||
26 | #ifdef HAVE_LCD_BITMAP | ||
27 | |||
28 | #include <stdio.h> | ||
29 | #include <string.h> | ||
30 | #include <stdlib.h> | ||
31 | #include "config.h" | ||
32 | |||
33 | |||
34 | void sb_skin_data_load(enum screen_type screen, const char *buf, bool isfile); | ||
35 | |||
36 | /* probably temporary, to shut the classic statusbar up */ | ||
37 | bool sb_skin_get_state(enum screen_type screen); | ||
38 | void sb_skin_set_state(int state, enum screen_type screen); | ||
39 | void sb_skin_init(void); | ||
40 | struct viewport *sb_skin_get_info_vp(enum screen_type screen); | ||
41 | |||
42 | void sb_skin_set_update_delay(int delay); | ||
43 | |||
44 | #else /* CHARCELL */ | ||
45 | #define sb_skin_init() | ||
46 | #define sb_skin_data_load(a,b,c) | ||
47 | #define sb_skin_set_update_delay(a) | ||
48 | #define sb_skin_set_state(a,b) | ||
49 | #define sb_skin_get_state(a) | ||
50 | #endif | ||
51 | #endif /* __STATUSBAR_SKINNED_H__ */ | ||
diff --git a/apps/gui/statusbar.c b/apps/gui/statusbar.c index 5aac200157..4710ebac42 100644 --- a/apps/gui/statusbar.c +++ b/apps/gui/statusbar.c | |||
@@ -188,6 +188,9 @@ void gui_statusbar_draw(struct gui_statusbar * bar, bool force_redraw) | |||
188 | { | 188 | { |
189 | struct screen * display = bar->display; | 189 | struct screen * display = bar->display; |
190 | 190 | ||
191 | if (!display) | ||
192 | return; | ||
193 | |||
191 | #ifdef HAVE_LCD_CHARCELLS | 194 | #ifdef HAVE_LCD_CHARCELLS |
192 | int val; | 195 | int val; |
193 | (void)force_redraw; /* The Player always has "redraw" */ | 196 | (void)force_redraw; /* The Player always has "redraw" */ |
diff --git a/apps/gui/statusbar.h b/apps/gui/statusbar.h index 84d37858e2..b25edbfab3 100644 --- a/apps/gui/statusbar.h +++ b/apps/gui/statusbar.h | |||
@@ -55,7 +55,8 @@ struct status_info { | |||
55 | }; | 55 | }; |
56 | 56 | ||
57 | /* statusbar visibility/position, used for settings also */ | 57 | /* statusbar visibility/position, used for settings also */ |
58 | enum statusbar_values { STATUSBAR_OFF = 0, STATUSBAR_TOP, STATUSBAR_BOTTOM }; | 58 | enum statusbar_values { STATUSBAR_OFF = 0, STATUSBAR_TOP, STATUSBAR_BOTTOM, |
59 | STATUSBAR_CUSTOM }; | ||
59 | 60 | ||
60 | struct gui_statusbar | 61 | struct gui_statusbar |
61 | { | 62 | { |
diff --git a/apps/gui/viewport.c b/apps/gui/viewport.c index fdd06bdc46..f39a299521 100644 --- a/apps/gui/viewport.c +++ b/apps/gui/viewport.c | |||
@@ -58,6 +58,9 @@ | |||
58 | #ifdef HAVE_LCD_BITMAP | 58 | #ifdef HAVE_LCD_BITMAP |
59 | #include "language.h" | 59 | #include "language.h" |
60 | #endif | 60 | #endif |
61 | #include "statusbar-skinned.h" | ||
62 | #include "debug.h" | ||
63 | |||
61 | 64 | ||
62 | static int statusbar_enabled = 0; | 65 | static int statusbar_enabled = 0; |
63 | 66 | ||
@@ -93,8 +96,9 @@ static bool showing_bars(enum screen_type screen) | |||
93 | if (statusbar_enabled & VP_SB_ONSCREEN(screen)) | 96 | if (statusbar_enabled & VP_SB_ONSCREEN(screen)) |
94 | { | 97 | { |
95 | #ifdef HAVE_LCD_BITMAP | 98 | #ifdef HAVE_LCD_BITMAP |
96 | bool ignore = statusbar_enabled & VP_SB_IGNORE_SETTING(screen); | 99 | int ignore; |
97 | return ignore || (statusbar_position(screen)); | 100 | ignore = statusbar_enabled & VP_SB_IGNORE_SETTING(screen); |
101 | return ignore || (statusbar_position(screen) != STATUSBAR_OFF); | ||
98 | #else | 102 | #else |
99 | return true; | 103 | return true; |
100 | #endif | 104 | #endif |
@@ -109,22 +113,30 @@ void viewport_set_fullscreen(struct viewport *vp, | |||
109 | vp->width = screens[screen].lcdwidth; | 113 | vp->width = screens[screen].lcdwidth; |
110 | 114 | ||
111 | #ifdef HAVE_LCD_BITMAP | 115 | #ifdef HAVE_LCD_BITMAP |
112 | set_default_align_flags(vp); | 116 | struct viewport *sb_skin_vp = sb_skin_get_info_vp(screen); |
113 | vp->drawmode = DRMODE_SOLID; | 117 | if (sb_skin_vp && sb_skin_get_state(screen) |
114 | vp->font = FONT_UI; /* default to UI to discourage SYSFONT use */ | 118 | && statusbar_enabled & VP_SB_ONSCREEN(screen)) |
115 | 119 | { | |
116 | vp->height = screens[screen].lcdheight; | 120 | *vp = *sb_skin_vp; |
117 | if (statusbar_position(screen) != STATUSBAR_BOTTOM | 121 | } |
118 | && showing_bars(screen)) | 122 | else |
119 | vp->y = STATUSBAR_HEIGHT; | 123 | { |
120 | else | 124 | if (statusbar_position(screen) != STATUSBAR_BOTTOM && showing_bars(screen)) |
121 | vp->y = 0; | 125 | vp->y = STATUSBAR_HEIGHT; |
126 | else | ||
127 | vp->y = 0; | ||
122 | #else | 128 | #else |
123 | vp->y = 0; | 129 | { |
130 | vp->y = 0; | ||
124 | #endif | 131 | #endif |
125 | vp->height = screens[screen].lcdheight | 132 | vp->height = screens[screen].lcdheight |
126 | - (showing_bars(screen)?STATUSBAR_HEIGHT:0); | 133 | - (showing_bars(screen)?STATUSBAR_HEIGHT:0); |
134 | } | ||
127 | 135 | ||
136 | #ifdef HAVE_LCD_BITMAP | ||
137 | set_default_align_flags(vp); | ||
138 | vp->font = FONT_UI; /* default to UI to discourage SYSFONT use */ | ||
139 | vp->drawmode = DRMODE_SOLID; | ||
128 | #if LCD_DEPTH > 1 | 140 | #if LCD_DEPTH > 1 |
129 | #ifdef HAVE_REMOTE_LCD | 141 | #ifdef HAVE_REMOTE_LCD |
130 | /* We only need this test if there is a remote LCD */ | 142 | /* We only need this test if there is a remote LCD */ |
@@ -144,7 +156,7 @@ void viewport_set_fullscreen(struct viewport *vp, | |||
144 | vp->bg_pattern = LCD_REMOTE_DEFAULT_BG; | 156 | vp->bg_pattern = LCD_REMOTE_DEFAULT_BG; |
145 | } | 157 | } |
146 | #endif | 158 | #endif |
147 | 159 | #endif | |
148 | } | 160 | } |
149 | 161 | ||
150 | void viewport_set_defaults(struct viewport *vp, | 162 | void viewport_set_defaults(struct viewport *vp, |
@@ -180,21 +192,29 @@ int viewportmanager_get_statusbar(void) | |||
180 | int viewportmanager_set_statusbar(const int enabled) | 192 | int viewportmanager_set_statusbar(const int enabled) |
181 | { | 193 | { |
182 | int old = statusbar_enabled; | 194 | int old = statusbar_enabled; |
195 | int i; | ||
196 | |||
183 | statusbar_enabled = enabled; | 197 | statusbar_enabled = enabled; |
184 | if (enabled) | 198 | |
199 | FOR_NB_SCREENS(i) | ||
185 | { | 200 | { |
186 | int i; | 201 | if (showing_bars(i) |
187 | FOR_NB_SCREENS(i) | 202 | && statusbar_position(i) != STATUSBAR_CUSTOM) |
188 | { | 203 | { |
189 | if (showing_bars(i)) | 204 | add_event(GUI_EVENT_ACTIONUPDATE, false, viewportmanager_redraw); |
190 | gui_statusbar_draw(&statusbars.statusbars[i], true); | 205 | gui_statusbar_draw(&statusbars.statusbars[i], true); |
191 | } | 206 | } |
192 | add_event(GUI_EVENT_ACTIONUPDATE, false, viewportmanager_redraw); | 207 | else |
208 | remove_event(GUI_EVENT_ACTIONUPDATE, viewportmanager_redraw); | ||
193 | } | 209 | } |
194 | else | 210 | |
211 | #ifdef HAVE_LCD_BITMAP | ||
212 | FOR_NB_SCREENS(i) | ||
195 | { | 213 | { |
196 | remove_event(GUI_EVENT_ACTIONUPDATE, viewportmanager_redraw); | 214 | sb_skin_set_state(showing_bars(i) |
215 | && statusbar_position(i) == STATUSBAR_CUSTOM, i); | ||
197 | } | 216 | } |
217 | #endif | ||
198 | return old; | 218 | return old; |
199 | } | 219 | } |
200 | 220 | ||
@@ -204,7 +224,8 @@ static void viewportmanager_redraw(void* data) | |||
204 | 224 | ||
205 | FOR_NB_SCREENS(i) | 225 | FOR_NB_SCREENS(i) |
206 | { | 226 | { |
207 | if (showing_bars(i)) | 227 | if (showing_bars(i) |
228 | && statusbar_position(i) != STATUSBAR_CUSTOM) | ||
208 | gui_statusbar_draw(&statusbars.statusbars[i], NULL != data); | 229 | gui_statusbar_draw(&statusbars.statusbars[i], NULL != data); |
209 | } | 230 | } |
210 | } | 231 | } |
@@ -234,11 +255,6 @@ void viewportmanager_theme_changed(const int which) | |||
234 | /* reset the ui viewport */ | 255 | /* reset the ui viewport */ |
235 | FOR_NB_SCREENS(i) | 256 | FOR_NB_SCREENS(i) |
236 | ui_vp_info.active[i] = retval & BIT_N(i); | 257 | ui_vp_info.active[i] = retval & BIT_N(i); |
237 | |||
238 | if (retval != 0) | ||
239 | add_event(GUI_EVENT_REFRESH, false, viewportmanager_ui_vp_changed); | ||
240 | else | ||
241 | remove_event(GUI_EVENT_REFRESH, viewportmanager_ui_vp_changed); | ||
242 | /* and point to it */ | 258 | /* and point to it */ |
243 | ui_vp_info.vp = custom_vp; | 259 | ui_vp_info.vp = custom_vp; |
244 | } | 260 | } |
@@ -249,18 +265,14 @@ void viewportmanager_theme_changed(const int which) | |||
249 | } | 265 | } |
250 | if (which & THEME_STATUSBAR) | 266 | if (which & THEME_STATUSBAR) |
251 | { | 267 | { |
252 | statusbar_enabled = VP_SB_HIDE_ALL; | 268 | statusbar_enabled = 0; |
253 | |||
254 | FOR_NB_SCREENS(i) | 269 | FOR_NB_SCREENS(i) |
255 | { | 270 | { |
256 | if (statusbar_position(i) != STATUSBAR_OFF) | 271 | if (statusbar_position(i) != STATUSBAR_OFF) |
257 | statusbar_enabled |= VP_SB_ONSCREEN(i); | 272 | statusbar_enabled |= VP_SB_ONSCREEN(i); |
258 | } | 273 | } |
259 | 274 | ||
260 | if (statusbar_enabled != VP_SB_HIDE_ALL) | 275 | viewportmanager_set_statusbar(statusbar_enabled); |
261 | add_event(GUI_EVENT_ACTIONUPDATE, false, viewportmanager_redraw); | ||
262 | else | ||
263 | remove_event(GUI_EVENT_ACTIONUPDATE, viewportmanager_redraw); | ||
264 | 276 | ||
265 | /* reposition viewport to fit statusbar, only if not using the ui vp */ | 277 | /* reposition viewport to fit statusbar, only if not using the ui vp */ |
266 | 278 | ||
@@ -270,6 +282,19 @@ void viewportmanager_theme_changed(const int which) | |||
270 | viewport_set_fullscreen(&custom_vp[i], i); | 282 | viewport_set_fullscreen(&custom_vp[i], i); |
271 | } | 283 | } |
272 | } | 284 | } |
285 | |||
286 | int event_add = 0; | ||
287 | FOR_NB_SCREENS(i) | ||
288 | { | ||
289 | event_add |= ui_vp_info.active[i]; | ||
290 | event_add |= (statusbar_position(i) == STATUSBAR_CUSTOM); | ||
291 | } | ||
292 | |||
293 | if (event_add) | ||
294 | add_event(GUI_EVENT_REFRESH, false, viewportmanager_ui_vp_changed); | ||
295 | else | ||
296 | remove_event(GUI_EVENT_REFRESH, viewportmanager_ui_vp_changed); | ||
297 | |||
273 | send_event(GUI_EVENT_THEME_CHANGED, NULL); | 298 | send_event(GUI_EVENT_THEME_CHANGED, NULL); |
274 | } | 299 | } |
275 | 300 | ||
@@ -283,10 +308,10 @@ static void viewportmanager_ui_vp_changed(void *param) | |||
283 | FOR_NB_SCREENS(i) | 308 | FOR_NB_SCREENS(i) |
284 | screens[i].clear_display(); | 309 | screens[i].clear_display(); |
285 | /* redraw the statusbar if it was enabled */ | 310 | /* redraw the statusbar if it was enabled */ |
286 | viewportmanager_set_statusbar(statusbar_enabled); | 311 | send_event(GUI_EVENT_ACTIONUPDATE, (void*)true); |
287 | /* call the passed function which will redraw the content of | 312 | /* call the passed function which will redraw the content of |
288 | * the current screen */ | 313 | * the current screen */ |
289 | if (param != NULL) | 314 | if (draw_func != NULL) |
290 | draw_func(); | 315 | draw_func(); |
291 | FOR_NB_SCREENS(i) | 316 | FOR_NB_SCREENS(i) |
292 | screens[i].update(); | 317 | screens[i].update(); |
diff --git a/apps/gui/viewport.h b/apps/gui/viewport.h index cffc7fbaef..0e5ad30f35 100644 --- a/apps/gui/viewport.h +++ b/apps/gui/viewport.h | |||
@@ -56,16 +56,16 @@ void viewport_set_defaults(struct viewport *vp, | |||
56 | */ | 56 | */ |
57 | 57 | ||
58 | 58 | ||
59 | #define THEME_STATUSBAR (BIT_N(0)) | 59 | #define THEME_STATUSBAR (BIT_N(0)) |
60 | #define THEME_UI_VIEWPORT (BIT_N(1)) | 60 | #define THEME_UI_VIEWPORT (BIT_N(1)) |
61 | #define THEME_BUTTONBAR (BIT_N(2)) | 61 | #define THEME_BUTTONBAR (BIT_N(2)) |
62 | #define THEME_LANGUAGE (BIT_N(3)) | 62 | #define THEME_LANGUAGE (BIT_N(3)) |
63 | #define THEME_ALL (~(0u)) | 63 | #define THEME_ALL (~(0u)) |
64 | 64 | ||
65 | #define VP_SB_HIDE_ALL 0 | 65 | #define VP_SB_HIDE_ALL 0 |
66 | #define VP_SB_ONSCREEN(screen) BIT_N(screen) | 66 | #define VP_SB_ONSCREEN(screen) BIT_N(screen) |
67 | #define VP_SB_IGNORE_SETTING(screen) BIT_N(4+screen) | 67 | #define VP_SB_IGNORE_SETTING(screen) BIT_N(4+screen) |
68 | #define VP_SB_ALLSCREENS (VP_SB_ONSCREEN(0)|VP_SB_ONSCREEN(1)) | 68 | #define VP_SB_ALLSCREENS (VP_SB_ONSCREEN(0)|VP_SB_ONSCREEN(1)) |
69 | 69 | ||
70 | #ifndef __PCTOOL__ | 70 | #ifndef __PCTOOL__ |
71 | /* | 71 | /* |
diff --git a/apps/gui/wps.c b/apps/gui/wps.c index a74e3d449d..11ce946e98 100644 --- a/apps/gui/wps.c +++ b/apps/gui/wps.c | |||
@@ -31,7 +31,6 @@ | |||
31 | #include "action.h" | 31 | #include "action.h" |
32 | #include "kernel.h" | 32 | #include "kernel.h" |
33 | #include "filetypes.h" | 33 | #include "filetypes.h" |
34 | #include "debug.h" | ||
35 | #include "sprintf.h" | 34 | #include "sprintf.h" |
36 | #include "settings.h" | 35 | #include "settings.h" |
37 | #include "skin_engine/skin_engine.h" | 36 | #include "skin_engine/skin_engine.h" |
@@ -67,6 +66,7 @@ | |||
67 | #include "dsp.h" | 66 | #include "dsp.h" |
68 | #include "playlist_viewer.h" | 67 | #include "playlist_viewer.h" |
69 | #include "wps.h" | 68 | #include "wps.h" |
69 | #include "statusbar-skinned.h" | ||
70 | 70 | ||
71 | #define RESTORE_WPS_INSTANTLY 0l | 71 | #define RESTORE_WPS_INSTANTLY 0l |
72 | #define RESTORE_WPS_NEXT_SECOND ((long)(HZ+current_tick)) | 72 | #define RESTORE_WPS_NEXT_SECOND ((long)(HZ+current_tick)) |
@@ -82,7 +82,7 @@ | |||
82 | static int wpsbars = 0; | 82 | static int wpsbars = 0; |
83 | 83 | ||
84 | /* currently only one wps_state is needed, initialize to 0 */ | 84 | /* currently only one wps_state is needed, initialize to 0 */ |
85 | static struct wps_state wps_state = { .id3 = NULL }; | 85 | struct wps_state wps_state = { .id3 = NULL }; |
86 | static struct gui_wps gui_wps[NB_SCREENS] = {{ .data = NULL }}; | 86 | static struct gui_wps gui_wps[NB_SCREENS] = {{ .data = NULL }}; |
87 | static struct wps_data wps_datas[NB_SCREENS] = {{ .wps_loaded = 0 }}; | 87 | static struct wps_data wps_datas[NB_SCREENS] = {{ .wps_loaded = 0 }}; |
88 | 88 | ||
@@ -129,8 +129,8 @@ void wps_data_load(enum screen_type screen, const char *buf, bool isfile) | |||
129 | 129 | ||
130 | #endif /* __PCTOOL__ */ | 130 | #endif /* __PCTOOL__ */ |
131 | 131 | ||
132 | loaded_ok = buf && skin_data_load(gui_wps[screen].data, | 132 | loaded_ok = buf && skin_data_load(gui_wps[screen].data, buf, isfile); |
133 | &screens[screen], buf, isfile); | 133 | |
134 | if (!loaded_ok) /* load the hardcoded default */ | 134 | if (!loaded_ok) /* load the hardcoded default */ |
135 | { | 135 | { |
136 | char *skin_buf[NB_SCREENS] = { | 136 | char *skin_buf[NB_SCREENS] = { |
@@ -153,11 +153,11 @@ void wps_data_load(enum screen_type screen, const char *buf, bool isfile) | |||
153 | "%pb\n", | 153 | "%pb\n", |
154 | #endif | 154 | #endif |
155 | }; | 155 | }; |
156 | skin_data_load(gui_wps[screen].data, &screens[screen], | 156 | skin_data_load(gui_wps[screen].data, skin_buf[screen], false); |
157 | skin_buf[screen], false); | ||
158 | } | 157 | } |
159 | #ifdef HAVE_REMOVE_LCD | 158 | #ifdef HAVE_REMOVE_LCD |
160 | gui_wps[screen].data->remote_wps = !(screen == SCREEN_MAIN); | 159 | gui_wps[screen].data->remote_wps = !(screen == SCREEN_MAIN); |
160 | |||
161 | #endif | 161 | #endif |
162 | } | 162 | } |
163 | 163 | ||
@@ -587,6 +587,8 @@ static void gwps_leave_wps(void) | |||
587 | /* Play safe and unregister the hook */ | 587 | /* Play safe and unregister the hook */ |
588 | lcd_activation_set_hook(NULL); | 588 | lcd_activation_set_hook(NULL); |
589 | #endif | 589 | #endif |
590 | /* unhandle statusbar update delay */ | ||
591 | sb_skin_set_update_delay(DEFAULT_UPDATE_DELAY); | ||
590 | send_event(GUI_EVENT_REFRESH, NULL); | 592 | send_event(GUI_EVENT_REFRESH, NULL); |
591 | } | 593 | } |
592 | 594 | ||
@@ -739,7 +741,6 @@ long gui_wps_show(void) | |||
739 | #endif | 741 | #endif |
740 | } | 742 | } |
741 | } | 743 | } |
742 | |||
743 | #ifdef HAVE_LCD_BITMAP | 744 | #ifdef HAVE_LCD_BITMAP |
744 | /* when the peak meter is enabled we want to have a | 745 | /* when the peak meter is enabled we want to have a |
745 | few extra updates to make it look smooth. On the | 746 | few extra updates to make it look smooth. On the |
@@ -1175,7 +1176,13 @@ long gui_wps_show(void) | |||
1175 | skin_update(&gui_wps[i], WPS_REFRESH_NON_STATIC); | 1176 | skin_update(&gui_wps[i], WPS_REFRESH_NON_STATIC); |
1176 | } | 1177 | } |
1177 | } | 1178 | } |
1178 | wps_state.do_full_update = false; | 1179 | /* currently skinned statusbar and wps share the same wps_state, |
1180 | * don't steal do_full_update away */ | ||
1181 | if (wps_state.do_full_update) | ||
1182 | { | ||
1183 | send_event(GUI_EVENT_ACTIONUPDATE, (void*)true); | ||
1184 | wps_state.do_full_update = false; | ||
1185 | } | ||
1179 | update = false; | 1186 | update = false; |
1180 | } | 1187 | } |
1181 | 1188 | ||
@@ -1188,6 +1195,9 @@ long gui_wps_show(void) | |||
1188 | #if defined(HAVE_LCD_ENABLE) || defined(HAVE_LCD_SLEEP) | 1195 | #if defined(HAVE_LCD_ENABLE) || defined(HAVE_LCD_SLEEP) |
1189 | lcd_activation_set_hook(wps_lcd_activation_hook); | 1196 | lcd_activation_set_hook(wps_lcd_activation_hook); |
1190 | #endif | 1197 | #endif |
1198 | /* we remove the update delay since it's not very usable in the wps, | ||
1199 | * e.g. during volume changing or ffwd/rewind */ | ||
1200 | sb_skin_set_update_delay(0); | ||
1191 | FOR_NB_SCREENS(i) | 1201 | FOR_NB_SCREENS(i) |
1192 | { | 1202 | { |
1193 | screens[i].stop_scroll(); | 1203 | screens[i].stop_scroll(); |