diff options
author | Tomer Shalev <shalev.tomer@gmail.com> | 2009-10-19 20:06:51 +0000 |
---|---|---|
committer | Tomer Shalev <shalev.tomer@gmail.com> | 2009-10-19 20:06:51 +0000 |
commit | 9ea3da8fdaf14022848a837ef76b9f4db338f82b (patch) | |
tree | 7af744455ba3f7a14f9aecf8bd763957cd5b828d /apps | |
parent | c8fa54ecfaecfeb126d86e8ed5fa2713a1bc2c37 (diff) | |
download | rockbox-9ea3da8fdaf14022848a837ef76b9f4db338f82b.tar.gz rockbox-9ea3da8fdaf14022848a837ef76b9f4db338f82b.zip |
FS#10692 - Viewpority USB screen
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23269 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r-- | apps/screens.c | 197 |
1 files changed, 148 insertions, 49 deletions
diff --git a/apps/screens.c b/apps/screens.c index 6b0a05df89..bfc506d6b2 100644 --- a/apps/screens.c +++ b/apps/screens.c | |||
@@ -153,15 +153,138 @@ static int handle_usb_events(void) | |||
153 | } | 153 | } |
154 | #endif | 154 | #endif |
155 | 155 | ||
156 | #define MODE_NAME_LEN 32 | 156 | #ifdef USB_NONE |
157 | void usb_screen(void) | 157 | void usb_screen(void) |
158 | { | 158 | { |
159 | #ifdef USB_NONE | 159 | } |
160 | /* nothing here! */ | ||
161 | #else | 160 | #else |
161 | #define MODE_NAME_LEN 32 | ||
162 | |||
163 | struct usb_screen_vps_t | ||
164 | { | ||
165 | struct viewport parent; | ||
166 | #ifdef HAVE_LCD_BITMAP | ||
167 | struct viewport logo; | ||
168 | #ifdef USB_ENABLE_HID | ||
169 | struct viewport title; | ||
170 | #endif | ||
171 | #endif | ||
172 | }; | ||
173 | |||
174 | #ifdef HAVE_LCD_BITMAP | ||
175 | static void usb_screen_fix_viewports(struct screen *screen, | ||
176 | struct usb_screen_vps_t *usb_screen_vps) | ||
177 | { | ||
178 | int logo_width, logo_height; | ||
179 | struct viewport *parent = &usb_screen_vps->parent; | ||
180 | struct viewport *logo = &usb_screen_vps->logo; | ||
181 | |||
182 | #ifdef HAVE_REMOTE_LCD | ||
183 | if (screen->screen_type == SCREEN_REMOTE) | ||
184 | { | ||
185 | logo_width = BMPWIDTH_remote_usblogo; | ||
186 | logo_height = BMPHEIGHT_remote_usblogo; | ||
187 | } | ||
188 | else | ||
189 | #endif | ||
190 | { | ||
191 | logo_width = BMPWIDTH_usblogo; | ||
192 | logo_height = BMPHEIGHT_usblogo; | ||
193 | } | ||
194 | |||
195 | viewport_set_defaults(parent, screen->screen_type); | ||
196 | if (parent->width < logo_width || parent->height < logo_height) | ||
197 | viewport_set_fullscreen(parent, screen->screen_type); | ||
198 | |||
199 | *logo = *parent; | ||
200 | logo->x = parent->width - logo_width; | ||
201 | logo->y = (parent->height - logo_height) / 2; | ||
202 | logo->width = logo_width; | ||
203 | logo->height = logo_height; | ||
204 | |||
205 | #ifdef USB_ENABLE_HID | ||
206 | struct viewport *title = &usb_screen_vps->title; | ||
207 | int char_height, nb_lines; | ||
208 | |||
209 | /* nb_lines only returns the number of fully visible lines, small screens | ||
210 | or really large fonts could cause problems with the calculation below. | ||
211 | */ | ||
212 | nb_lines = viewport_get_nb_lines(parent); | ||
213 | if (nb_lines == 0) | ||
214 | nb_lines++; | ||
215 | |||
216 | char_height = parent->height/nb_lines; | ||
217 | |||
218 | *title = *parent; | ||
219 | title->y = logo->y + logo->height + char_height; | ||
220 | #endif | ||
221 | } | ||
222 | #endif | ||
223 | |||
224 | static void usb_screens_draw(struct usb_screen_vps_t *usb_screen_vps_ar) | ||
225 | { | ||
162 | int i; | 226 | int i; |
163 | int usb_bars = VP_SB_ALLSCREENS; /* force statusbars */ | 227 | int usb_bars = VP_SB_ALLSCREENS; /* force statusbars */ |
228 | |||
229 | FOR_NB_SCREENS(i) | ||
230 | { | ||
231 | struct screen *screen = &screens[i]; | ||
232 | |||
233 | struct usb_screen_vps_t *usb_screen_vps = &usb_screen_vps_ar[i]; | ||
234 | struct viewport *parent = &usb_screen_vps->parent; | ||
235 | #ifdef HAVE_LCD_BITMAP | ||
236 | struct viewport *logo = &usb_screen_vps->logo; | ||
237 | #endif | ||
238 | |||
239 | screen->set_viewport(parent); | ||
240 | screen->backdrop_show(BACKDROP_MAIN); | ||
241 | screen->backlight_on(); | ||
242 | screen->clear_viewport(); | ||
243 | |||
244 | #ifdef HAVE_LCD_BITMAP | ||
245 | screen->set_viewport(logo); | ||
246 | #ifdef HAVE_REMOTE_LCD | ||
247 | if (i == SCREEN_REMOTE) | ||
248 | { | ||
249 | screen->bitmap(remote_usblogo, 0, 0, logo->width, | ||
250 | logo->height); | ||
251 | } | ||
252 | else | ||
253 | #endif | ||
254 | { | ||
255 | screen->transparent_bitmap(usblogo, 0, 0, logo->width, | ||
256 | logo->height); | ||
257 | #ifdef USB_ENABLE_HID | ||
258 | screen->set_viewport(&usb_screen_vps->title); | ||
259 | usb_screen_vps->title.flags |= VP_FLAG_ALIGN_CENTER; | ||
260 | screen->puts_scroll(0, 0, str(keypad_mode_name_get())); | ||
261 | #endif /* USB_ENABLE_HID */ | ||
262 | } | ||
263 | screen->set_viewport(parent); | ||
264 | |||
265 | #else /* HAVE_LCD_BITMAP */ | ||
266 | screen->double_height(false); | ||
267 | screen->puts_scroll(0, 0, "[USB Mode]"); | ||
268 | status_set_param(false); | ||
269 | status_set_audio(false); | ||
270 | status_set_usb(true); | ||
271 | #endif /* HAVE_LCD_BITMAP */ | ||
272 | |||
273 | screen->update_viewport(); | ||
274 | screen->set_viewport(NULL); | ||
275 | |||
276 | /* force statusbar by ignoring the setting */ | ||
277 | usb_bars |= VP_SB_IGNORE_SETTING(i); | ||
278 | } | ||
279 | |||
280 | viewportmanager_set_statusbar(usb_bars); | ||
281 | } | ||
282 | |||
283 | void usb_screen(void) | ||
284 | { | ||
285 | int i; | ||
164 | int old_bars = viewportmanager_get_statusbar(); | 286 | int old_bars = viewportmanager_get_statusbar(); |
287 | struct usb_screen_vps_t usb_screen_vps_ar[NB_SCREENS]; | ||
165 | #if defined HAVE_TOUCHSCREEN | 288 | #if defined HAVE_TOUCHSCREEN |
166 | enum touchscreen_mode old_mode = touchscreen_get_mode(); | 289 | enum touchscreen_mode old_mode = touchscreen_get_mode(); |
167 | 290 | ||
@@ -178,55 +301,19 @@ void usb_screen(void) | |||
178 | usb_keypad_mode = global_settings.usb_keypad_mode; | 301 | usb_keypad_mode = global_settings.usb_keypad_mode; |
179 | #endif | 302 | #endif |
180 | 303 | ||
181 | while (1) | 304 | FOR_NB_SCREENS(i) |
182 | { | 305 | { |
183 | FOR_NB_SCREENS(i) | 306 | struct screen *screen = &screens[i]; |
184 | { | ||
185 | struct screen *screen = &screens[i]; | ||
186 | 307 | ||
187 | screen->backdrop_show(BACKDROP_MAIN); | 308 | screen->set_viewport(NULL); |
188 | screen->backlight_on(); | ||
189 | screen->clear_display(); | ||
190 | #ifdef HAVE_REMOTE_LCD | ||
191 | if (i == SCREEN_REMOTE) | ||
192 | { | ||
193 | screen->bitmap(remote_usblogo, | ||
194 | (LCD_REMOTE_WIDTH-BMPWIDTH_remote_usblogo), | ||
195 | (LCD_REMOTE_HEIGHT-BMPHEIGHT_remote_usblogo)/2, | ||
196 | BMPWIDTH_remote_usblogo, BMPHEIGHT_remote_usblogo); | ||
197 | } | ||
198 | else | ||
199 | #endif | ||
200 | { | ||
201 | #ifdef HAVE_LCD_BITMAP | 309 | #ifdef HAVE_LCD_BITMAP |
202 | screen->transparent_bitmap(usblogo, | 310 | usb_screen_fix_viewports(screen, &usb_screen_vps_ar[i]); |
203 | (LCD_WIDTH-BMPWIDTH_usblogo), | 311 | #endif |
204 | (LCD_HEIGHT-BMPHEIGHT_usblogo)/2, | 312 | } |
205 | BMPWIDTH_usblogo, BMPHEIGHT_usblogo); | ||
206 | #ifdef USB_ENABLE_HID | ||
207 | int w, h; | ||
208 | |||
209 | screen->getstringsize(str(keypad_mode_name_get()), &w, &h); | ||
210 | screen->putsxy((LCD_WIDTH - w) / 2, BMPHEIGHT_usblogo + | ||
211 | (LCD_HEIGHT - BMPHEIGHT_usblogo + h) / 2, | ||
212 | str(keypad_mode_name_get())); | ||
213 | #endif /* USB_ENABLE_HID */ | ||
214 | #else /* HAVE_LCD_BITMAP */ | ||
215 | screen->double_height(false); | ||
216 | screen->puts_scroll(0, 0, "[USB Mode]"); | ||
217 | status_set_param(false); | ||
218 | status_set_audio(false); | ||
219 | status_set_usb(true); | ||
220 | #endif /* HAVE_LCD_BITMAP */ | ||
221 | } | ||
222 | screen->update(); | ||
223 | |||
224 | /* force statusbar by ignoring the setting */ | ||
225 | usb_bars |= VP_SB_IGNORE_SETTING(i); | ||
226 | } | ||
227 | |||
228 | viewportmanager_set_statusbar(usb_bars); | ||
229 | 313 | ||
314 | while (1) | ||
315 | { | ||
316 | usb_screens_draw(usb_screen_vps_ar); | ||
230 | #ifdef SIMULATOR | 317 | #ifdef SIMULATOR |
231 | if (button_get_w_tmo(HZ/2)) | 318 | if (button_get_w_tmo(HZ/2)) |
232 | break; | 319 | break; |
@@ -237,6 +324,18 @@ void usb_screen(void) | |||
237 | #endif /* SIMULATOR */ | 324 | #endif /* SIMULATOR */ |
238 | } | 325 | } |
239 | 326 | ||
327 | FOR_NB_SCREENS(i) | ||
328 | { | ||
329 | const struct viewport* vp = NULL; | ||
330 | |||
331 | #if defined(HAVE_LCD_BITMAP) && defined(USB_ENABLE_HID) | ||
332 | vp = &usb_screen_vps_ar[i].title; | ||
333 | #elif !defined(HAVE_LCD_BITMAP) | ||
334 | vp = &usb_screen_vps_ar[i].parent; | ||
335 | #endif | ||
336 | if (vp) | ||
337 | screens[i].scroll_stop(vp); | ||
338 | } | ||
240 | #ifdef USB_ENABLE_HID | 339 | #ifdef USB_ENABLE_HID |
241 | if (global_settings.usb_keypad_mode != usb_keypad_mode) | 340 | if (global_settings.usb_keypad_mode != usb_keypad_mode) |
242 | { | 341 | { |
@@ -259,8 +358,8 @@ void usb_screen(void) | |||
259 | viewportmanager_set_statusbar(old_bars); | 358 | viewportmanager_set_statusbar(old_bars); |
260 | send_event(GUI_EVENT_REFRESH, NULL); | 359 | send_event(GUI_EVENT_REFRESH, NULL); |
261 | 360 | ||
262 | #endif /* USB_NONE */ | ||
263 | } | 361 | } |
362 | #endif /* !defined(USB_NONE) */ | ||
264 | 363 | ||
265 | #if (CONFIG_STORAGE & STORAGE_MMC) | 364 | #if (CONFIG_STORAGE & STORAGE_MMC) |
266 | int mmc_remove_request(void) | 365 | int mmc_remove_request(void) |