summaryrefslogtreecommitdiff
path: root/apps/gui/skin_engine/skin_render.c
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2012-05-16 22:28:59 +1000
committerJonathan Gordon <rockbox@jdgordon.info>2012-05-16 22:33:40 +1000
commit7909bf039f6e5984b5a037d3de69128f02408223 (patch)
treebbb8cf36a77b408b76247010258fcc3e9f4d654b /apps/gui/skin_engine/skin_render.c
parent027ebaf46330b8e7df1a09974ee16f644edccacb (diff)
downloadrockbox-7909bf039f6e5984b5a037d3de69128f02408223.tar.gz
rockbox-7909bf039f6e5984b5a037d3de69128f02408223.zip
(hopefully) Fix FS#12639 and other skin related buflib corruption issues.
Kudos to funman for figuring out the problem - skin_find_item() rather stupidly uses the global skin_buffer variable in skin_parser.c which is fine in the parser EXCEPT it gets changed in skin_render when the sbs is being redrawn while another skin is loading, so fix this by makeing skin_find_item() use a local data pointer so a skin_render() during parsing won't break anything. Change-Id: I80e1c0efe569c18225e5772159c18ebb21e07332
Diffstat (limited to 'apps/gui/skin_engine/skin_render.c')
-rw-r--r--apps/gui/skin_engine/skin_render.c4
1 files changed, 0 insertions, 4 deletions
diff --git a/apps/gui/skin_engine/skin_render.c b/apps/gui/skin_engine/skin_render.c
index 0f5e5fa106..bf7f03d738 100644
--- a/apps/gui/skin_engine/skin_render.c
+++ b/apps/gui/skin_engine/skin_render.c
@@ -84,8 +84,6 @@ static void skin_render_playlistviewer(struct playlistviewer* viewer,
84#endif 84#endif
85 85
86static char* skin_buffer; 86static char* skin_buffer;
87/* hack alert: fix skin_parser.c's skin_buffer pointer */
88void skinparser_set_buffer(char* pointer);
89 87
90static inline struct skin_element* 88static inline struct skin_element*
91get_child(OFFSETTYPE(struct skin_element**) children, int child) 89get_child(OFFSETTYPE(struct skin_element**) children, int child)
@@ -720,7 +718,6 @@ void skin_render_viewport(struct skin_element* viewport, struct gui_wps *gwps,
720 struct align_pos * align = &info.align; 718 struct align_pos * align = &info.align;
721 bool needs_update; 719 bool needs_update;
722 skin_buffer = get_skin_buffer(gwps->data); 720 skin_buffer = get_skin_buffer(gwps->data);
723 skinparser_set_buffer(skin_buffer);
724#ifdef HAVE_LCD_BITMAP 721#ifdef HAVE_LCD_BITMAP
725 /* Set images to not to be displayed */ 722 /* Set images to not to be displayed */
726 struct skin_token_list *imglist = SKINOFFSETTOPTR(skin_buffer, gwps->data->images); 723 struct skin_token_list *imglist = SKINOFFSETTOPTR(skin_buffer, gwps->data->images);
@@ -805,7 +802,6 @@ void skin_render(struct gui_wps *gwps, unsigned refresh_mode)
805 802
806 int old_refresh_mode = refresh_mode; 803 int old_refresh_mode = refresh_mode;
807 skin_buffer = get_skin_buffer(gwps->data); 804 skin_buffer = get_skin_buffer(gwps->data);
808 skinparser_set_buffer(skin_buffer);
809 805
810#ifdef HAVE_LCD_CHARCELLS 806#ifdef HAVE_LCD_CHARCELLS
811 int i; 807 int i;