summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2010-08-02 12:50:23 +0000
committerJonathan Gordon <rockbox@jdgordon.info>2010-08-02 12:50:23 +0000
commitee4f8a9a6bc313cd878f84a6c9832b6094685460 (patch)
tree2f2e77e7467dafb9a21218d23bad59798f813481
parentbc046ff899b472279bf56b38f6f27ad6f225d2e1 (diff)
downloadrockbox-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
-rw-r--r--apps/gui/skin_engine/skin_display.c2
-rw-r--r--apps/gui/skin_engine/skin_parser.c17
-rw-r--r--apps/gui/skin_engine/skin_render.c14
-rw-r--r--apps/gui/skin_engine/wps_internals.h9
-rw-r--r--apps/gui/statusbar-skinned.c16
-rw-r--r--apps/gui/statusbar-skinned.h2
-rw-r--r--apps/gui/wps.c3
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 */
135struct skin_viewport* find_viewport(char label, struct wps_data *data) 135struct 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
157struct skin_viewport { 155struct 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
342struct gui_img* find_image(char label, struct wps_data *data); 341struct gui_img* find_image(char label, struct wps_data *data);
343struct skin_viewport* find_viewport(char label, struct wps_data *data); 342struct 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}
130static char infovp_label[NB_SCREENS]; 130static char *infovp_label[NB_SCREENS];
131static char oldinfovp_label[NB_SCREENS]; 131static char *oldinfovp_label[NB_SCREENS];
132void sb_set_info_vp(enum screen_type screen, char label) 132void 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
137struct viewport *sb_skin_get_info_vp(enum screen_type screen) 137struct 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
37void sb_create_from_settings(enum screen_type screen); 37void sb_create_from_settings(enum screen_type screen);
38void sb_skin_init(void) INIT_ATTR; 38void sb_skin_init(void) INIT_ATTR;
39void sb_set_info_vp(enum screen_type screen, char label); 39void sb_set_info_vp(enum screen_type screen, char *label);
40struct viewport *sb_skin_get_info_vp(enum screen_type screen); 40struct viewport *sb_skin_get_info_vp(enum screen_type screen);
41void sb_skin_update(enum screen_type screen, bool force); 41void 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 }