diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/gui/bitmap/list-skinned.c | 17 | ||||
-rw-r--r-- | apps/gui/skin_engine/skin_display.c | 22 | ||||
-rw-r--r-- | apps/gui/skin_engine/skin_parser.c | 54 | ||||
-rw-r--r-- | apps/gui/skin_engine/skin_render.c | 66 | ||||
-rw-r--r-- | apps/gui/skin_engine/skin_tokens.c | 56 | ||||
-rw-r--r-- | apps/gui/statusbar-skinned.c | 12 | ||||
-rw-r--r-- | apps/plugins/chessbox/chessbox_pgn.c | 14 | ||||
-rw-r--r-- | apps/plugins/reversi/reversi-gui.c | 7 |
8 files changed, 160 insertions, 88 deletions
diff --git a/apps/gui/bitmap/list-skinned.c b/apps/gui/bitmap/list-skinned.c index f0396263f3..c5429738ed 100644 --- a/apps/gui/bitmap/list-skinned.c +++ b/apps/gui/bitmap/list-skinned.c | |||
@@ -219,7 +219,9 @@ bool skinlist_draw(struct screen *display, struct gui_synclist *list) | |||
219 | { | 219 | { |
220 | int original_x, original_y; | 220 | int original_x, original_y; |
221 | skin_viewport = SKINOFFSETTOPTR(get_skin_buffer(wps.data), viewport->data); | 221 | skin_viewport = SKINOFFSETTOPTR(get_skin_buffer(wps.data), viewport->data); |
222 | char *viewport_label = SKINOFFSETTOPTR(get_skin_buffer(wps.data), skin_viewport->label); | 222 | char *viewport_label = NULL; |
223 | if (skin_viewport) | ||
224 | viewport_label = SKINOFFSETTOPTR(get_skin_buffer(wps.data), skin_viewport->label); | ||
223 | if (viewport->children == 0 || !viewport_label || | 225 | if (viewport->children == 0 || !viewport_label || |
224 | (skin_viewport->label && strcmp(label, viewport_label)) | 226 | (skin_viewport->label && strcmp(label, viewport_label)) |
225 | ) | 227 | ) |
@@ -254,13 +256,17 @@ bool skinlist_draw(struct screen *display, struct gui_synclist *list) | |||
254 | while (imglist) | 256 | while (imglist) |
255 | { | 257 | { |
256 | struct wps_token *token = SKINOFFSETTOPTR(get_skin_buffer(wps.data), imglist->token); | 258 | struct wps_token *token = SKINOFFSETTOPTR(get_skin_buffer(wps.data), imglist->token); |
257 | struct gui_img *img = SKINOFFSETTOPTR(get_skin_buffer(wps.data), token->value.data); | 259 | struct gui_img *img = NULL; |
258 | img->display = -1; | 260 | if (token) |
261 | img = SKINOFFSETTOPTR(get_skin_buffer(wps.data), token->value.data); | ||
262 | if (img) | ||
263 | img->display = -1; | ||
259 | imglist = SKINOFFSETTOPTR(get_skin_buffer(wps.data), imglist->next); | 264 | imglist = SKINOFFSETTOPTR(get_skin_buffer(wps.data), imglist->next); |
260 | } | 265 | } |
261 | struct skin_element** children = SKINOFFSETTOPTR(get_skin_buffer(wps.data), viewport->children); | 266 | struct skin_element** children = SKINOFFSETTOPTR(get_skin_buffer(wps.data), viewport->children); |
262 | skin_render_viewport(SKINOFFSETTOPTR(get_skin_buffer(wps.data), (intptr_t)children[0]), | 267 | if (children && *children) |
263 | &wps, skin_viewport, SKIN_REFRESH_ALL); | 268 | skin_render_viewport(SKINOFFSETTOPTR(get_skin_buffer(wps.data), (intptr_t)children[0]), |
269 | &wps, skin_viewport, SKIN_REFRESH_ALL); | ||
264 | wps_display_images(&wps, &skin_viewport->vp); | 270 | wps_display_images(&wps, &skin_viewport->vp); |
265 | /* force disableing scroll because it breaks later */ | 271 | /* force disableing scroll because it breaks later */ |
266 | if (!is_selected) | 272 | if (!is_selected) |
@@ -278,4 +284,3 @@ bool skinlist_draw(struct screen *display, struct gui_synclist *list) | |||
278 | current_drawing_line = list->selected_item; | 284 | current_drawing_line = list->selected_item; |
279 | return true; | 285 | return true; |
280 | } | 286 | } |
281 | |||
diff --git a/apps/gui/skin_engine/skin_display.c b/apps/gui/skin_engine/skin_display.c index c35b09eaac..4a3dcc2177 100644 --- a/apps/gui/skin_engine/skin_display.c +++ b/apps/gui/skin_engine/skin_display.c | |||
@@ -390,16 +390,20 @@ void wps_display_images(struct gui_wps *gwps, struct viewport* vp) | |||
390 | while (list) | 390 | while (list) |
391 | { | 391 | { |
392 | struct wps_token *token = SKINOFFSETTOPTR(get_skin_buffer(data), list->token); | 392 | struct wps_token *token = SKINOFFSETTOPTR(get_skin_buffer(data), list->token); |
393 | struct gui_img *img = (struct gui_img*)SKINOFFSETTOPTR(get_skin_buffer(data), token->value.data); | 393 | struct gui_img *img = NULL; |
394 | if (img->using_preloaded_icons && img->display >= 0) | 394 | if (token) |
395 | { | 395 | img = (struct gui_img*)SKINOFFSETTOPTR(get_skin_buffer(data), token->value.data); |
396 | screen_put_icon(display, img->x, img->y, img->display); | 396 | if (img) { |
397 | } | 397 | if (img->using_preloaded_icons && img->display >= 0) |
398 | else if (img->loaded) | ||
399 | { | ||
400 | if (img->display >= 0) | ||
401 | { | 398 | { |
402 | wps_draw_image(gwps, img, img->display, vp); | 399 | screen_put_icon(display, img->x, img->y, img->display); |
400 | } | ||
401 | else if (img->loaded) | ||
402 | { | ||
403 | if (img->display >= 0) | ||
404 | { | ||
405 | wps_draw_image(gwps, img, img->display, vp); | ||
406 | } | ||
403 | } | 407 | } |
404 | } | 408 | } |
405 | list = SKINOFFSETTOPTR(get_skin_buffer(data), list->next); | 409 | list = SKINOFFSETTOPTR(get_skin_buffer(data), list->next); |
diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c index e1a8118190..b64bfc143c 100644 --- a/apps/gui/skin_engine/skin_parser.c +++ b/apps/gui/skin_engine/skin_parser.c | |||
@@ -183,13 +183,16 @@ void *skin_find_item(const char *label, enum skin_find_what what, | |||
183 | { | 183 | { |
184 | bool skip = false; | 184 | bool skip = false; |
185 | struct wps_token *token = NULL; | 185 | struct wps_token *token = NULL; |
186 | itemlabel = NULL; | ||
186 | if (!isvplist) | 187 | if (!isvplist) |
187 | token = SKINOFFSETTOPTR(databuf, list.linkedlist->token); | 188 | token = SKINOFFSETTOPTR(databuf, list.linkedlist->token); |
188 | switch (what) | 189 | if (token) |
190 | switch (what) | ||
189 | { | 191 | { |
190 | case SKIN_FIND_UIVP: | 192 | case SKIN_FIND_UIVP: |
191 | case SKIN_FIND_VP: | 193 | case SKIN_FIND_VP: |
192 | ret = SKINOFFSETTOPTR(databuf, list.vplist->data); | 194 | ret = SKINOFFSETTOPTR(databuf, list.vplist->data); |
195 | if (!ret) break; | ||
193 | if (((struct skin_viewport *)ret)->label == VP_DEFAULT_LABEL) | 196 | if (((struct skin_viewport *)ret)->label == VP_DEFAULT_LABEL) |
194 | itemlabel = VP_DEFAULT_LABEL_STRING; | 197 | itemlabel = VP_DEFAULT_LABEL_STRING; |
195 | else | 198 | else |
@@ -199,10 +202,12 @@ void *skin_find_item(const char *label, enum skin_find_what what, | |||
199 | break; | 202 | break; |
200 | case SKIN_FIND_IMAGE: | 203 | case SKIN_FIND_IMAGE: |
201 | ret = SKINOFFSETTOPTR(databuf, token->value.data); | 204 | ret = SKINOFFSETTOPTR(databuf, token->value.data); |
205 | if (!ret) break; | ||
202 | itemlabel = SKINOFFSETTOPTR(databuf, ((struct gui_img *)ret)->label); | 206 | itemlabel = SKINOFFSETTOPTR(databuf, ((struct gui_img *)ret)->label); |
203 | break; | 207 | break; |
204 | #ifdef HAVE_TOUCHSCREEN | 208 | #ifdef HAVE_TOUCHSCREEN |
205 | case SKIN_FIND_TOUCHREGION: | 209 | case SKIN_FIND_TOUCHREGION: |
210 | if (!ret) break; | ||
206 | ret = SKINOFFSETTOPTR(databuf, token->value.data); | 211 | ret = SKINOFFSETTOPTR(databuf, token->value.data); |
207 | itemlabel = SKINOFFSETTOPTR(databuf, ((struct touchregion *)ret)->label); | 212 | itemlabel = SKINOFFSETTOPTR(databuf, ((struct touchregion *)ret)->label); |
208 | break; | 213 | break; |
@@ -210,6 +215,7 @@ void *skin_find_item(const char *label, enum skin_find_what what, | |||
210 | #ifdef HAVE_SKIN_VARIABLES | 215 | #ifdef HAVE_SKIN_VARIABLES |
211 | case SKIN_VARIABLE: | 216 | case SKIN_VARIABLE: |
212 | ret = SKINOFFSETTOPTR(databuf, token->value.data); | 217 | ret = SKINOFFSETTOPTR(databuf, token->value.data); |
218 | if (!ret) break; | ||
213 | itemlabel = SKINOFFSETTOPTR(databuf, ((struct skin_var *)ret)->label); | 219 | itemlabel = SKINOFFSETTOPTR(databuf, ((struct skin_var *)ret)->label); |
214 | break; | 220 | break; |
215 | #endif | 221 | #endif |
@@ -1708,23 +1714,30 @@ void skin_data_free_buflib_allocs(struct wps_data *wps_data) | |||
1708 | { | 1714 | { |
1709 | if (wps_data->wps_loaded) | 1715 | if (wps_data->wps_loaded) |
1710 | skin_buffer = get_skin_buffer(wps_data); | 1716 | skin_buffer = get_skin_buffer(wps_data); |
1717 | if (!skin_buffer) | ||
1718 | return; | ||
1719 | |||
1711 | #ifndef __PCTOOL__ | 1720 | #ifndef __PCTOOL__ |
1712 | struct skin_token_list *list = SKINOFFSETTOPTR(skin_buffer, wps_data->images); | 1721 | struct skin_token_list *list = SKINOFFSETTOPTR(skin_buffer, wps_data->images); |
1713 | int *font_ids = SKINOFFSETTOPTR(skin_buffer, wps_data->font_ids); | 1722 | int *font_ids = SKINOFFSETTOPTR(skin_buffer, wps_data->font_ids); |
1714 | while (list) | 1723 | while (list) |
1715 | { | 1724 | { |
1716 | struct wps_token *token = SKINOFFSETTOPTR(skin_buffer, list->token); | 1725 | struct wps_token *token = SKINOFFSETTOPTR(skin_buffer, list->token); |
1717 | struct gui_img *img = (struct gui_img*)SKINOFFSETTOPTR(skin_buffer, token->value.data); | 1726 | struct gui_img *img = NULL; |
1718 | if (img->buflib_handle > 0) | 1727 | if (token) |
1728 | img = (struct gui_img*)SKINOFFSETTOPTR(skin_buffer, token->value.data); | ||
1729 | if (img && img->buflib_handle > 0) | ||
1719 | { | 1730 | { |
1720 | struct skin_token_list *imglist = SKINOFFSETTOPTR(skin_buffer, list->next); | 1731 | struct skin_token_list *imglist = SKINOFFSETTOPTR(skin_buffer, list->next); |
1721 | core_free(img->buflib_handle); | ||
1722 | 1732 | ||
1733 | core_free(img->buflib_handle); | ||
1723 | while (imglist) | 1734 | while (imglist) |
1724 | { | 1735 | { |
1725 | struct wps_token *freetoken = SKINOFFSETTOPTR(skin_buffer, imglist->token); | 1736 | struct wps_token *freetoken = SKINOFFSETTOPTR(skin_buffer, imglist->token); |
1726 | struct gui_img *freeimg = (struct gui_img*)SKINOFFSETTOPTR(skin_buffer, freetoken->value.data); | 1737 | struct gui_img *freeimg = NULL; |
1727 | if (img->buflib_handle == freeimg->buflib_handle) | 1738 | if (freetoken) |
1739 | freeimg = (struct gui_img*)SKINOFFSETTOPTR(skin_buffer, freetoken->value.data); | ||
1740 | if (freeimg && img->buflib_handle == freeimg->buflib_handle) | ||
1728 | freeimg->buflib_handle = -1; | 1741 | freeimg->buflib_handle = -1; |
1729 | imglist = SKINOFFSETTOPTR(skin_buffer, imglist->next); | 1742 | imglist = SKINOFFSETTOPTR(skin_buffer, imglist->next); |
1730 | } | 1743 | } |
@@ -1885,8 +1898,10 @@ static bool load_skin_bitmaps(struct wps_data *wps_data, char *bmpdir) | |||
1885 | while (list) | 1898 | while (list) |
1886 | { | 1899 | { |
1887 | struct wps_token *token = SKINOFFSETTOPTR(skin_buffer, list->token); | 1900 | struct wps_token *token = SKINOFFSETTOPTR(skin_buffer, list->token); |
1901 | if (!token) goto skip; | ||
1888 | struct gui_img *img = (struct gui_img*)SKINOFFSETTOPTR(skin_buffer, token->value.data); | 1902 | struct gui_img *img = (struct gui_img*)SKINOFFSETTOPTR(skin_buffer, token->value.data); |
1889 | if (!img->loaded) | 1903 | |
1904 | if (img && !img->loaded) | ||
1890 | { | 1905 | { |
1891 | if (img->using_preloaded_icons) | 1906 | if (img->using_preloaded_icons) |
1892 | { | 1907 | { |
@@ -1901,20 +1916,22 @@ static bool load_skin_bitmaps(struct wps_data *wps_data, char *bmpdir) | |||
1901 | handle = load_skin_bmp(wps_data, &img->bm, bmpdir); | 1916 | handle = load_skin_bmp(wps_data, &img->bm, bmpdir); |
1902 | img->buflib_handle = handle; | 1917 | img->buflib_handle = handle; |
1903 | img->loaded = img->buflib_handle >= 0; | 1918 | img->loaded = img->buflib_handle >= 0; |
1919 | |||
1904 | if (img->loaded) | 1920 | if (img->loaded) |
1905 | { | 1921 | { |
1906 | struct skin_token_list *imglist = SKINOFFSETTOPTR(skin_buffer, list->next); | 1922 | struct skin_token_list *imglist = SKINOFFSETTOPTR(skin_buffer, list->next); |
1907 | |||
1908 | img->subimage_height = img->bm.height / img->num_subimages; | 1923 | img->subimage_height = img->bm.height / img->num_subimages; |
1909 | while (imglist) | 1924 | while (imglist) |
1910 | { | 1925 | { |
1911 | token = SKINOFFSETTOPTR(skin_buffer, imglist->token); | 1926 | token = SKINOFFSETTOPTR(skin_buffer, imglist->token); |
1912 | img = (struct gui_img*)SKINOFFSETTOPTR(skin_buffer, token->value.data); | 1927 | if (token) { |
1913 | if (!strcmp(path, img->bm.data)) | 1928 | img = (struct gui_img*)SKINOFFSETTOPTR(skin_buffer, token->value.data); |
1914 | { | 1929 | if (img && !strcmp(path, img->bm.data)) |
1915 | img->loaded = true; | 1930 | { |
1916 | img->buflib_handle = handle; | 1931 | img->loaded = true; |
1917 | img->subimage_height = img->bm.height / img->num_subimages; | 1932 | img->buflib_handle = handle; |
1933 | img->subimage_height = img->bm.height / img->num_subimages; | ||
1934 | } | ||
1918 | } | 1935 | } |
1919 | imglist = SKINOFFSETTOPTR(skin_buffer, imglist->next); | 1936 | imglist = SKINOFFSETTOPTR(skin_buffer, imglist->next); |
1920 | } | 1937 | } |
@@ -1923,6 +1940,7 @@ static bool load_skin_bitmaps(struct wps_data *wps_data, char *bmpdir) | |||
1923 | retval = false; | 1940 | retval = false; |
1924 | } | 1941 | } |
1925 | } | 1942 | } |
1943 | skip: | ||
1926 | list = SKINOFFSETTOPTR(skin_buffer, list->next); | 1944 | list = SKINOFFSETTOPTR(skin_buffer, list->next); |
1927 | } | 1945 | } |
1928 | 1946 | ||
@@ -1947,6 +1965,7 @@ static bool skin_load_fonts(struct wps_data *data) | |||
1947 | /* first, find the viewports that have a non-sys/ui-font font */ | 1965 | /* first, find the viewports that have a non-sys/ui-font font */ |
1948 | struct skin_viewport *skin_vp = | 1966 | struct skin_viewport *skin_vp = |
1949 | SKINOFFSETTOPTR(skin_buffer, vp_list->data); | 1967 | SKINOFFSETTOPTR(skin_buffer, vp_list->data); |
1968 | if (!skin_vp) continue; | ||
1950 | struct viewport *vp = &skin_vp->vp; | 1969 | struct viewport *vp = &skin_vp->vp; |
1951 | 1970 | ||
1952 | font_id = skin_vp->parsed_fontid; | 1971 | font_id = skin_vp->parsed_fontid; |
@@ -2507,9 +2526,10 @@ bool skin_data_load(enum screen_type screen, struct wps_data *wps_data, | |||
2507 | while (regions) | 2526 | while (regions) |
2508 | { | 2527 | { |
2509 | struct wps_token *token = SKINOFFSETTOPTR(skin_buffer, regions->token); | 2528 | struct wps_token *token = SKINOFFSETTOPTR(skin_buffer, regions->token); |
2510 | struct touchregion *r = SKINOFFSETTOPTR(skin_buffer, token->value.data); | 2529 | struct touchregion *r = NULL; |
2511 | 2530 | if (token) | |
2512 | if (r->action != ACTION_TOUCH_SCROLLBAR && | 2531 | r = SKINOFFSETTOPTR(skin_buffer, token->value.data); |
2532 | if (r && r->action != ACTION_TOUCH_SCROLLBAR && | ||
2513 | r->action != ACTION_TOUCH_VOLUME) | 2533 | r->action != ACTION_TOUCH_VOLUME) |
2514 | { | 2534 | { |
2515 | user_touch_region_found = true; | 2535 | user_touch_region_found = true; |
diff --git a/apps/gui/skin_engine/skin_render.c b/apps/gui/skin_engine/skin_render.c index ed2f783e7a..7f2dcab222 100644 --- a/apps/gui/skin_engine/skin_render.c +++ b/apps/gui/skin_engine/skin_render.c | |||
@@ -96,7 +96,7 @@ static bool do_non_text_tags(struct gui_wps *gwps, struct skin_draw_info *info, | |||
96 | struct skin_element *element, struct skin_viewport* skin_vp) | 96 | struct skin_element *element, struct skin_viewport* skin_vp) |
97 | { | 97 | { |
98 | struct wps_token *token = (struct wps_token *)SKINOFFSETTOPTR(skin_buffer, element->data); | 98 | struct wps_token *token = (struct wps_token *)SKINOFFSETTOPTR(skin_buffer, element->data); |
99 | 99 | if (!token) return false; | |
100 | struct viewport *vp = &skin_vp->vp; | 100 | struct viewport *vp = &skin_vp->vp; |
101 | struct wps_data *data = gwps->data; | 101 | struct wps_data *data = gwps->data; |
102 | bool do_refresh = (element->tag->flags & info->refresh_type) > 0; | 102 | bool do_refresh = (element->tag->flags & info->refresh_type) > 0; |
@@ -107,7 +107,9 @@ static bool do_non_text_tags(struct gui_wps *gwps, struct skin_draw_info *info, | |||
107 | case SKIN_TOKEN_VIEWPORT_FGCOLOUR: | 107 | case SKIN_TOKEN_VIEWPORT_FGCOLOUR: |
108 | { | 108 | { |
109 | struct viewport_colour *col = SKINOFFSETTOPTR(skin_buffer, token->value.data); | 109 | struct viewport_colour *col = SKINOFFSETTOPTR(skin_buffer, token->value.data); |
110 | if (!col) return false; | ||
110 | struct viewport *vp = SKINOFFSETTOPTR(skin_buffer, col->vp); | 111 | struct viewport *vp = SKINOFFSETTOPTR(skin_buffer, col->vp); |
112 | if (!vp) return false; | ||
111 | vp->fg_pattern = col->colour; | 113 | vp->fg_pattern = col->colour; |
112 | skin_vp->fgbg_changed = true; | 114 | skin_vp->fgbg_changed = true; |
113 | } | 115 | } |
@@ -115,7 +117,9 @@ static bool do_non_text_tags(struct gui_wps *gwps, struct skin_draw_info *info, | |||
115 | case SKIN_TOKEN_VIEWPORT_BGCOLOUR: | 117 | case SKIN_TOKEN_VIEWPORT_BGCOLOUR: |
116 | { | 118 | { |
117 | struct viewport_colour *col = SKINOFFSETTOPTR(skin_buffer, token->value.data); | 119 | struct viewport_colour *col = SKINOFFSETTOPTR(skin_buffer, token->value.data); |
120 | if (!col) return false; | ||
118 | struct viewport *vp = SKINOFFSETTOPTR(skin_buffer, col->vp); | 121 | struct viewport *vp = SKINOFFSETTOPTR(skin_buffer, col->vp); |
122 | if (!vp) return false; | ||
119 | vp->bg_pattern = col->colour; | 123 | vp->bg_pattern = col->colour; |
120 | skin_vp->fgbg_changed = true; | 124 | skin_vp->fgbg_changed = true; |
121 | } | 125 | } |
@@ -124,6 +128,7 @@ static bool do_non_text_tags(struct gui_wps *gwps, struct skin_draw_info *info, | |||
124 | { | 128 | { |
125 | struct line_desc *data = SKINOFFSETTOPTR(skin_buffer, token->value.data); | 129 | struct line_desc *data = SKINOFFSETTOPTR(skin_buffer, token->value.data); |
126 | struct line_desc *linedes = &info->line_desc; | 130 | struct line_desc *linedes = &info->line_desc; |
131 | if (!data || !linedes) return false; | ||
127 | /* gradient colors are handled with a separate tag | 132 | /* gradient colors are handled with a separate tag |
128 | * (SKIN_TOKEN_VIEWPORT_GRADIENT_SETUP, see below). since it may | 133 | * (SKIN_TOKEN_VIEWPORT_GRADIENT_SETUP, see below). since it may |
129 | * come before the text style tag color fields need to be preserved */ | 134 | * come before the text style tag color fields need to be preserved */ |
@@ -147,6 +152,7 @@ static bool do_non_text_tags(struct gui_wps *gwps, struct skin_draw_info *info, | |||
147 | { | 152 | { |
148 | struct gradient_config *cfg = SKINOFFSETTOPTR(skin_buffer, token->value.data); | 153 | struct gradient_config *cfg = SKINOFFSETTOPTR(skin_buffer, token->value.data); |
149 | struct line_desc *linedes = &info->line_desc; | 154 | struct line_desc *linedes = &info->line_desc; |
155 | if (!cfg || !linedes) return false; | ||
150 | linedes->text_color = cfg->text; | 156 | linedes->text_color = cfg->text; |
151 | linedes->line_color = cfg->start; | 157 | linedes->line_color = cfg->start; |
152 | linedes->line_end_color = cfg->end; | 158 | linedes->line_end_color = cfg->end; |
@@ -162,17 +168,19 @@ static bool do_non_text_tags(struct gui_wps *gwps, struct skin_draw_info *info, | |||
162 | { | 168 | { |
163 | struct skin_viewport *skinvp = SKINOFFSETTOPTR(skin_buffer, viewport->data); | 169 | struct skin_viewport *skinvp = SKINOFFSETTOPTR(skin_buffer, viewport->data); |
164 | 170 | ||
165 | char *vplabel = SKINOFFSETTOPTR(skin_buffer, skinvp->label); | 171 | if (skinvp) { |
166 | if (skinvp->label == VP_DEFAULT_LABEL) | 172 | char *vplabel = SKINOFFSETTOPTR(skin_buffer, skinvp->label); |
167 | vplabel = VP_DEFAULT_LABEL_STRING; | 173 | if (skinvp->label == VP_DEFAULT_LABEL) |
168 | if (vplabel && !skinvp->is_infovp && | 174 | vplabel = VP_DEFAULT_LABEL_STRING; |
169 | !strcmp(vplabel, label)) | 175 | if (vplabel && !skinvp->is_infovp && |
170 | { | 176 | !strcmp(vplabel, label)) |
171 | if (skinvp->hidden_flags&VP_DRAW_HIDDEN) | ||
172 | { | 177 | { |
173 | temp |= VP_DRAW_WASHIDDEN; | 178 | if (skinvp->hidden_flags&VP_DRAW_HIDDEN) |
179 | { | ||
180 | temp |= VP_DRAW_WASHIDDEN; | ||
181 | } | ||
182 | skinvp->hidden_flags = temp; | ||
174 | } | 183 | } |
175 | skinvp->hidden_flags = temp; | ||
176 | } | 184 | } |
177 | viewport = SKINOFFSETTOPTR(skin_buffer, viewport->next); | 185 | viewport = SKINOFFSETTOPTR(skin_buffer, viewport->next); |
178 | } | 186 | } |
@@ -195,12 +203,13 @@ static bool do_non_text_tags(struct gui_wps *gwps, struct skin_draw_info *info, | |||
195 | { | 203 | { |
196 | struct draw_rectangle *rect = | 204 | struct draw_rectangle *rect = |
197 | SKINOFFSETTOPTR(skin_buffer, token->value.data); | 205 | SKINOFFSETTOPTR(skin_buffer, token->value.data); |
206 | if (!rect) break; | ||
198 | #ifdef HAVE_LCD_COLOR | 207 | #ifdef HAVE_LCD_COLOR |
199 | if (rect->start_colour != rect->end_colour && | 208 | if (rect->start_colour != rect->end_colour && |
200 | gwps->display->screen_type == SCREEN_MAIN) | 209 | gwps->display->screen_type == SCREEN_MAIN) |
201 | { | 210 | { |
202 | gwps->display->gradient_fillrect(rect->x, rect->y, rect->width, | 211 | gwps->display->gradient_fillrect(rect->x, rect->y, rect->width, |
203 | rect->height, rect->start_colour, rect->end_colour); | 212 | rect->height, rect->start_colour, rect->end_colour); |
204 | } | 213 | } |
205 | else | 214 | else |
206 | #endif | 215 | #endif |
@@ -210,7 +219,7 @@ static bool do_non_text_tags(struct gui_wps *gwps, struct skin_draw_info *info, | |||
210 | vp->fg_pattern = rect->start_colour; | 219 | vp->fg_pattern = rect->start_colour; |
211 | #endif | 220 | #endif |
212 | gwps->display->fillrect(rect->x, rect->y, rect->width, | 221 | gwps->display->fillrect(rect->x, rect->y, rect->width, |
213 | rect->height); | 222 | rect->height); |
214 | #if LCD_DEPTH > 1 | 223 | #if LCD_DEPTH > 1 |
215 | vp->fg_pattern = backup; | 224 | vp->fg_pattern = backup; |
216 | #endif | 225 | #endif |
@@ -245,6 +254,7 @@ static bool do_non_text_tags(struct gui_wps *gwps, struct skin_draw_info *info, | |||
245 | case SKIN_TOKEN_IMAGE_DISPLAY_9SEGMENT: | 254 | case SKIN_TOKEN_IMAGE_DISPLAY_9SEGMENT: |
246 | { | 255 | { |
247 | struct image_display *id = SKINOFFSETTOPTR(skin_buffer, token->value.data); | 256 | struct image_display *id = SKINOFFSETTOPTR(skin_buffer, token->value.data); |
257 | if (!id) break; | ||
248 | const char* label = SKINOFFSETTOPTR(skin_buffer, id->label); | 258 | const char* label = SKINOFFSETTOPTR(skin_buffer, id->label); |
249 | struct gui_img *img = skin_find_item(label,SKIN_FIND_IMAGE, data); | 259 | struct gui_img *img = skin_find_item(label,SKIN_FIND_IMAGE, data); |
250 | if (img && img->loaded) | 260 | if (img && img->loaded) |
@@ -313,7 +323,6 @@ static bool do_non_text_tags(struct gui_wps *gwps, struct skin_draw_info *info, | |||
313 | skin_render_playlistviewer(SKINOFFSETTOPTR(skin_buffer, token->value.data), gwps, | 323 | skin_render_playlistviewer(SKINOFFSETTOPTR(skin_buffer, token->value.data), gwps, |
314 | info->skin_vp, info->refresh_type); | 324 | info->skin_vp, info->refresh_type); |
315 | break; | 325 | break; |
316 | |||
317 | #ifdef HAVE_SKIN_VARIABLES | 326 | #ifdef HAVE_SKIN_VARIABLES |
318 | case SKIN_TOKEN_VAR_SET: | 327 | case SKIN_TOKEN_VAR_SET: |
319 | { | 328 | { |
@@ -374,19 +383,21 @@ static void do_tags_in_hidden_conditional(struct skin_element* branch, | |||
374 | { | 383 | { |
375 | do_tags_in_hidden_conditional(get_child(child->children, i), info); | 384 | do_tags_in_hidden_conditional(get_child(child->children, i), info); |
376 | } | 385 | } |
377 | child = SKINOFFSETTOPTR(skin_buffer, child->next); | 386 | goto skip; |
378 | continue; | ||
379 | } | 387 | } |
380 | else if (child->type != TAG || !SKINOFFSETTOPTR(skin_buffer, child->data)) | 388 | else if (child->type != TAG || !SKINOFFSETTOPTR(skin_buffer, child->data)) |
381 | { | 389 | { |
382 | child = SKINOFFSETTOPTR(skin_buffer, child->next); | 390 | goto skip; |
383 | continue; | ||
384 | } | 391 | } |
392 | |||
385 | token = (struct wps_token *)SKINOFFSETTOPTR(skin_buffer, child->data); | 393 | token = (struct wps_token *)SKINOFFSETTOPTR(skin_buffer, child->data); |
394 | |||
386 | /* clear all pictures in the conditional and nested ones */ | 395 | /* clear all pictures in the conditional and nested ones */ |
387 | if (token->type == SKIN_TOKEN_IMAGE_PRELOAD_DISPLAY) | 396 | if (token->type == SKIN_TOKEN_IMAGE_PRELOAD_DISPLAY) |
388 | { | 397 | { |
389 | struct image_display *id = SKINOFFSETTOPTR(skin_buffer, token->value.data); | 398 | struct image_display *id = SKINOFFSETTOPTR(skin_buffer, token->value.data); |
399 | if (!id) goto skip; | ||
400 | |||
390 | struct gui_img *img = skin_find_item(SKINOFFSETTOPTR(skin_buffer, id->label), | 401 | struct gui_img *img = skin_find_item(SKINOFFSETTOPTR(skin_buffer, id->label), |
391 | SKIN_FIND_IMAGE, data); | 402 | SKIN_FIND_IMAGE, data); |
392 | clear_image_pos(gwps, img); | 403 | clear_image_pos(gwps, img); |
@@ -404,6 +415,7 @@ static void do_tags_in_hidden_conditional(struct skin_element* branch, | |||
404 | viewport = SKINOFFSETTOPTR(skin_buffer, viewport->next)) | 415 | viewport = SKINOFFSETTOPTR(skin_buffer, viewport->next)) |
405 | { | 416 | { |
406 | struct skin_viewport *skin_viewport = SKINOFFSETTOPTR(skin_buffer, viewport->data); | 417 | struct skin_viewport *skin_viewport = SKINOFFSETTOPTR(skin_buffer, viewport->data); |
418 | if (!skin_viewport) continue; | ||
407 | char *vplabel = SKINOFFSETTOPTR(skin_buffer, skin_viewport->label); | 419 | char *vplabel = SKINOFFSETTOPTR(skin_buffer, skin_viewport->label); |
408 | if (skin_viewport->label == VP_DEFAULT_LABEL) | 420 | if (skin_viewport->label == VP_DEFAULT_LABEL) |
409 | vplabel = VP_DEFAULT_LABEL_STRING; | 421 | vplabel = VP_DEFAULT_LABEL_STRING; |
@@ -451,6 +463,7 @@ static void do_tags_in_hidden_conditional(struct skin_element* branch, | |||
451 | playback_current_aa_hid(data->playback_aa_slot), true); | 463 | playback_current_aa_hid(data->playback_aa_slot), true); |
452 | } | 464 | } |
453 | #endif | 465 | #endif |
466 | skip: | ||
454 | child = SKINOFFSETTOPTR(skin_buffer, child->next); | 467 | child = SKINOFFSETTOPTR(skin_buffer, child->next); |
455 | } | 468 | } |
456 | } | 469 | } |
@@ -517,6 +530,7 @@ static bool skin_render_line(struct skin_element* line, struct skin_draw_info *i | |||
517 | { | 530 | { |
518 | case CONDITIONAL: | 531 | case CONDITIONAL: |
519 | conditional = SKINOFFSETTOPTR(skin_buffer, child->data); | 532 | conditional = SKINOFFSETTOPTR(skin_buffer, child->data); |
533 | if (!conditional) break; | ||
520 | last_value = conditional->last_value; | 534 | last_value = conditional->last_value; |
521 | value = evaluate_conditional(info->gwps, info->offset, | 535 | value = evaluate_conditional(info->gwps, info->offset, |
522 | conditional, child->children_count); | 536 | conditional, child->children_count); |
@@ -623,7 +637,8 @@ static int get_subline_timeout(struct gui_wps *gwps, struct skin_element* line) | |||
623 | element->tag->type == SKIN_TOKEN_SUBLINE_TIMEOUT ) | 637 | element->tag->type == SKIN_TOKEN_SUBLINE_TIMEOUT ) |
624 | { | 638 | { |
625 | token = SKINOFFSETTOPTR(skin_buffer, element->data); | 639 | token = SKINOFFSETTOPTR(skin_buffer, element->data); |
626 | return token->value.i; | 640 | if (token) |
641 | return token->value.i; | ||
627 | } | 642 | } |
628 | else if (element->type == CONDITIONAL) | 643 | else if (element->type == CONDITIONAL) |
629 | { | 644 | { |
@@ -726,8 +741,11 @@ void skin_render_viewport(struct skin_element* viewport, struct gui_wps *gwps, | |||
726 | while (imglist) | 741 | while (imglist) |
727 | { | 742 | { |
728 | struct wps_token *token = SKINOFFSETTOPTR(skin_buffer, imglist->token); | 743 | struct wps_token *token = SKINOFFSETTOPTR(skin_buffer, imglist->token); |
729 | struct gui_img *img = (struct gui_img *)SKINOFFSETTOPTR(skin_buffer, token->value.data); | 744 | if (token) { |
730 | img->display = -1; | 745 | struct gui_img *img = (struct gui_img *)SKINOFFSETTOPTR(skin_buffer, token->value.data); |
746 | if (img) | ||
747 | img->display = -1; | ||
748 | } | ||
731 | imglist = SKINOFFSETTOPTR(skin_buffer, imglist->next); | 749 | imglist = SKINOFFSETTOPTR(skin_buffer, imglist->next); |
732 | } | 750 | } |
733 | 751 | ||
@@ -756,7 +774,6 @@ void skin_render_viewport(struct skin_element* viewport, struct gui_wps *gwps, | |||
756 | align->center = NULL; | 774 | align->center = NULL; |
757 | align->right = NULL; | 775 | align->right = NULL; |
758 | 776 | ||
759 | |||
760 | if (line->type == LINE_ALTERNATOR) | 777 | if (line->type == LINE_ALTERNATOR) |
761 | func = skin_render_alternator; | 778 | func = skin_render_alternator; |
762 | else if (line->type == LINE) | 779 | else if (line->type == LINE) |
@@ -819,9 +836,10 @@ void skin_render(struct gui_wps *gwps, unsigned refresh_mode) | |||
819 | display->clear_viewport(); | 836 | display->clear_viewport(); |
820 | } | 837 | } |
821 | } | 838 | } |
822 | |||
823 | viewport = SKINOFFSETTOPTR(skin_buffer, data->tree); | 839 | viewport = SKINOFFSETTOPTR(skin_buffer, data->tree); |
840 | if (!viewport) return; | ||
824 | skin_viewport = SKINOFFSETTOPTR(skin_buffer, viewport->data); | 841 | skin_viewport = SKINOFFSETTOPTR(skin_buffer, viewport->data); |
842 | if (!skin_viewport) return; | ||
825 | label = SKINOFFSETTOPTR(skin_buffer, skin_viewport->label); | 843 | label = SKINOFFSETTOPTR(skin_buffer, skin_viewport->label); |
826 | if (skin_viewport->label == VP_DEFAULT_LABEL) | 844 | if (skin_viewport->label == VP_DEFAULT_LABEL) |
827 | label = VP_DEFAULT_LABEL_STRING; | 845 | label = VP_DEFAULT_LABEL_STRING; |
@@ -833,8 +851,10 @@ void skin_render(struct gui_wps *gwps, unsigned refresh_mode) | |||
833 | viewport; | 851 | viewport; |
834 | viewport = SKINOFFSETTOPTR(skin_buffer, viewport->next)) | 852 | viewport = SKINOFFSETTOPTR(skin_buffer, viewport->next)) |
835 | { | 853 | { |
854 | |||
836 | /* SETUP */ | 855 | /* SETUP */ |
837 | skin_viewport = SKINOFFSETTOPTR(skin_buffer, viewport->data); | 856 | skin_viewport = SKINOFFSETTOPTR(skin_buffer, viewport->data); |
857 | if (!skin_viewport) continue; | ||
838 | unsigned vp_refresh_mode = refresh_mode; | 858 | unsigned vp_refresh_mode = refresh_mode; |
839 | #if (LCD_DEPTH > 1) || (defined(HAVE_REMOTE_LCD) && LCD_REMOTE_DEPTH > 1) | 859 | #if (LCD_DEPTH > 1) || (defined(HAVE_REMOTE_LCD) && LCD_REMOTE_DEPTH > 1) |
840 | if (skin_viewport->output_to_backdrop_buffer) | 860 | if (skin_viewport->output_to_backdrop_buffer) |
diff --git a/apps/gui/skin_engine/skin_tokens.c b/apps/gui/skin_engine/skin_tokens.c index db9a9e694b..b86c664d7e 100644 --- a/apps/gui/skin_engine/skin_tokens.c +++ b/apps/gui/skin_engine/skin_tokens.c | |||
@@ -163,7 +163,7 @@ const char *get_cuesheetid3_token(struct wps_token *token, struct mp3entry *id3, | |||
163 | struct cuesheet *cue = id3?id3->cuesheet:NULL; | 163 | struct cuesheet *cue = id3?id3->cuesheet:NULL; |
164 | if (!cue || !cue->curr_track) | 164 | if (!cue || !cue->curr_track) |
165 | return NULL; | 165 | return NULL; |
166 | 166 | ||
167 | struct cue_track_info *track = cue->curr_track; | 167 | struct cue_track_info *track = cue->curr_track; |
168 | if (offset_tracks) | 168 | if (offset_tracks) |
169 | { | 169 | { |
@@ -185,7 +185,7 @@ const char *get_cuesheetid3_token(struct wps_token *token, struct mp3entry *id3, | |||
185 | case SKIN_TOKEN_METADATA_TRACK_TITLE: | 185 | case SKIN_TOKEN_METADATA_TRACK_TITLE: |
186 | return *track->title ? track->title : NULL; | 186 | return *track->title ? track->title : NULL; |
187 | case SKIN_TOKEN_METADATA_TRACK_NUMBER: | 187 | case SKIN_TOKEN_METADATA_TRACK_NUMBER: |
188 | snprintf(buf, buf_size, "%d/%d", | 188 | snprintf(buf, buf_size, "%d/%d", |
189 | cue->curr_track_idx+offset_tracks+1, cue->track_count); | 189 | cue->curr_track_idx+offset_tracks+1, cue->track_count); |
190 | return buf; | 190 | return buf; |
191 | default: | 191 | default: |
@@ -200,7 +200,7 @@ static const char* get_filename_token(struct wps_token *token, char* filename, | |||
200 | if (filename) | 200 | if (filename) |
201 | { | 201 | { |
202 | switch (token->type) | 202 | switch (token->type) |
203 | { | 203 | { |
204 | case SKIN_TOKEN_FILE_PATH: | 204 | case SKIN_TOKEN_FILE_PATH: |
205 | return filename; | 205 | return filename; |
206 | case SKIN_TOKEN_FILE_NAME: | 206 | case SKIN_TOKEN_FILE_NAME: |
@@ -478,7 +478,7 @@ const char *get_radio_token(struct wps_token *token, int preset_offset, | |||
478 | { | 478 | { |
479 | *intval = val; | 479 | *intval = val; |
480 | } | 480 | } |
481 | else | 481 | else |
482 | { | 482 | { |
483 | *intval = 1+(limit-1)*(val-min)/(max-1-min); | 483 | *intval = 1+(limit-1)*(val-min)/(max-1-min); |
484 | } | 484 | } |
@@ -514,7 +514,7 @@ const char *get_radio_token(struct wps_token *token, int preset_offset, | |||
514 | return buf; | 514 | return buf; |
515 | } | 515 | } |
516 | case SKIN_TOKEN_PRESET_COUNT: | 516 | case SKIN_TOKEN_PRESET_COUNT: |
517 | snprintf(buf, buf_size, "%d", radio_preset_count()); | 517 | snprintf(buf, buf_size, "%d", radio_preset_count()); |
518 | if (intval) | 518 | if (intval) |
519 | *intval = radio_preset_count(); | 519 | *intval = radio_preset_count(); |
520 | return buf; | 520 | return buf; |
@@ -580,7 +580,7 @@ static const char* NOINLINE get_lif_token_value(struct gui_wps *gwps, | |||
580 | int b; | 580 | int b; |
581 | bool number_set = true; | 581 | bool number_set = true; |
582 | struct wps_token *liftoken = SKINOFFSETTOPTR(get_skin_buffer(gwps->data), lif->token); | 582 | struct wps_token *liftoken = SKINOFFSETTOPTR(get_skin_buffer(gwps->data), lif->token); |
583 | const char* out_text = get_token_value(gwps, liftoken, offset, buf, buf_size, &a); | 583 | const char* out_text = get_token_value(gwps, liftoken, offset, buf, buf_size, &a); |
584 | if (a == -1 && liftoken->type != SKIN_TOKEN_VOLUME) | 584 | if (a == -1 && liftoken->type != SKIN_TOKEN_VOLUME) |
585 | { | 585 | { |
586 | a = (out_text && *out_text) ? 1 : 0; | 586 | a = (out_text && *out_text) ? 1 : 0; |
@@ -610,10 +610,13 @@ static const char* NOINLINE get_lif_token_value(struct gui_wps *gwps, | |||
610 | char temp_buf[MAX_PATH]; | 610 | char temp_buf[MAX_PATH]; |
611 | const char *outb; | 611 | const char *outb; |
612 | struct skin_element *element = SKINOFFSETTOPTR(get_skin_buffer(gwps->data), lif->operand.data.code); | 612 | struct skin_element *element = SKINOFFSETTOPTR(get_skin_buffer(gwps->data), lif->operand.data.code); |
613 | if (!element) return NULL; | ||
613 | struct wps_token *token = SKINOFFSETTOPTR(get_skin_buffer(gwps->data), element->data); | 614 | struct wps_token *token = SKINOFFSETTOPTR(get_skin_buffer(gwps->data), element->data); |
614 | b = lif->num_options; | 615 | b = lif->num_options; |
616 | |||
615 | outb = get_token_value(gwps, token, offset, temp_buf, | 617 | outb = get_token_value(gwps, token, offset, temp_buf, |
616 | sizeof(temp_buf), &b); | 618 | sizeof(temp_buf), &b); |
619 | |||
617 | if (b == -1 && liftoken->type != SKIN_TOKEN_VOLUME) | 620 | if (b == -1 && liftoken->type != SKIN_TOKEN_VOLUME) |
618 | { | 621 | { |
619 | if (!out_text || !outb) | 622 | if (!out_text || !outb) |
@@ -631,7 +634,7 @@ static const char* NOINLINE get_lif_token_value(struct gui_wps *gwps, | |||
631 | case DEFAULT: | 634 | case DEFAULT: |
632 | break; | 635 | break; |
633 | } | 636 | } |
634 | 637 | ||
635 | switch (lif->op) | 638 | switch (lif->op) |
636 | { | 639 | { |
637 | case IF_EQUALS: | 640 | case IF_EQUALS: |
@@ -666,10 +669,12 @@ const char *get_token_value(struct gui_wps *gwps, | |||
666 | { | 669 | { |
667 | if (!gwps) | 670 | if (!gwps) |
668 | return NULL; | 671 | return NULL; |
672 | if (!token) | ||
673 | return NULL; | ||
669 | 674 | ||
670 | struct wps_data *data = gwps->data; | 675 | struct wps_data *data = gwps->data; |
671 | struct wps_state *state = skin_get_global_state(); | 676 | struct wps_state *state = skin_get_global_state(); |
672 | struct mp3entry *id3; /* Think very carefully about using this. | 677 | struct mp3entry *id3; /* Think very carefully about using this. |
673 | maybe get_id3_token() is the better place? */ | 678 | maybe get_id3_token() is the better place? */ |
674 | const char *out_text = NULL; | 679 | const char *out_text = NULL; |
675 | char *filename = NULL; | 680 | char *filename = NULL; |
@@ -680,7 +685,7 @@ const char *get_token_value(struct gui_wps *gwps, | |||
680 | id3 = get_mp3entry_from_offset(token->next? 1: offset, &filename); | 685 | id3 = get_mp3entry_from_offset(token->next? 1: offset, &filename); |
681 | if (id3) | 686 | if (id3) |
682 | filename = id3->path; | 687 | filename = id3->path; |
683 | 688 | ||
684 | #if CONFIG_RTC | 689 | #if CONFIG_RTC |
685 | struct tm* tm = NULL; | 690 | struct tm* tm = NULL; |
686 | 691 | ||
@@ -702,10 +707,10 @@ const char *get_token_value(struct gui_wps *gwps, | |||
702 | limit = *intval; | 707 | limit = *intval; |
703 | *intval = -1; | 708 | *intval = -1; |
704 | } | 709 | } |
705 | 710 | ||
706 | if (id3 && id3 == state->id3 && id3->cuesheet ) | 711 | if (id3 && id3 == state->id3 && id3->cuesheet ) |
707 | { | 712 | { |
708 | out_text = get_cuesheetid3_token(token, id3, | 713 | out_text = get_cuesheetid3_token(token, id3, |
709 | token->next?1:offset, buf, buf_size); | 714 | token->next?1:offset, buf, buf_size); |
710 | if (out_text) | 715 | if (out_text) |
711 | return out_text; | 716 | return out_text; |
@@ -734,6 +739,7 @@ const char *get_token_value(struct gui_wps *gwps, | |||
734 | char *skinbuffer = get_skin_buffer(data); | 739 | char *skinbuffer = get_skin_buffer(data); |
735 | struct skin_element *element = | 740 | struct skin_element *element = |
736 | SKINOFFSETTOPTR(skinbuffer, token->value.data); | 741 | SKINOFFSETTOPTR(skinbuffer, token->value.data); |
742 | if (!element || !element->params) return NULL; | ||
737 | struct skin_tag_parameter* params = | 743 | struct skin_tag_parameter* params = |
738 | SKINOFFSETTOPTR(skinbuffer, element->params); | 744 | SKINOFFSETTOPTR(skinbuffer, element->params); |
739 | struct skin_tag_parameter* thistag; | 745 | struct skin_tag_parameter* thistag; |
@@ -742,6 +748,7 @@ const char *get_token_value(struct gui_wps *gwps, | |||
742 | thistag = ¶ms[i]; | 748 | thistag = ¶ms[i]; |
743 | struct skin_element *tokenelement = | 749 | struct skin_element *tokenelement = |
744 | SKINOFFSETTOPTR(skinbuffer, thistag->data.code); | 750 | SKINOFFSETTOPTR(skinbuffer, thistag->data.code); |
751 | if (!tokenelement) return NULL; | ||
745 | out_text = get_token_value(gwps, | 752 | out_text = get_token_value(gwps, |
746 | SKINOFFSETTOPTR(skinbuffer, tokenelement->data), | 753 | SKINOFFSETTOPTR(skinbuffer, tokenelement->data), |
747 | offset, buf, buf_size, intval); | 754 | offset, buf, buf_size, intval); |
@@ -753,10 +760,12 @@ const char *get_token_value(struct gui_wps *gwps, | |||
753 | return truecount ? "true" : NULL; | 760 | return truecount ? "true" : NULL; |
754 | } | 761 | } |
755 | break; | 762 | break; |
763 | |||
756 | case SKIN_TOKEN_SUBSTRING: | 764 | case SKIN_TOKEN_SUBSTRING: |
757 | { | 765 | { |
758 | struct substring *ss = SKINOFFSETTOPTR(get_skin_buffer(data), token->value.data); | 766 | struct substring *ss = SKINOFFSETTOPTR(get_skin_buffer(data), token->value.data); |
759 | const char *token_val = get_token_value(gwps, | 767 | if (!ss) return NULL; |
768 | const char *token_val = get_token_value(gwps, | ||
760 | SKINOFFSETTOPTR(get_skin_buffer(data), ss->token), offset, | 769 | SKINOFFSETTOPTR(get_skin_buffer(data), ss->token), offset, |
761 | buf, buf_size, intval); | 770 | buf, buf_size, intval); |
762 | if (token_val) | 771 | if (token_val) |
@@ -788,13 +797,13 @@ const char *get_token_value(struct gui_wps *gwps, | |||
788 | if (ss->expect_number && | 797 | if (ss->expect_number && |
789 | intval && (buf[0] >= '0' && buf[0] <= '9')) | 798 | intval && (buf[0] >= '0' && buf[0] <= '9')) |
790 | *intval = atoi(buf) + 1; /* so 0 is the first item */ | 799 | *intval = atoi(buf) + 1; /* so 0 is the first item */ |
791 | 800 | ||
792 | return buf; | 801 | return buf; |
793 | } | 802 | } |
794 | return NULL; | 803 | return NULL; |
795 | } | 804 | } |
796 | break; | 805 | break; |
797 | 806 | ||
798 | case SKIN_TOKEN_CHARACTER: | 807 | case SKIN_TOKEN_CHARACTER: |
799 | if (token->value.c == '\n') | 808 | if (token->value.c == '\n') |
800 | return NULL; | 809 | return NULL; |
@@ -802,7 +811,7 @@ const char *get_token_value(struct gui_wps *gwps, | |||
802 | 811 | ||
803 | case SKIN_TOKEN_STRING: | 812 | case SKIN_TOKEN_STRING: |
804 | return (char*)SKINOFFSETTOPTR(get_skin_buffer(data), token->value.data); | 813 | return (char*)SKINOFFSETTOPTR(get_skin_buffer(data), token->value.data); |
805 | 814 | ||
806 | case SKIN_TOKEN_TRANSLATEDSTRING: | 815 | case SKIN_TOKEN_TRANSLATEDSTRING: |
807 | return (char*)P2STR(ID2P(token->value.i)); | 816 | return (char*)P2STR(ID2P(token->value.i)); |
808 | 817 | ||
@@ -821,6 +830,7 @@ const char *get_token_value(struct gui_wps *gwps, | |||
821 | case SKIN_TOKEN_LIST_ITEM_TEXT: | 830 | case SKIN_TOKEN_LIST_ITEM_TEXT: |
822 | { | 831 | { |
823 | struct listitem *li = (struct listitem *)SKINOFFSETTOPTR(get_skin_buffer(data), token->value.data); | 832 | struct listitem *li = (struct listitem *)SKINOFFSETTOPTR(get_skin_buffer(data), token->value.data); |
833 | if (!li) return NULL; | ||
824 | return skinlist_get_item_text(li->offset, li->wrap, buf, buf_size); | 834 | return skinlist_get_item_text(li->offset, li->wrap, buf, buf_size); |
825 | } | 835 | } |
826 | case SKIN_TOKEN_LIST_ITEM_ROW: | 836 | case SKIN_TOKEN_LIST_ITEM_ROW: |
@@ -843,6 +853,7 @@ const char *get_token_value(struct gui_wps *gwps, | |||
843 | case SKIN_TOKEN_LIST_ITEM_ICON: | 853 | case SKIN_TOKEN_LIST_ITEM_ICON: |
844 | { | 854 | { |
845 | struct listitem *li = (struct listitem *)SKINOFFSETTOPTR(get_skin_buffer(data), token->value.data); | 855 | struct listitem *li = (struct listitem *)SKINOFFSETTOPTR(get_skin_buffer(data), token->value.data); |
856 | if (!li) return NULL; | ||
846 | int icon = skinlist_get_item_icon(li->offset, li->wrap); | 857 | int icon = skinlist_get_item_icon(li->offset, li->wrap); |
847 | if (intval) | 858 | if (intval) |
848 | *intval = icon; | 859 | *intval = icon; |
@@ -905,11 +916,12 @@ const char *get_token_value(struct gui_wps *gwps, | |||
905 | if (in_radio_screen() || (get_radio_status() != FMRADIO_OFF)) | 916 | if (in_radio_screen() || (get_radio_status() != FMRADIO_OFF)) |
906 | { | 917 | { |
907 | struct skin_albumart *aa = SKINOFFSETTOPTR(get_skin_buffer(data), data->albumart); | 918 | struct skin_albumart *aa = SKINOFFSETTOPTR(get_skin_buffer(data), data->albumart); |
919 | if (!aa) return NULL; | ||
908 | struct dim dim = {aa->width, aa->height}; | 920 | struct dim dim = {aa->width, aa->height}; |
909 | handle = radio_get_art_hid(&dim); | 921 | handle = radio_get_art_hid(&dim); |
910 | } | 922 | } |
911 | #endif | 923 | #endif |
912 | if (handle >= 0) | 924 | if (handle >= 0) |
913 | return "C"; | 925 | return "C"; |
914 | } | 926 | } |
915 | return NULL; | 927 | return NULL; |
@@ -1009,7 +1021,7 @@ const char *get_token_value(struct gui_wps *gwps, | |||
1009 | int mode = 1; /* stop */ | 1021 | int mode = 1; /* stop */ |
1010 | if (status == STATUS_PLAY) | 1022 | if (status == STATUS_PLAY) |
1011 | mode = 2; /* play */ | 1023 | mode = 2; /* play */ |
1012 | if (state->is_fading || | 1024 | if (state->is_fading || |
1013 | (status == STATUS_PAUSE && !status_get_ffmode())) | 1025 | (status == STATUS_PAUSE && !status_get_ffmode())) |
1014 | mode = 3; /* pause */ | 1026 | mode = 3; /* pause */ |
1015 | else | 1027 | else |
@@ -1336,13 +1348,13 @@ const char *get_token_value(struct gui_wps *gwps, | |||
1336 | token->value.i)) | 1348 | token->value.i)) |
1337 | return "v"; | 1349 | return "v"; |
1338 | return NULL; | 1350 | return NULL; |
1339 | |||
1340 | case SKIN_TOKEN_LASTTOUCH: | 1351 | case SKIN_TOKEN_LASTTOUCH: |
1341 | { | 1352 | { |
1342 | #ifdef HAVE_TOUCHSCREEN | 1353 | #ifdef HAVE_TOUCHSCREEN |
1343 | unsigned int last_touch = touchscreen_last_touch(); | 1354 | unsigned int last_touch = touchscreen_last_touch(); |
1344 | char *skin_base = get_skin_buffer(data); | 1355 | char *skin_base = get_skin_buffer(data); |
1345 | struct touchregion_lastpress *data = SKINOFFSETTOPTR(skin_base, token->value.data); | 1356 | struct touchregion_lastpress *data = SKINOFFSETTOPTR(skin_base, token->value.data); |
1357 | if (!data) return NULL; | ||
1346 | struct touchregion *region = SKINOFFSETTOPTR(skin_base, data->region); | 1358 | struct touchregion *region = SKINOFFSETTOPTR(skin_base, data->region); |
1347 | if (region) | 1359 | if (region) |
1348 | last_touch = region->last_press; | 1360 | last_touch = region->last_press; |
@@ -1669,10 +1681,8 @@ const char *get_token_value(struct gui_wps *gwps, | |||
1669 | } | 1681 | } |
1670 | return NULL; | 1682 | return NULL; |
1671 | #endif | 1683 | #endif |
1672 | |||
1673 | default: | 1684 | default: |
1674 | return NULL; | 1685 | return NULL; |
1675 | } | 1686 | } |
1676 | } | ||
1677 | |||
1678 | 1687 | ||
1688 | } | ||
diff --git a/apps/gui/statusbar-skinned.c b/apps/gui/statusbar-skinned.c index f8e06c2b5d..9b10ad4dce 100644 --- a/apps/gui/statusbar-skinned.c +++ b/apps/gui/statusbar-skinned.c | |||
@@ -86,14 +86,15 @@ int sb_preproccess(enum screen_type screen, struct wps_data *data) | |||
86 | int sb_postproccess(enum screen_type screen, struct wps_data *data) | 86 | int sb_postproccess(enum screen_type screen, struct wps_data *data) |
87 | { | 87 | { |
88 | if (data->wps_loaded) | 88 | if (data->wps_loaded) |
89 | { | 89 | { |
90 | /* hide the sb's default viewport because it has nasty effect with stuff | 90 | /* hide the sb's default viewport because it has nasty effect with stuff |
91 | * not part of the statusbar, | 91 | * not part of the statusbar, |
92 | * hence .sbs's without any other vps are unsupported*/ | 92 | * hence .sbs's without any other vps are unsupported*/ |
93 | struct skin_viewport *vp = skin_find_item(VP_DEFAULT_LABEL_STRING, SKIN_FIND_VP, data); | 93 | struct skin_viewport *vp = skin_find_item(VP_DEFAULT_LABEL_STRING, SKIN_FIND_VP, data); |
94 | struct skin_element *tree = SKINOFFSETTOPTR(get_skin_buffer(data), data->tree); | 94 | struct skin_element *tree = SKINOFFSETTOPTR(get_skin_buffer(data), data->tree); |
95 | struct skin_element *next_vp = SKINOFFSETTOPTR(get_skin_buffer(data), tree->next); | 95 | struct skin_element *next_vp = NULL; |
96 | 96 | if (tree) next_vp = SKINOFFSETTOPTR(get_skin_buffer(data), tree->next); | |
97 | |||
97 | if (vp) | 98 | if (vp) |
98 | { | 99 | { |
99 | if (!next_vp) | 100 | if (!next_vp) |
@@ -132,9 +133,12 @@ struct viewport *sb_skin_get_info_vp(enum screen_type screen) | |||
132 | viewportmanager_theme_enable(screen, false, NULL); | 133 | viewportmanager_theme_enable(screen, false, NULL); |
133 | viewportmanager_theme_undo(screen, true); | 134 | viewportmanager_theme_undo(screen, true); |
134 | } | 135 | } |
135 | label = SKINOFFSETTOPTR(get_skin_buffer(data), infovp_label[screen]); | ||
136 | if (infovp_label[screen] == VP_DEFAULT_LABEL) | 136 | if (infovp_label[screen] == VP_DEFAULT_LABEL) |
137 | label = VP_DEFAULT_LABEL_STRING; | 137 | label = VP_DEFAULT_LABEL_STRING; |
138 | else | ||
139 | label = SKINOFFSETTOPTR(get_skin_buffer(data), infovp_label[screen]); | ||
140 | if (!label) | ||
141 | return NULL; | ||
138 | vp = skin_find_item(label, SKIN_FIND_UIVP, data); | 142 | vp = skin_find_item(label, SKIN_FIND_UIVP, data); |
139 | if (!vp) | 143 | if (!vp) |
140 | return NULL; | 144 | return NULL; |
diff --git a/apps/plugins/chessbox/chessbox_pgn.c b/apps/plugins/chessbox/chessbox_pgn.c index 40e88e500b..0d9da441b1 100644 --- a/apps/plugins/chessbox/chessbox_pgn.c +++ b/apps/plugins/chessbox/chessbox_pgn.c | |||
@@ -623,6 +623,7 @@ struct pgn_game_node* pgn_list_games(const char* filename){ | |||
623 | /* a new game header is found */ | 623 | /* a new game header is found */ |
624 | if (line_buffer[0] == '['){ | 624 | if (line_buffer[0] == '['){ |
625 | temp_node = (struct pgn_game_node *)pl_malloc(sizeof size_node); | 625 | temp_node = (struct pgn_game_node *)pl_malloc(sizeof size_node); |
626 | if (!temp_node) return NULL; | ||
626 | temp_node->next_node = NULL; | 627 | temp_node->next_node = NULL; |
627 | if (curr_node == NULL) { | 628 | if (curr_node == NULL) { |
628 | first_game = curr_node = temp_node; | 629 | first_game = curr_node = temp_node; |
@@ -773,9 +774,11 @@ void pgn_parse_game(const char* filename, | |||
773 | */ | 774 | */ |
774 | if (first_ply != NULL){ | 775 | if (first_ply != NULL){ |
775 | temp_ply = (struct pgn_ply_node *)pl_malloc(sizeof size_ply); | 776 | temp_ply = (struct pgn_ply_node *)pl_malloc(sizeof size_ply); |
776 | temp_ply->player = neutral; | 777 | if (temp_ply) { |
777 | temp_ply->prev_node = curr_node; | 778 | temp_ply->player = neutral; |
778 | curr_node->next_node = temp_ply; | 779 | temp_ply->prev_node = curr_node; |
780 | curr_node->next_node = temp_ply; | ||
781 | } | ||
779 | } | 782 | } |
780 | selected_game->first_ply = first_ply; | 783 | selected_game->first_ply = first_ply; |
781 | 784 | ||
@@ -793,6 +796,7 @@ struct pgn_game_node* pgn_init_game(void){ | |||
793 | 796 | ||
794 | /* create an "end of game" dummy ply and assign defaults */ | 797 | /* create an "end of game" dummy ply and assign defaults */ |
795 | ply = (struct pgn_ply_node *)pl_malloc(sizeof ply_size); | 798 | ply = (struct pgn_ply_node *)pl_malloc(sizeof ply_size); |
799 | if (!ply) return NULL; | ||
796 | ply->player = neutral; | 800 | ply->player = neutral; |
797 | ply->pgn_text[0] = '\0'; | 801 | ply->pgn_text[0] = '\0'; |
798 | ply->prev_node = NULL; | 802 | ply->prev_node = NULL; |
@@ -800,6 +804,8 @@ struct pgn_game_node* pgn_init_game(void){ | |||
800 | 804 | ||
801 | /* create the game and assign defaults */ | 805 | /* create the game and assign defaults */ |
802 | game = (struct pgn_game_node *)pl_malloc(sizeof game_size); | 806 | game = (struct pgn_game_node *)pl_malloc(sizeof game_size); |
807 | if (!game) return NULL; | ||
808 | |||
803 | game->game_number = 0; | 809 | game->game_number = 0; |
804 | rb->strcpy(game->white_player,"Player"); | 810 | rb->strcpy(game->white_player,"Player"); |
805 | rb->strcpy(game->black_player,"GnuChess"); | 811 | rb->strcpy(game->black_player,"GnuChess"); |
@@ -823,6 +829,7 @@ void pgn_append_ply(struct pgn_game_node* game, | |||
823 | struct pgn_ply_node ply_size, *ply, *temp; | 829 | struct pgn_ply_node ply_size, *ply, *temp; |
824 | 830 | ||
825 | ply = (struct pgn_ply_node *)pl_malloc(sizeof ply_size); | 831 | ply = (struct pgn_ply_node *)pl_malloc(sizeof ply_size); |
832 | if (!ply) return; | ||
826 | ply->player = ply_player; | 833 | ply->player = ply_player; |
827 | ply->column_from = move_buffer[0] - 'a'; | 834 | ply->column_from = move_buffer[0] - 'a'; |
828 | ply->row_from = move_buffer[1] - '1'; | 835 | ply->row_from = move_buffer[1] - '1'; |
@@ -847,6 +854,7 @@ void pgn_append_ply(struct pgn_game_node* game, | |||
847 | } else { | 854 | } else { |
848 | temp->prev_node->next_node = ply; | 855 | temp->prev_node->next_node = ply; |
849 | } | 856 | } |
857 | |||
850 | temp->prev_node = ply; | 858 | temp->prev_node = ply; |
851 | } | 859 | } |
852 | 860 | ||
diff --git a/apps/plugins/reversi/reversi-gui.c b/apps/plugins/reversi/reversi-gui.c index aca54a1ea3..74dd98b676 100644 --- a/apps/plugins/reversi/reversi-gui.c +++ b/apps/plugins/reversi/reversi-gui.c | |||
@@ -637,12 +637,13 @@ enum plugin_status plugin_start(const void *parameter) { | |||
637 | draw_screen = false; | 637 | draw_screen = false; |
638 | } | 638 | } |
639 | switch(cur_player) { | 639 | switch(cur_player) { |
640 | case BLACK: | ||
641 | cur_strategy = black_strategy; | ||
642 | break; | ||
643 | case WHITE: | 640 | case WHITE: |
644 | cur_strategy = white_strategy; | 641 | cur_strategy = white_strategy; |
645 | break; | 642 | break; |
643 | case BLACK: | ||
644 | default: | ||
645 | cur_strategy = black_strategy; | ||
646 | break; | ||
646 | } | 647 | } |
647 | 648 | ||
648 | if(cur_strategy->is_robot && !game_finished) { | 649 | if(cur_strategy->is_robot && !game_finished) { |