diff options
author | Jonathan Gordon <rockbox@jdgordon.info> | 2010-08-02 12:50:23 +0000 |
---|---|---|
committer | Jonathan Gordon <rockbox@jdgordon.info> | 2010-08-02 12:50:23 +0000 |
commit | ee4f8a9a6bc313cd878f84a6c9832b6094685460 (patch) | |
tree | 2f2e77e7467dafb9a21218d23bad59798f813481 /apps/gui | |
parent | bc046ff899b472279bf56b38f6f27ad6f225d2e1 (diff) | |
download | rockbox-ee4f8a9a6bc313cd878f84a6c9832b6094685460.tar.gz rockbox-ee4f8a9a6bc313cd878f84a6c9832b6094685460.zip |
Allow viewport labels to be mostly free text instead of only one character. If this is useful the same will be done for images
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27665 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/gui')
-rw-r--r-- | apps/gui/skin_engine/skin_display.c | 2 | ||||
-rw-r--r-- | apps/gui/skin_engine/skin_parser.c | 17 | ||||
-rw-r--r-- | apps/gui/skin_engine/skin_render.c | 14 | ||||
-rw-r--r-- | apps/gui/skin_engine/wps_internals.h | 9 | ||||
-rw-r--r-- | apps/gui/statusbar-skinned.c | 16 | ||||
-rw-r--r-- | apps/gui/statusbar-skinned.h | 2 | ||||
-rw-r--r-- | apps/gui/wps.c | 3 |
7 files changed, 35 insertions, 28 deletions
diff --git a/apps/gui/skin_engine/skin_display.c b/apps/gui/skin_engine/skin_display.c index 6b6db68023..b5b9b4d7a6 100644 --- a/apps/gui/skin_engine/skin_display.c +++ b/apps/gui/skin_engine/skin_display.c | |||
@@ -98,7 +98,7 @@ void skin_statusbar_changed(struct gui_wps *skin) | |||
98 | const struct screen *display = skin->display; | 98 | const struct screen *display = skin->display; |
99 | const int screen = display->screen_type; | 99 | const int screen = display->screen_type; |
100 | 100 | ||
101 | struct viewport *vp = &find_viewport(VP_DEFAULT_LABEL, data)->vp; | 101 | struct viewport *vp = &find_viewport(VP_DEFAULT_LABEL, false, data)->vp; |
102 | viewport_set_defaults(vp, screen); | 102 | viewport_set_defaults(vp, screen); |
103 | 103 | ||
104 | if (data->wps_sb_tag) | 104 | if (data->wps_sb_tag) |
diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c index d0194c669b..a3cb68915b 100644 --- a/apps/gui/skin_engine/skin_parser.c +++ b/apps/gui/skin_engine/skin_parser.c | |||
@@ -132,13 +132,14 @@ struct gui_img* find_image(char label, struct wps_data *data) | |||
132 | #endif | 132 | #endif |
133 | 133 | ||
134 | /* traverse the viewport linked list for a viewport */ | 134 | /* traverse the viewport linked list for a viewport */ |
135 | struct skin_viewport* find_viewport(char label, struct wps_data *data) | 135 | struct skin_viewport* find_viewport(char *label, bool uivp, struct wps_data *data) |
136 | { | 136 | { |
137 | struct skin_element *list = data->tree; | 137 | struct skin_element *list = data->tree; |
138 | while (list) | 138 | while (list) |
139 | { | 139 | { |
140 | struct skin_viewport *vp = (struct skin_viewport *)list->data; | 140 | struct skin_viewport *vp = (struct skin_viewport *)list->data; |
141 | if (vp->label == label) | 141 | if (vp->label && (vp->is_infovp == uivp) && |
142 | !strcmp(vp->label, label)) | ||
142 | return vp; | 143 | return vp; |
143 | list = list->next; | 144 | list = list->next; |
144 | } | 145 | } |
@@ -1086,7 +1087,8 @@ static int convert_viewport(struct wps_data *data, struct skin_element* element) | |||
1086 | return CALLBACK_ERROR; | 1087 | return CALLBACK_ERROR; |
1087 | 1088 | ||
1088 | skin_vp->hidden_flags = 0; | 1089 | skin_vp->hidden_flags = 0; |
1089 | skin_vp->label = VP_NO_LABEL; | 1090 | skin_vp->label = NULL; |
1091 | skin_vp->is_infovp = false; | ||
1090 | element->data = skin_vp; | 1092 | element->data = skin_vp; |
1091 | curr_vp = skin_vp; | 1093 | curr_vp = skin_vp; |
1092 | curr_viewport_element = element; | 1094 | curr_viewport_element = element; |
@@ -1118,21 +1120,22 @@ static int convert_viewport(struct wps_data *data, struct skin_element* element) | |||
1118 | { | 1120 | { |
1119 | if (element->tag->type == SKIN_TOKEN_UIVIEWPORT_LOAD) | 1121 | if (element->tag->type == SKIN_TOKEN_UIVIEWPORT_LOAD) |
1120 | { | 1122 | { |
1123 | skin_vp->is_infovp = true; | ||
1121 | if (isdefault(param)) | 1124 | if (isdefault(param)) |
1122 | { | 1125 | { |
1123 | skin_vp->hidden_flags = VP_NEVER_VISIBLE; | 1126 | skin_vp->hidden_flags = VP_NEVER_VISIBLE; |
1124 | skin_vp->label = VP_INFO_LABEL|VP_DEFAULT_LABEL; | 1127 | skin_vp->label = VP_DEFAULT_LABEL; |
1125 | } | 1128 | } |
1126 | else | 1129 | else |
1127 | { | 1130 | { |
1128 | skin_vp->hidden_flags = VP_NEVER_VISIBLE; | 1131 | skin_vp->hidden_flags = VP_NEVER_VISIBLE; |
1129 | skin_vp->label = VP_INFO_LABEL|param->data.text[0]; | 1132 | skin_vp->label = param->data.text; |
1130 | } | 1133 | } |
1131 | } | 1134 | } |
1132 | else | 1135 | else |
1133 | { | 1136 | { |
1134 | skin_vp->hidden_flags = VP_DRAW_HIDEABLE|VP_DRAW_HIDDEN; | 1137 | skin_vp->hidden_flags = VP_DRAW_HIDEABLE|VP_DRAW_HIDDEN; |
1135 | skin_vp->label = param->data.text[0]; | 1138 | skin_vp->label = param->data.text; |
1136 | } | 1139 | } |
1137 | param++; | 1140 | param++; |
1138 | } | 1141 | } |
@@ -1269,7 +1272,7 @@ static int skin_element_callback(struct skin_element* element, void* data) | |||
1269 | break; | 1272 | break; |
1270 | case SKIN_TOKEN_VIEWPORT_ENABLE: | 1273 | case SKIN_TOKEN_VIEWPORT_ENABLE: |
1271 | case SKIN_TOKEN_UIVIEWPORT_ENABLE: | 1274 | case SKIN_TOKEN_UIVIEWPORT_ENABLE: |
1272 | token->value.i = element->params[0].data.text[0]; | 1275 | token->value.data = element->params[0].data.text; |
1273 | break; | 1276 | break; |
1274 | case SKIN_TOKEN_IMAGE_PRELOAD_DISPLAY: | 1277 | case SKIN_TOKEN_IMAGE_PRELOAD_DISPLAY: |
1275 | function = parse_image_display; | 1278 | function = parse_image_display; |
diff --git a/apps/gui/skin_engine/skin_render.c b/apps/gui/skin_engine/skin_render.c index b56fabeaa0..895746370e 100644 --- a/apps/gui/skin_engine/skin_render.c +++ b/apps/gui/skin_engine/skin_render.c | |||
@@ -92,13 +92,14 @@ static bool do_non_text_tags(struct gui_wps *gwps, struct skin_draw_info *info, | |||
92 | #endif | 92 | #endif |
93 | case SKIN_TOKEN_VIEWPORT_ENABLE: | 93 | case SKIN_TOKEN_VIEWPORT_ENABLE: |
94 | { | 94 | { |
95 | char label = token->value.i; | 95 | char *label = token->value.data; |
96 | char temp = VP_DRAW_HIDEABLE; | 96 | char temp = VP_DRAW_HIDEABLE; |
97 | struct skin_element *viewport = gwps->data->tree; | 97 | struct skin_element *viewport = gwps->data->tree; |
98 | while (viewport) | 98 | while (viewport) |
99 | { | 99 | { |
100 | struct skin_viewport *skinvp = (struct skin_viewport*)viewport->data; | 100 | struct skin_viewport *skinvp = (struct skin_viewport*)viewport->data; |
101 | if (skinvp->label == label) | 101 | if (skinvp->label && !skinvp->is_infovp && |
102 | !strcmp(skinvp->label, label)) | ||
102 | { | 103 | { |
103 | if (skinvp->hidden_flags&VP_DRAW_HIDDEN) | 104 | if (skinvp->hidden_flags&VP_DRAW_HIDDEN) |
104 | { | 105 | { |
@@ -113,7 +114,7 @@ static bool do_non_text_tags(struct gui_wps *gwps, struct skin_draw_info *info, | |||
113 | #ifdef HAVE_LCD_BITMAP | 114 | #ifdef HAVE_LCD_BITMAP |
114 | case SKIN_TOKEN_UIVIEWPORT_ENABLE: | 115 | case SKIN_TOKEN_UIVIEWPORT_ENABLE: |
115 | sb_set_info_vp(gwps->display->screen_type, | 116 | sb_set_info_vp(gwps->display->screen_type, |
116 | token->value.i|VP_INFO_LABEL); | 117 | token->value.data); |
117 | break; | 118 | break; |
118 | case SKIN_TOKEN_PEAKMETER: | 119 | case SKIN_TOKEN_PEAKMETER: |
119 | data->peak_meter_enabled = true; | 120 | data->peak_meter_enabled = true; |
@@ -238,14 +239,14 @@ static void do_tags_in_hidden_conditional(struct skin_element* branch, | |||
238 | } | 239 | } |
239 | else if (token->type == SKIN_TOKEN_VIEWPORT_ENABLE) | 240 | else if (token->type == SKIN_TOKEN_VIEWPORT_ENABLE) |
240 | { | 241 | { |
241 | char label = token->value.i&0x7f; | 242 | char *label = token->value.data; |
242 | struct skin_element *viewport; | 243 | struct skin_element *viewport; |
243 | for (viewport = data->tree; | 244 | for (viewport = data->tree; |
244 | viewport; | 245 | viewport; |
245 | viewport = viewport->next) | 246 | viewport = viewport->next) |
246 | { | 247 | { |
247 | struct skin_viewport *skin_viewport = (struct skin_viewport*)viewport->data; | 248 | struct skin_viewport *skin_viewport = (struct skin_viewport*)viewport->data; |
248 | if ((skin_viewport->label&0x7f) != label) | 249 | if (skin_viewport->label && strcmp(skin_viewport->label, label)) |
249 | continue; | 250 | continue; |
250 | if (skin_viewport->hidden_flags&VP_NEVER_VISIBLE) | 251 | if (skin_viewport->hidden_flags&VP_NEVER_VISIBLE) |
251 | { | 252 | { |
@@ -564,7 +565,8 @@ void skin_render(struct gui_wps *gwps, unsigned refresh_mode) | |||
564 | #endif | 565 | #endif |
565 | viewport = data->tree; | 566 | viewport = data->tree; |
566 | skin_viewport = (struct skin_viewport *)viewport->data; | 567 | skin_viewport = (struct skin_viewport *)viewport->data; |
567 | if (skin_viewport->label == VP_DEFAULT_LABEL && viewport->next) | 568 | if (skin_viewport->label && viewport->next && |
569 | !strcmp(skin_viewport->label,VP_DEFAULT_LABEL)) | ||
568 | refresh_mode = 0; | 570 | refresh_mode = 0; |
569 | 571 | ||
570 | for (viewport = data->tree; | 572 | for (viewport = data->tree; |
diff --git a/apps/gui/skin_engine/wps_internals.h b/apps/gui/skin_engine/wps_internals.h index f8e025956e..709dbc6ff7 100644 --- a/apps/gui/skin_engine/wps_internals.h +++ b/apps/gui/skin_engine/wps_internals.h | |||
@@ -151,13 +151,12 @@ enum wps_parse_error { | |||
151 | #define VP_DRAW_WASHIDDEN 0x4 | 151 | #define VP_DRAW_WASHIDDEN 0x4 |
152 | /* these are never drawn, nor cleared, i.e. just ignored */ | 152 | /* these are never drawn, nor cleared, i.e. just ignored */ |
153 | #define VP_NEVER_VISIBLE 0x8 | 153 | #define VP_NEVER_VISIBLE 0x8 |
154 | #define VP_DEFAULT_LABEL '|' | 154 | #define VP_DEFAULT_LABEL "|" |
155 | #define VP_NO_LABEL '-' | ||
156 | #define VP_INFO_LABEL 0x80 | ||
157 | struct skin_viewport { | 155 | struct skin_viewport { |
158 | struct viewport vp; /* The LCD viewport struct */ | 156 | struct viewport vp; /* The LCD viewport struct */ |
159 | char hidden_flags; | 157 | char hidden_flags; |
160 | char label; | 158 | bool is_infovp; |
159 | char* label; | ||
161 | unsigned start_fgcolour; | 160 | unsigned start_fgcolour; |
162 | unsigned start_bgcolour; | 161 | unsigned start_bgcolour; |
163 | }; | 162 | }; |
@@ -340,7 +339,7 @@ const char *get_radio_token(struct wps_token *token, int preset_offset, | |||
340 | #endif | 339 | #endif |
341 | 340 | ||
342 | struct gui_img* find_image(char label, struct wps_data *data); | 341 | struct gui_img* find_image(char label, struct wps_data *data); |
343 | struct skin_viewport* find_viewport(char label, struct wps_data *data); | 342 | struct skin_viewport* find_viewport(char *label, bool uivp, struct wps_data *data); |
344 | 343 | ||
345 | 344 | ||
346 | #ifdef SIMULATOR | 345 | #ifdef SIMULATOR |
diff --git a/apps/gui/statusbar-skinned.c b/apps/gui/statusbar-skinned.c index 4df87c0de5..81eb92923d 100644 --- a/apps/gui/statusbar-skinned.c +++ b/apps/gui/statusbar-skinned.c | |||
@@ -109,7 +109,7 @@ void sb_skin_data_load(enum screen_type screen, const char *buf, bool isfile) | |||
109 | /* hide the sb's default viewport because it has nasty effect with stuff | 109 | /* hide the sb's default viewport because it has nasty effect with stuff |
110 | * not part of the statusbar, | 110 | * not part of the statusbar, |
111 | * hence .sbs's without any other vps are unsupported*/ | 111 | * hence .sbs's without any other vps are unsupported*/ |
112 | struct skin_viewport *vp = find_viewport(VP_DEFAULT_LABEL, data); | 112 | struct skin_viewport *vp = find_viewport(VP_DEFAULT_LABEL, false, data); |
113 | struct skin_element *next_vp = data->tree->next; | 113 | struct skin_element *next_vp = data->tree->next; |
114 | 114 | ||
115 | if (vp) | 115 | if (vp) |
@@ -121,29 +121,30 @@ void sb_skin_data_load(enum screen_type screen, const char *buf, bool isfile) | |||
121 | /* hide this viewport, forever */ | 121 | /* hide this viewport, forever */ |
122 | vp->hidden_flags = VP_NEVER_VISIBLE; | 122 | vp->hidden_flags = VP_NEVER_VISIBLE; |
123 | } | 123 | } |
124 | sb_set_info_vp(screen, VP_INFO_LABEL|VP_DEFAULT_LABEL); | 124 | sb_set_info_vp(screen, VP_DEFAULT_LABEL); |
125 | } | 125 | } |
126 | 126 | ||
127 | if (!success && isfile) | 127 | if (!success && isfile) |
128 | sb_create_from_settings(screen); | 128 | sb_create_from_settings(screen); |
129 | } | 129 | } |
130 | static char infovp_label[NB_SCREENS]; | 130 | static char *infovp_label[NB_SCREENS]; |
131 | static char oldinfovp_label[NB_SCREENS]; | 131 | static char *oldinfovp_label[NB_SCREENS]; |
132 | void sb_set_info_vp(enum screen_type screen, char label) | 132 | void sb_set_info_vp(enum screen_type screen, char *label) |
133 | { | 133 | { |
134 | infovp_label[screen] = label; | 134 | infovp_label[screen] = label; |
135 | } | 135 | } |
136 | 136 | ||
137 | struct viewport *sb_skin_get_info_vp(enum screen_type screen) | 137 | struct viewport *sb_skin_get_info_vp(enum screen_type screen) |
138 | { | 138 | { |
139 | if (oldinfovp_label[screen] != infovp_label[screen]) | 139 | if (oldinfovp_label[screen] && |
140 | strcmp(oldinfovp_label[screen], infovp_label[screen])) | ||
140 | { | 141 | { |
141 | /* UI viewport changed, so force a redraw */ | 142 | /* UI viewport changed, so force a redraw */ |
142 | oldinfovp_label[screen] = infovp_label[screen]; | 143 | oldinfovp_label[screen] = infovp_label[screen]; |
143 | viewportmanager_theme_enable(screen, false, NULL); | 144 | viewportmanager_theme_enable(screen, false, NULL); |
144 | viewportmanager_theme_undo(screen, true); | 145 | viewportmanager_theme_undo(screen, true); |
145 | } | 146 | } |
146 | return &find_viewport(infovp_label[screen], sb_skin[screen].data)->vp; | 147 | return &find_viewport(infovp_label[screen], true, sb_skin[screen].data)->vp; |
147 | } | 148 | } |
148 | 149 | ||
149 | #if (LCD_DEPTH > 1) || (defined(HAVE_REMOTE_LCD) && LCD_REMOTE_DEPTH > 1) | 150 | #if (LCD_DEPTH > 1) || (defined(HAVE_REMOTE_LCD) && LCD_REMOTE_DEPTH > 1) |
@@ -301,6 +302,7 @@ void sb_skin_init(void) | |||
301 | int i; | 302 | int i; |
302 | FOR_NB_SCREENS(i) | 303 | FOR_NB_SCREENS(i) |
303 | { | 304 | { |
305 | oldinfovp_label[i] = NULL; | ||
304 | #ifdef HAVE_ALBUMART | 306 | #ifdef HAVE_ALBUMART |
305 | sb_skin_data[i].albumart = NULL; | 307 | sb_skin_data[i].albumart = NULL; |
306 | sb_skin_data[i].playback_aa_slot = -1; | 308 | sb_skin_data[i].playback_aa_slot = -1; |
diff --git a/apps/gui/statusbar-skinned.h b/apps/gui/statusbar-skinned.h index 7925aa8093..893d48941d 100644 --- a/apps/gui/statusbar-skinned.h +++ b/apps/gui/statusbar-skinned.h | |||
@@ -36,7 +36,7 @@ void sb_skin_data_load(enum screen_type screen, const char *buf, bool isfile); | |||
36 | 36 | ||
37 | void sb_create_from_settings(enum screen_type screen); | 37 | void sb_create_from_settings(enum screen_type screen); |
38 | void sb_skin_init(void) INIT_ATTR; | 38 | void sb_skin_init(void) INIT_ATTR; |
39 | void sb_set_info_vp(enum screen_type screen, char label); | 39 | void sb_set_info_vp(enum screen_type screen, char *label); |
40 | struct viewport *sb_skin_get_info_vp(enum screen_type screen); | 40 | struct viewport *sb_skin_get_info_vp(enum screen_type screen); |
41 | void sb_skin_update(enum screen_type screen, bool force); | 41 | void sb_skin_update(enum screen_type screen, bool force); |
42 | 42 | ||
diff --git a/apps/gui/wps.c b/apps/gui/wps.c index 6840c16f28..7d583a82b4 100644 --- a/apps/gui/wps.c +++ b/apps/gui/wps.c | |||
@@ -652,7 +652,8 @@ static void gwps_enter_wps(void) | |||
652 | #if LCD_DEPTH > 1 | 652 | #if LCD_DEPTH > 1 |
653 | if (display->depth > 1) | 653 | if (display->depth > 1) |
654 | { | 654 | { |
655 | struct viewport *vp = &find_viewport(VP_DEFAULT_LABEL, gwps->data)->vp; | 655 | struct viewport *vp = &find_viewport(VP_DEFAULT_LABEL, |
656 | false, gwps->data)->vp; | ||
656 | vp->fg_pattern = display->get_foreground(); | 657 | vp->fg_pattern = display->get_foreground(); |
657 | vp->bg_pattern = display->get_background(); | 658 | vp->bg_pattern = display->get_background(); |
658 | } | 659 | } |