mirror of
https://github.com/Rockbox/rockbox.git
synced 2026-07-10 13:29:52 -04:00
gui: usb_screen: drawing adjustments
- Eliminate separate display update for USB screen UI vp; wait for skin_render instead - Eliminate outer loop around handle_usb_events - Use handle_usb_events in Simulator as well. Fixes USB screen being dismissed by any button presses, or by system events. - When USB keypad mode is changed, only redraw the title viewport - Delete unused MODE_NAME_LEN #define - Hide "USB keypad mode:" prefix. Only display current mode setting, which requires less scrolling and ensures that the new setting is always visible immediately after it has been changed - Change comment from: /* Don't return until we get SYS_USB_DISCONNECTED or SYS_TIMEOUT */ to: /* Don't return until we get SYS_USB_DISCONNECTED */ which reflects existing behavior (comment may have been copy-pasted from usb_wait_for_disconnect_w_tmo) - Don't scroll USB keypad mode unless UI vp's width is > 1, since some themes try to hide the USB viewport and display a custom UI instead Change-Id: I9b9703025b00ad807920ee60a843f269f414f6f9
This commit is contained in:
parent
69b6c97e58
commit
13a0e58b1c
1 changed files with 53 additions and 95 deletions
|
|
@ -53,55 +53,63 @@
|
||||||
#include "ata_mmc.h"
|
#include "ata_mmc.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USB_ENABLE_HID
|
struct usb_screen_vps_t
|
||||||
int usb_keypad_mode;
|
|
||||||
static bool usb_hid;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef SIMULATOR
|
|
||||||
|
|
||||||
static int handle_usb_events(void)
|
|
||||||
{
|
{
|
||||||
#if (CONFIG_STORAGE & STORAGE_MMC)
|
struct viewport parent;
|
||||||
int next_update=0;
|
struct viewport logo;
|
||||||
#endif /* STORAGE_MMC */
|
#ifndef USB_ENABLE_HID
|
||||||
|
};
|
||||||
|
#else
|
||||||
|
struct viewport title;
|
||||||
|
};
|
||||||
|
|
||||||
/* Don't return until we get SYS_USB_DISCONNECTED or SYS_TIMEOUT */
|
int usb_keypad_mode;
|
||||||
|
static void draw_usb_keypad_mode(struct viewport *title)
|
||||||
|
{
|
||||||
|
struct screen *screen = &screens[SCREEN_MAIN];
|
||||||
|
struct viewport *last_vp = screen->set_viewport(title);
|
||||||
|
screen->clear_viewport();
|
||||||
|
title->flags |= VP_FLAG_ALIGN_CENTER;
|
||||||
|
if (title->width > 1)
|
||||||
|
screen->puts_scroll(0, 0, str(keypad_mode_name_get(usb_keypad_mode)));
|
||||||
|
screen->set_viewport(last_vp);
|
||||||
|
}
|
||||||
|
#endif /* USB_ENABLE_HID */
|
||||||
|
|
||||||
|
static void handle_usb_events(struct viewport *title)
|
||||||
|
{
|
||||||
|
#if (CONFIG_STORAGE & STORAGE_MMC) && !defined(SIMULATOR)
|
||||||
|
int next_update = 0;
|
||||||
|
#endif /* STORAGE_MMC */
|
||||||
|
int button;
|
||||||
|
|
||||||
|
/* Don't return until we get SYS_USB_DISCONNECTED */
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
int button;
|
#ifndef USB_ENABLE_HID
|
||||||
#ifdef USB_ENABLE_HID
|
(void)title;
|
||||||
if (usb_hid)
|
#else
|
||||||
|
if (global_settings.usb_hid)
|
||||||
{
|
{
|
||||||
button = get_hid_usb_action();
|
button = get_hid_usb_action();
|
||||||
|
|
||||||
/* On mode change, we need to refresh the screen */
|
|
||||||
if (button == ACTION_USB_HID_MODE_SWITCH_NEXT ||
|
if (button == ACTION_USB_HID_MODE_SWITCH_NEXT ||
|
||||||
button == ACTION_USB_HID_MODE_SWITCH_PREV)
|
button == ACTION_USB_HID_MODE_SWITCH_PREV)
|
||||||
{
|
draw_usb_keypad_mode(title);
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
button = button_get_w_tmo(HZ/2);
|
|
||||||
/* hid emits the event in get_action */
|
/* hid emits the event in get_action */
|
||||||
send_event(GUI_EVENT_ACTIONUPDATE, NULL);
|
send_event(GUI_EVENT_ACTIONUPDATE, NULL);
|
||||||
|
button = button_get_w_tmo(HZ/2);
|
||||||
}
|
}
|
||||||
|
if (button == SYS_USB_DISCONNECTED)
|
||||||
|
return;
|
||||||
|
if (button == SYS_CHARGER_DISCONNECTED)
|
||||||
|
reset_runtime();
|
||||||
|
|
||||||
switch(button)
|
/* USB-MMC bridge can report activity */
|
||||||
{
|
#if (CONFIG_STORAGE & STORAGE_MMC) && !defined(SIMULATOR)
|
||||||
case SYS_USB_DISCONNECTED:
|
|
||||||
return 1;
|
|
||||||
case SYS_CHARGER_DISCONNECTED:
|
|
||||||
reset_runtime();
|
|
||||||
break;
|
|
||||||
case SYS_TIMEOUT:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if (CONFIG_STORAGE & STORAGE_MMC) /* USB-MMC bridge can report activity */
|
|
||||||
if(TIME_AFTER(current_tick,next_update))
|
if(TIME_AFTER(current_tick,next_update))
|
||||||
{
|
{
|
||||||
if(usb_inserted()) {
|
if(usb_inserted()) {
|
||||||
|
|
@ -111,21 +119,7 @@ static int handle_usb_events(void)
|
||||||
}
|
}
|
||||||
#endif /* STORAGE_MMC */
|
#endif /* STORAGE_MMC */
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
#endif /* SIMULATOR */
|
|
||||||
|
|
||||||
#define MODE_NAME_LEN 32
|
|
||||||
|
|
||||||
struct usb_screen_vps_t
|
|
||||||
{
|
|
||||||
struct viewport parent;
|
|
||||||
struct viewport logo;
|
|
||||||
#ifdef USB_ENABLE_HID
|
|
||||||
struct viewport title;
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
static void usb_screen_fix_viewports(struct screen *screen,
|
static void usb_screen_fix_viewports(struct screen *screen,
|
||||||
struct usb_screen_vps_t *usb_screen_vps)
|
struct usb_screen_vps_t *usb_screen_vps)
|
||||||
|
|
@ -178,7 +172,7 @@ static void usb_screen_fix_viewports(struct screen *screen,
|
||||||
logo->height = logo_height;
|
logo->height = logo_height;
|
||||||
|
|
||||||
#ifdef USB_ENABLE_HID
|
#ifdef USB_ENABLE_HID
|
||||||
if (usb_hid)
|
if (global_settings.usb_hid)
|
||||||
{
|
{
|
||||||
struct viewport *title = &usb_screen_vps->title;
|
struct viewport *title = &usb_screen_vps->title;
|
||||||
int char_height = font_get(parent->font)->height;
|
int char_height = font_get(parent->font)->height;
|
||||||
|
|
@ -211,11 +205,9 @@ static void usb_screens_draw(struct usb_screen_vps_t *usb_screen_vps_ar)
|
||||||
&bm_remote_usblogo,
|
&bm_remote_usblogo,
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
FOR_NB_SCREENS(i)
|
FOR_NB_SCREENS(i)
|
||||||
{
|
{
|
||||||
struct screen *screen = &screens[i];
|
struct screen *screen = &screens[i];
|
||||||
|
|
||||||
struct usb_screen_vps_t *usb_screen_vps = &usb_screen_vps_ar[i];
|
struct usb_screen_vps_t *usb_screen_vps = &usb_screen_vps_ar[i];
|
||||||
struct viewport *parent = &usb_screen_vps->parent;
|
struct viewport *parent = &usb_screen_vps->parent;
|
||||||
struct viewport *logo = &usb_screen_vps->logo;
|
struct viewport *logo = &usb_screen_vps->logo;
|
||||||
|
|
@ -223,29 +215,14 @@ static void usb_screens_draw(struct usb_screen_vps_t *usb_screen_vps_ar)
|
||||||
last_vp = screen->set_viewport(parent);
|
last_vp = screen->set_viewport(parent);
|
||||||
screen->clear_viewport();
|
screen->clear_viewport();
|
||||||
screen->backlight_on();
|
screen->backlight_on();
|
||||||
|
|
||||||
screen->set_viewport(logo);
|
screen->set_viewport(logo);
|
||||||
screen->bmp(logos[i], 0, 0);
|
screen->bmp(logos[i], 0, 0);
|
||||||
if (i == SCREEN_MAIN)
|
|
||||||
{
|
|
||||||
#ifdef USB_ENABLE_HID
|
|
||||||
if (usb_hid)
|
|
||||||
{
|
|
||||||
char modestring[100];
|
|
||||||
screen->set_viewport(&usb_screen_vps->title);
|
|
||||||
usb_screen_vps->title.flags |= VP_FLAG_ALIGN_CENTER;
|
|
||||||
snprintf(modestring, sizeof(modestring), "%s: %s",
|
|
||||||
str(LANG_USB_KEYPAD_MODE),
|
|
||||||
str(keypad_mode_name_get(usb_keypad_mode)));
|
|
||||||
screen->puts_scroll(0, 0, modestring);
|
|
||||||
}
|
|
||||||
#endif /* USB_ENABLE_HID */
|
|
||||||
}
|
|
||||||
screen->set_viewport(parent);
|
|
||||||
|
|
||||||
screen->set_viewport(last_vp);
|
screen->set_viewport(last_vp);
|
||||||
screen->update_viewport();
|
|
||||||
}
|
}
|
||||||
|
#ifdef USB_ENABLE_HID
|
||||||
|
if (global_settings.usb_hid)
|
||||||
|
draw_usb_keypad_mode(&usb_screen_vps_ar[SCREEN_MAIN].title);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void gui_usb_screen_run(bool early_usb, intptr_t seqnum)
|
void gui_usb_screen_run(bool early_usb, intptr_t seqnum)
|
||||||
|
|
@ -258,6 +235,7 @@ void gui_usb_screen_run(bool early_usb, intptr_t seqnum)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct usb_screen_vps_t usb_screen_vps_ar[NB_SCREENS];
|
struct usb_screen_vps_t usb_screen_vps_ar[NB_SCREENS];
|
||||||
|
struct viewport *title;
|
||||||
#if defined HAVE_TOUCHSCREEN
|
#if defined HAVE_TOUCHSCREEN
|
||||||
enum touchscreen_mode old_mode = touchscreen_get_mode();
|
enum touchscreen_mode old_mode = touchscreen_get_mode();
|
||||||
|
|
||||||
|
|
@ -269,8 +247,8 @@ void gui_usb_screen_run(bool early_usb, intptr_t seqnum)
|
||||||
push_current_activity(ACTIVITY_USBSCREEN);
|
push_current_activity(ACTIVITY_USBSCREEN);
|
||||||
|
|
||||||
#ifdef USB_ENABLE_HID
|
#ifdef USB_ENABLE_HID
|
||||||
usb_hid = global_settings.usb_hid;
|
|
||||||
usb_keypad_mode = global_settings.usb_keypad_mode;
|
usb_keypad_mode = global_settings.usb_keypad_mode;
|
||||||
|
title = &usb_screen_vps_ar[SCREEN_MAIN].title;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
FOR_NB_SCREENS(i)
|
FOR_NB_SCREENS(i)
|
||||||
|
|
@ -296,33 +274,13 @@ void gui_usb_screen_run(bool early_usb, intptr_t seqnum)
|
||||||
/* The font system leaves the .fnt fd's open, so we need for force close them all */
|
/* The font system leaves the .fnt fd's open, so we need for force close them all */
|
||||||
font_disable_all();
|
font_disable_all();
|
||||||
}
|
}
|
||||||
|
|
||||||
usb_acknowledge(SYS_USB_CONNECTED_ACK, seqnum);
|
usb_acknowledge(SYS_USB_CONNECTED_ACK, seqnum);
|
||||||
|
usb_screens_draw(usb_screen_vps_ar);
|
||||||
while (1)
|
handle_usb_events(title);
|
||||||
{
|
|
||||||
usb_screens_draw(usb_screen_vps_ar);
|
|
||||||
#ifdef SIMULATOR
|
|
||||||
if (button_get_w_tmo(HZ/2))
|
|
||||||
break;
|
|
||||||
send_event(GUI_EVENT_ACTIONUPDATE, NULL);
|
|
||||||
#else
|
|
||||||
if (handle_usb_events())
|
|
||||||
break;
|
|
||||||
#endif /* SIMULATOR */
|
|
||||||
}
|
|
||||||
|
|
||||||
FOR_NB_SCREENS(i)
|
|
||||||
{
|
|
||||||
const struct viewport* vp = NULL;
|
|
||||||
|
|
||||||
#if defined(USB_ENABLE_HID)
|
#if defined(USB_ENABLE_HID)
|
||||||
vp = usb_hid ? &usb_screen_vps_ar[i].title : NULL;
|
if (global_settings.usb_hid)
|
||||||
#endif
|
screens[SCREEN_MAIN].scroll_stop_viewport(title);
|
||||||
if (vp)
|
|
||||||
screens[i].scroll_stop_viewport(vp);
|
|
||||||
}
|
|
||||||
#ifdef USB_ENABLE_HID
|
|
||||||
if (global_settings.usb_keypad_mode != usb_keypad_mode)
|
if (global_settings.usb_keypad_mode != usb_keypad_mode)
|
||||||
{
|
{
|
||||||
global_settings.usb_keypad_mode = usb_keypad_mode;
|
global_settings.usb_keypad_mode = usb_keypad_mode;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue