diff options
author | Jonathan Gordon <rockbox@jdgordon.info> | 2014-03-27 18:15:12 +1100 |
---|---|---|
committer | Jonathan Gordon <rockbox@jdgordon.info> | 2014-05-14 19:41:55 +1000 |
commit | 01cbb795e9a059238f0e39d44d279c1d52874e06 (patch) | |
tree | f1aca3081d170a3e5cc92ee4966b6698e1b20232 /apps | |
parent | 440ff9500bc74cc278e0b66f528cfdf624547240 (diff) | |
download | rockbox-01cbb795e9a059238f0e39d44d279c1d52874e06.tar.gz rockbox-01cbb795e9a059238f0e39d44d279c1d52874e06.zip |
don't load the same bmp image more than once in a skin
Change-Id: Ie38146a80bb356f40810f017c262b81edac69688
Diffstat (limited to 'apps')
-rw-r--r-- | apps/gui/skin_engine/skin_parser.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c index 57153ed602..cf90ff5eab 100644 --- a/apps/gui/skin_engine/skin_parser.c +++ b/apps/gui/skin_engine/skin_parser.c | |||
@@ -1826,7 +1826,7 @@ static bool load_skin_bitmaps(struct wps_data *wps_data, char *bmpdir) | |||
1826 | { | 1826 | { |
1827 | struct wps_token *token = SKINOFFSETTOPTR(skin_buffer, list->token); | 1827 | struct wps_token *token = SKINOFFSETTOPTR(skin_buffer, list->token); |
1828 | struct gui_img *img = (struct gui_img*)SKINOFFSETTOPTR(skin_buffer, token->value.data); | 1828 | struct gui_img *img = (struct gui_img*)SKINOFFSETTOPTR(skin_buffer, token->value.data); |
1829 | if (img->bm.data) | 1829 | if (!img->loaded) |
1830 | { | 1830 | { |
1831 | if (img->using_preloaded_icons) | 1831 | if (img->using_preloaded_icons) |
1832 | { | 1832 | { |
@@ -1835,10 +1835,30 @@ static bool load_skin_bitmaps(struct wps_data *wps_data, char *bmpdir) | |||
1835 | } | 1835 | } |
1836 | else | 1836 | else |
1837 | { | 1837 | { |
1838 | img->buflib_handle = load_skin_bmp(wps_data, &img->bm, bmpdir); | 1838 | char path[MAX_PATH]; |
1839 | int handle; | ||
1840 | strcpy(path, img->bm.data); | ||
1841 | handle = load_skin_bmp(wps_data, &img->bm, bmpdir); | ||
1842 | img->buflib_handle = handle; | ||
1839 | img->loaded = img->buflib_handle >= 0; | 1843 | img->loaded = img->buflib_handle >= 0; |
1840 | if (img->loaded) | 1844 | if (img->loaded) |
1845 | { | ||
1846 | struct skin_token_list *imglist = SKINOFFSETTOPTR(skin_buffer, list->next); | ||
1847 | |||
1841 | img->subimage_height = img->bm.height / img->num_subimages; | 1848 | img->subimage_height = img->bm.height / img->num_subimages; |
1849 | while (imglist) | ||
1850 | { | ||
1851 | token = SKINOFFSETTOPTR(skin_buffer, imglist->token); | ||
1852 | img = (struct gui_img*)SKINOFFSETTOPTR(skin_buffer, token->value.data); | ||
1853 | if (!strcmp(path, img->bm.data)) | ||
1854 | { | ||
1855 | img->loaded = true; | ||
1856 | img->buflib_handle = handle; | ||
1857 | img->subimage_height = img->bm.height / img->num_subimages; | ||
1858 | } | ||
1859 | imglist = SKINOFFSETTOPTR(skin_buffer, imglist->next); | ||
1860 | } | ||
1861 | } | ||
1842 | else | 1862 | else |
1843 | retval = false; | 1863 | retval = false; |
1844 | } | 1864 | } |