summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/SOURCES1
-rw-r--r--apps/gui/skin_engine/skin_backdrops.c119
-rw-r--r--apps/gui/skin_engine/skin_engine.h6
-rw-r--r--apps/gui/skin_engine/skin_parser.c43
-rw-r--r--apps/gui/skin_engine/wps_internals.h3
-rw-r--r--apps/settings.c1
6 files changed, 132 insertions, 41 deletions
diff --git a/apps/SOURCES b/apps/SOURCES
index cd7cde7639..d86bb11fab 100644
--- a/apps/SOURCES
+++ b/apps/SOURCES
@@ -87,6 +87,7 @@ gui/statusbar-skinned.c
87gui/yesno.c 87gui/yesno.c
88gui/viewport.c 88gui/viewport.c
89 89
90gui/skin_engine/skin_backdrops.c
90gui/skin_engine/skin_buffer.c 91gui/skin_engine/skin_buffer.c
91gui/skin_engine/wps_debug.c 92gui/skin_engine/wps_debug.c
92gui/skin_engine/skin_display.c 93gui/skin_engine/skin_display.c
diff --git a/apps/gui/skin_engine/skin_backdrops.c b/apps/gui/skin_engine/skin_backdrops.c
new file mode 100644
index 0000000000..b057935241
--- /dev/null
+++ b/apps/gui/skin_engine/skin_backdrops.c
@@ -0,0 +1,119 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id: skin_tokens.c 24526 2010-02-05 23:58:53Z jdgordon $
9 *
10 * Copyright (C) 2010 Jonathan Gordon
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
16 *
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
19 *
20 ****************************************************************************/
21
22#include "config.h"
23#include <stdio.h>
24#include <string.h>
25#include <stdlib.h>
26
27#include "settings.h"
28#include "skin_buffer.h"
29#include "wps_internals.h"
30#include "skin_engine.h"
31
32#if (LCD_DEPTH > 1) || (defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1))
33
34static struct skin_backdrop {
35 char name[MAX_FILENAME+1];
36 char *buffer;
37 enum screen_type screen;
38} backdrops[SKINNABLE_SCREENS_COUNT*NB_SCREENS];
39
40void skin_backdrop_init(void)
41{
42 int i;
43 for(i=0;i<SKINNABLE_SCREENS_COUNT*NB_SCREENS;i++)
44 {
45 backdrops[i].name[0] = '\0';
46 backdrops[i].buffer = NULL;
47 }
48}
49
50/* load a backdrop into the skin buffer.
51 * reuse buffers if the file is already loaded */
52char* skin_backdrop_load(char* backdrop, char *bmpdir, enum screen_type screen)
53{
54 int i;
55 struct skin_backdrop *bdrop = NULL;
56 char filename[MAX_PATH];
57 size_t buf_size;
58 bool loaded = false;
59#if defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1)
60 if (screen == SCREEN_REMOTE)
61 buf_size = REMOTE_LCD_BACKDROP_BYTES;
62 else
63#endif
64 buf_size = LCD_BACKDROP_BYTES;
65
66 if (backdrop[0] == '-')
67 {
68#if NB_SCREENS > 1
69 if (screen == SCREEN_REMOTE)
70 {
71 return NULL; /* remotes don't have a backdrop setting (yet!) */
72 }
73 else
74#endif
75 {
76 if (!global_settings.backdrop_file[0])
77 {
78 return NULL; /* backdrop setting not set */
79 }
80 snprintf(filename, sizeof(filename), "%s/%s.bmp",
81 BACKDROP_DIR, global_settings.backdrop_file);
82 }
83 }
84 else
85 {
86 get_image_filename(backdrop, bmpdir, filename, sizeof(filename));
87 }
88
89 for(i=0;i<SKINNABLE_SCREENS_COUNT*NB_SCREENS;i++)
90 {
91 if (!strcmp(backdrops[i].name, backdrop) && backdrops[i].screen == screen)
92 {
93 return backdrops[i].buffer;
94 }
95 else if (backdrops[i].buffer == NULL)
96 {
97 bdrop = &backdrops[i];
98 }
99 }
100 if (!bdrop)
101 return NULL; /* too many backdrops loaded */
102
103 bdrop->buffer = skin_buffer_alloc(buf_size);
104 if (!bdrop->buffer)
105 return NULL;
106 loaded = screens[screen].backdrop_load(filename, bdrop->buffer);
107 bdrop->screen = screen;
108 strlcpy(bdrop->name, backdrop, MAX_FILENAME+1);
109 bdrop->name[MAX_FILENAME] = '\0';
110
111 return loaded ? bdrop->buffer : NULL;
112}
113#else
114
115void skin_backdrop_init(void)
116{
117}
118#endif
119
diff --git a/apps/gui/skin_engine/skin_engine.h b/apps/gui/skin_engine/skin_engine.h
index c5afe3e9f5..642f15aaad 100644
--- a/apps/gui/skin_engine/skin_engine.h
+++ b/apps/gui/skin_engine/skin_engine.h
@@ -60,4 +60,10 @@ void skin_data_init(struct wps_data *wps_data);
60 60
61/* call this in statusbar toggle handlers if needed */ 61/* call this in statusbar toggle handlers if needed */
62void skin_statusbar_changed(struct gui_wps*); 62void skin_statusbar_changed(struct gui_wps*);
63
64
65/* load a backdrop into the skin buffer.
66 * reuse buffers if the file is already loaded */
67char* skin_backdrop_load(char* backdrop, char *bmpdir, enum screen_type screen);
68void skin_backdrop_init(void);
63#endif 69#endif
diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c
index 034ff532f0..fe68c7c57e 100644
--- a/apps/gui/skin_engine/skin_parser.c
+++ b/apps/gui/skin_engine/skin_parser.c
@@ -567,7 +567,7 @@ static int get_image_id(int c)
567 return -1; 567 return -1;
568} 568}
569 569
570static char *get_image_filename(const char *start, const char* bmpdir, 570char *get_image_filename(const char *start, const char* bmpdir,
571 char *buf, int buf_size) 571 char *buf, int buf_size)
572{ 572{
573 const char *end = strchr(start, '|'); 573 const char *end = strchr(start, '|');
@@ -2045,45 +2045,8 @@ static bool load_skin_bitmaps(struct wps_data *wps_data, char *bmpdir)
2045 */ 2045 */
2046 if (wps_data->backdrop) 2046 if (wps_data->backdrop)
2047 { 2047 {
2048 char img_path[MAX_PATH]; 2048 wps_data->backdrop = skin_backdrop_load(wps_data->backdrop,
2049 bool loaded = false; 2049 bmpdir, curr_screen);
2050 size_t buf_size;
2051#if defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1)
2052 if (curr_screen == SCREEN_REMOTE)
2053 buf_size = REMOTE_LCD_BACKDROP_BYTES;
2054 else
2055#endif
2056 buf_size = LCD_BACKDROP_BYTES;
2057 if (wps_data->backdrop[0] == '-')
2058 {
2059#if NB_SCREENS > 1
2060 if (curr_screen == SCREEN_REMOTE)
2061 {
2062 wps_data->backdrop = NULL;
2063 return true;
2064 }
2065 else
2066#endif
2067 {
2068 if (!global_settings.backdrop_file[0])
2069 {
2070 wps_data->backdrop = NULL;
2071 return true;
2072 }
2073 snprintf(img_path, sizeof(img_path), "%s/%s.bmp",
2074 BACKDROP_DIR, global_settings.backdrop_file);
2075 }
2076 }
2077 else
2078 {
2079 get_image_filename(wps_data->backdrop, bmpdir,
2080 img_path, sizeof(img_path));
2081 }
2082 char *buffer = skin_buffer_alloc(buf_size);
2083 if (!buffer)
2084 return false;
2085 loaded = screens[curr_screen].backdrop_load(img_path, buffer);
2086 wps_data->backdrop = loaded ? buffer : NULL;
2087 } 2050 }
2088#endif /* has backdrop support */ 2051#endif /* has backdrop support */
2089 2052
diff --git a/apps/gui/skin_engine/wps_internals.h b/apps/gui/skin_engine/wps_internals.h
index e659f08d35..04a295a449 100644
--- a/apps/gui/skin_engine/wps_internals.h
+++ b/apps/gui/skin_engine/wps_internals.h
@@ -353,7 +353,8 @@ struct gui_wps
353 353
354/* gui_wps end */ 354/* gui_wps end */
355 355
356 356char *get_image_filename(const char *start, const char* bmpdir,
357 char *buf, int buf_size);
357/***** wps_tokens.c ******/ 358/***** wps_tokens.c ******/
358 359
359const char *get_token_value(struct gui_wps *gwps, 360const char *get_token_value(struct gui_wps *gwps,
diff --git a/apps/settings.c b/apps/settings.c
index 574aa27159..536e5e90ee 100644
--- a/apps/settings.c
+++ b/apps/settings.c
@@ -741,6 +741,7 @@ void settings_apply_skins(void)
741 /* re-initialize the skin buffer before we start reloading skins */ 741 /* re-initialize the skin buffer before we start reloading skins */
742 skin_buffer_init(); 742 skin_buffer_init();
743#ifdef HAVE_LCD_BITMAP 743#ifdef HAVE_LCD_BITMAP
744 skin_backdrop_init();
744 skin_font_init(); 745 skin_font_init();
745 if ( global_settings.sbs_file[0] && 746 if ( global_settings.sbs_file[0] &&
746 global_settings.sbs_file[0] != 0xff ) 747 global_settings.sbs_file[0] != 0xff )