1 /***************************************************************************
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
10 * Copyright (C) 2010 Jonathan Gordon
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.
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
20 ****************************************************************************/
25 #include "string-extra.h"
27 #include "wps_internals.h"
28 #include "skin_engine.h"
29 #include "skin_buffer.h"
31 #if (LCD_DEPTH > 1) || (defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1))
33 #define NB_BDROPS SKINNABLE_SCREENS_COUNT*NB_SCREENS
34 static struct skin_backdrop
{
37 enum screen_type screen
;
39 } backdrops
[NB_BDROPS
];
41 #define NB_BDROPS SKINNABLE_SCREENS_COUNT*NB_SCREENS
43 void skin_backdrop_init(void)
46 for (i
=0; i
<NB_BDROPS
; i
++)
48 backdrops
[i
].name
[0] = '\0';
49 backdrops
[i
].buffer
= NULL
;
50 backdrops
[i
].loaded
= false;
54 int skin_backdrop_assign(char* backdrop
, char *bmpdir
,
55 enum screen_type screen
)
57 char filename
[MAX_PATH
];
61 if (backdrop
[0] == '-')
65 filename
[2] = '\0'; /* we check this later to see if we actually have an
66 image to load. != '\0' means display the image */
70 get_image_filename(backdrop
, bmpdir
, filename
, sizeof(filename
));
72 for (i
=0; i
<NB_BDROPS
; i
++)
74 if (!backdrops
[i
].name
[0] && free
< 0)
76 if (!strcmp(backdrops
[i
].name
, filename
) && backdrops
[i
].screen
== screen
)
85 strlcpy(backdrops
[free
].name
, filename
,
86 sizeof (backdrops
[free
].name
));
87 backdrops
[free
].buffer
= NULL
;
88 backdrops
[free
].screen
= screen
;
94 bool skin_backdrops_preload(void)
99 for (i
=0; i
<NB_BDROPS
; i
++)
101 if (backdrops
[i
].name
[0] && !backdrops
[i
].buffer
)
104 enum screen_type screen
= backdrops
[i
].screen
;
105 #if defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1)
106 if (screen
== SCREEN_REMOTE
)
107 buf_size
= REMOTE_LCD_BACKDROP_BYTES
;
110 buf_size
= LCD_BACKDROP_BYTES
;
112 filename
= backdrops
[i
].name
;
113 if (screen
== SCREEN_MAIN
&& global_settings
.backdrop_file
[0] &&
114 global_settings
.backdrop_file
[0] != '-' && filename
[0] == '-')
116 char* temp
= filename
+2; /* slightly hacky to get a buffer */
117 size_t size
= sizeof(backdrops
[i
].name
) - 2;
118 snprintf(temp
, size
, BACKDROP_DIR
"/%s.bmp", global_settings
.backdrop_file
);
121 if (*filename
&& *filename
!= '-')
123 backdrops
[i
].buffer
= (char*)skin_buffer_alloc(buf_size
);
124 backdrops
[i
].loaded
= backdrops
[i
].buffer
&&
125 screens
[screen
].backdrop_load(filename
, backdrops
[i
].buffer
);
126 if (!backdrops
[i
].loaded
)
129 if (backdrops
[i
].name
[0] == '-' && backdrops
[i
].loaded
)
130 backdrops
[i
].name
[2] = '.';
136 void skin_backdrop_show(int backdrop_id
)
140 enum screen_type screen
= backdrops
[backdrop_id
].screen
;
141 if ((backdrops
[backdrop_id
].loaded
== false) ||
142 (backdrops
[backdrop_id
].name
[0] == '-' &&
143 backdrops
[backdrop_id
].name
[2] == '\0'))
145 screens
[screen
].backdrop_show(NULL
);
147 else if (backdrops
[backdrop_id
].buffer
)
148 screens
[screen
].backdrop_show(backdrops
[backdrop_id
].buffer
);
151 void skin_backdrop_unload(int backdrop_id
)
153 backdrops
[backdrop_id
].buffer
= NULL
;
156 void skin_backdrop_load_setting(void)
159 char filename
[MAX_PATH
];
160 for(i
=0;i
<SKINNABLE_SCREENS_COUNT
*NB_SCREENS
;i
++)
162 if (backdrops
[i
].name
[0] == '-' && backdrops
[i
].screen
== SCREEN_MAIN
)
164 if (global_settings
.backdrop_file
[0] &&
165 global_settings
.backdrop_file
[0] != '-')
167 if (!backdrops
[i
].buffer
)
168 backdrops
[i
].buffer
= (char*)skin_buffer_alloc(LCD_BACKDROP_BYTES
);
169 snprintf(filename
, sizeof filename
, BACKDROP_DIR
"/%s.bmp",
170 global_settings
.backdrop_file
);
171 bool loaded
= backdrops
[i
].buffer
&&
172 screens
[SCREEN_MAIN
].backdrop_load(filename
,
173 backdrops
[i
].buffer
);
174 backdrops
[i
].name
[2] = loaded
? '.' : '\0';
178 backdrops
[i
].name
[2] = '\0';
181 else if (backdrops
[i
].name
[0] == '-')
183 backdrops
[i
].name
[2] = '\0';
192 void skin_backdrop_init(void)