forked from len0rd/rockbox
FS#10406 - split the statusbar setting into one for each display, and allow the bar to be at the top or bottom of the display
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21665 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
802743a061
commit
f1034e00f6
12 changed files with 128 additions and 23 deletions
|
|
@ -937,7 +937,14 @@ static void statusbar_toggle_handler(void *data)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
vp->y = STATUSBAR_HEIGHT;
|
bool bar_at_top = true;
|
||||||
|
#ifdef HAVE_REMOTE_LCD
|
||||||
|
if (i == SCREEN_REMOTE)
|
||||||
|
bar_at_top = global_settings.remote_statusbar != STATUSBAR_BOTTOM;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
bar_at_top = global_settings.statusbar != STATUSBAR_BOTTOM;
|
||||||
|
vp->y = bar_at_top?STATUSBAR_HEIGHT:0;
|
||||||
vp->height = screens[i].lcdheight - STATUSBAR_HEIGHT;
|
vp->height = screens[i].lcdheight - STATUSBAR_HEIGHT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -263,10 +263,20 @@ void gui_statusbar_draw(struct gui_statusbar * bar, bool force_redraw)
|
||||||
memcmp(&(bar->info), &(bar->lastinfo), sizeof(struct status_info)))
|
memcmp(&(bar->info), &(bar->lastinfo), sizeof(struct status_info)))
|
||||||
{
|
{
|
||||||
struct viewport vp;
|
struct viewport vp;
|
||||||
|
bool bar_at_top = true;
|
||||||
viewport_set_defaults(&vp, display->screen_type);
|
viewport_set_defaults(&vp, display->screen_type);
|
||||||
vp.height = STATUSBAR_HEIGHT;
|
vp.height = STATUSBAR_HEIGHT;
|
||||||
vp.x = STATUSBAR_X_POS;
|
vp.x = STATUSBAR_X_POS;
|
||||||
vp.y = STATUSBAR_Y_POS;
|
#ifdef HAVE_REMOTE_LCD
|
||||||
|
if (display->screen_type == SCREEN_REMOTE)
|
||||||
|
bar_at_top = global_settings.remote_statusbar != STATUSBAR_BOTTOM;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
bar_at_top = global_settings.statusbar != STATUSBAR_BOTTOM;
|
||||||
|
if (bar_at_top)
|
||||||
|
vp.y = 0;
|
||||||
|
else
|
||||||
|
vp.y = display->lcdheight - STATUSBAR_HEIGHT;
|
||||||
display->set_viewport(&vp);
|
display->set_viewport(&vp);
|
||||||
display->set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
|
display->set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
|
||||||
display->fillrect(0, 0, display->getwidth(), STATUSBAR_HEIGHT);
|
display->fillrect(0, 0, display->getwidth(), STATUSBAR_HEIGHT);
|
||||||
|
|
@ -814,7 +824,7 @@ void gui_syncstatusbar_draw(struct gui_syncstatusbar * bars,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void gui_statusbar_changed(bool enabled)
|
void gui_statusbar_changed(int enabled)
|
||||||
{
|
{
|
||||||
(void)enabled;
|
(void)enabled;
|
||||||
send_event(GUI_EVENT_STATUSBAR_TOGGLE, NULL);
|
send_event(GUI_EVENT_STATUSBAR_TOGGLE, NULL);
|
||||||
|
|
|
||||||
|
|
@ -98,6 +98,6 @@ struct gui_syncstatusbar
|
||||||
|
|
||||||
extern void gui_syncstatusbar_init(struct gui_syncstatusbar * bars);
|
extern void gui_syncstatusbar_init(struct gui_syncstatusbar * bars);
|
||||||
extern void gui_syncstatusbar_draw(struct gui_syncstatusbar * bars, bool force_redraw);
|
extern void gui_syncstatusbar_draw(struct gui_syncstatusbar * bars, bool force_redraw);
|
||||||
void gui_statusbar_changed(bool enabled);
|
void gui_statusbar_changed(int enabled);
|
||||||
|
|
||||||
#endif /*_GUI_STATUSBAR_H_*/
|
#endif /*_GUI_STATUSBAR_H_*/
|
||||||
|
|
|
||||||
|
|
@ -49,30 +49,47 @@ int viewport_get_nb_lines(struct viewport *vp)
|
||||||
|
|
||||||
static bool showing_bars(enum screen_type screen)
|
static bool showing_bars(enum screen_type screen)
|
||||||
{
|
{
|
||||||
|
bool ignore = statusbar_enabled & VP_SB_IGNORE_SETTING(screen);
|
||||||
if (statusbar_enabled & VP_SB_ONSCREEN(screen))
|
if (statusbar_enabled & VP_SB_ONSCREEN(screen))
|
||||||
|
{
|
||||||
#ifdef HAVE_LCD_BITMAP
|
#ifdef HAVE_LCD_BITMAP
|
||||||
return global_settings.statusbar ||
|
#ifdef HAVE_REMOTE_LCD
|
||||||
(statusbar_enabled & VP_SB_IGNORE_SETTING(screen));
|
if (screen == SCREEN_REMOTE)
|
||||||
|
return global_settings.remote_statusbar || ignore;
|
||||||
|
#endif
|
||||||
|
return global_settings.statusbar || ignore;
|
||||||
#else
|
#else
|
||||||
return true;
|
return true;
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void viewport_set_defaults(struct viewport *vp, enum screen_type screen)
|
void viewport_set_defaults(struct viewport *vp, enum screen_type screen)
|
||||||
{
|
{
|
||||||
|
bool bar_at_top = true;
|
||||||
vp->x = 0;
|
vp->x = 0;
|
||||||
vp->width = screens[screen].lcdwidth;
|
vp->width = screens[screen].lcdwidth;
|
||||||
|
|
||||||
#ifdef HAVE_LCD_BITMAP
|
#ifdef HAVE_LCD_BITMAP
|
||||||
vp->drawmode = DRMODE_SOLID;
|
vp->drawmode = DRMODE_SOLID;
|
||||||
vp->font = FONT_UI; /* default to UI to discourage SYSFONT use */
|
vp->font = FONT_UI; /* default to UI to discourage SYSFONT use */
|
||||||
|
#ifdef HAVE_REMOTE_LCD
|
||||||
|
if (screen == SCREEN_REMOTE)
|
||||||
|
bar_at_top = global_settings.remote_statusbar != STATUSBAR_BOTTOM;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
bar_at_top = global_settings.statusbar != STATUSBAR_BOTTOM;
|
||||||
|
|
||||||
vp->y = showing_bars(screen)?STATUSBAR_HEIGHT:0;
|
vp->height = screens[screen].lcdheight;
|
||||||
|
if (bar_at_top && showing_bars(screen))
|
||||||
|
vp->y = STATUSBAR_HEIGHT;
|
||||||
|
else
|
||||||
|
vp->y = 0;
|
||||||
#else
|
#else
|
||||||
vp->y = 0;
|
vp->y = 0;
|
||||||
#endif
|
#endif
|
||||||
vp->height = screens[screen].lcdheight - vp->y;
|
vp->height = screens[screen].lcdheight - (showing_bars(screen)?STATUSBAR_HEIGHT:0);
|
||||||
|
|
||||||
#ifdef HAVE_REMOTE_LCD
|
#ifdef HAVE_REMOTE_LCD
|
||||||
/* We only need this test if there is a remote LCD */
|
/* We only need this test if there is a remote LCD */
|
||||||
|
|
@ -136,5 +153,12 @@ void viewportmanager_draw_statusbars(void* data)
|
||||||
void viewportmanager_statusbar_changed(void* data)
|
void viewportmanager_statusbar_changed(void* data)
|
||||||
{
|
{
|
||||||
(void)data;
|
(void)data;
|
||||||
|
statusbar_enabled = 0;
|
||||||
|
if (global_settings.statusbar != STATUSBAR_OFF)
|
||||||
|
statusbar_enabled = VP_SB_ONSCREEN(SCREEN_MAIN);
|
||||||
|
#ifdef HAVE_REMOTE_LCD
|
||||||
|
if (global_settings.remote_statusbar != STATUSBAR_OFF)
|
||||||
|
statusbar_enabled |= VP_SB_ONSCREEN(SCREEN_REMOTE);
|
||||||
|
#endif
|
||||||
viewportmanager_set_statusbar(statusbar_enabled);
|
viewportmanager_set_statusbar(statusbar_enabled);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12559,3 +12559,48 @@
|
||||||
touchscreen: "Reset Calibration"
|
touchscreen: "Reset Calibration"
|
||||||
</voice>
|
</voice>
|
||||||
</phrase>
|
</phrase>
|
||||||
|
<phrase>
|
||||||
|
id: LANG_STATUSBAR_TOP
|
||||||
|
desc: in Settings -> General -> Display -> statusbar
|
||||||
|
user: core
|
||||||
|
<source>
|
||||||
|
*: "Top"
|
||||||
|
</source>
|
||||||
|
<dest>
|
||||||
|
*: "Top"
|
||||||
|
</dest>
|
||||||
|
<voice>
|
||||||
|
*: "Top"
|
||||||
|
</voice>
|
||||||
|
</phrase>
|
||||||
|
<phrase>
|
||||||
|
id: LANG_STATUSBAR_BOTTOM
|
||||||
|
desc: in Settings -> General -> Display -> statusbar
|
||||||
|
user: core
|
||||||
|
<source>
|
||||||
|
*: "Bottom"
|
||||||
|
</source>
|
||||||
|
<dest>
|
||||||
|
*: "Bottom"
|
||||||
|
</dest>
|
||||||
|
<voice>
|
||||||
|
*: "Bottom"
|
||||||
|
</voice>
|
||||||
|
</phrase>
|
||||||
|
<phrase>
|
||||||
|
id: LANG_REMOTE_STATUSBAR
|
||||||
|
desc: in Settings -> General -> Display -> statusbar
|
||||||
|
user: core
|
||||||
|
<source>
|
||||||
|
*: none
|
||||||
|
remote: "Remote Statusbar"
|
||||||
|
</source>
|
||||||
|
<dest>
|
||||||
|
*: none
|
||||||
|
remote: "Remote Statusbar"
|
||||||
|
</dest>
|
||||||
|
<voice>
|
||||||
|
*: none
|
||||||
|
remote: "Remote Statusbar"
|
||||||
|
</voice>
|
||||||
|
</phrase>
|
||||||
|
|
|
||||||
|
|
@ -321,6 +321,9 @@ static int statusbar_callback(int action,const struct menu_item_ex *this_item)
|
||||||
}
|
}
|
||||||
MENUITEM_SETTING(scrollbar_item, &global_settings.scrollbar, NULL);
|
MENUITEM_SETTING(scrollbar_item, &global_settings.scrollbar, NULL);
|
||||||
MENUITEM_SETTING(statusbar, &global_settings.statusbar, statusbar_callback);
|
MENUITEM_SETTING(statusbar, &global_settings.statusbar, statusbar_callback);
|
||||||
|
#ifdef HAVE_REMOTE_LCD
|
||||||
|
MENUITEM_SETTING(remote_statusbar, &global_settings.remote_statusbar, statusbar_callback);
|
||||||
|
#endif
|
||||||
#if CONFIG_KEYPAD == RECORDER_PAD
|
#if CONFIG_KEYPAD == RECORDER_PAD
|
||||||
MENUITEM_SETTING(buttonbar, &global_settings.buttonbar, NULL);
|
MENUITEM_SETTING(buttonbar, &global_settings.buttonbar, NULL);
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -328,6 +331,9 @@ MENUITEM_SETTING(volume_type, &global_settings.volume_type, NULL);
|
||||||
MENUITEM_SETTING(battery_display, &global_settings.battery_display, NULL);
|
MENUITEM_SETTING(battery_display, &global_settings.battery_display, NULL);
|
||||||
MAKE_MENU(bars_menu, ID2P(LANG_BARS_MENU), 0, Icon_NOICON,
|
MAKE_MENU(bars_menu, ID2P(LANG_BARS_MENU), 0, Icon_NOICON,
|
||||||
&scrollbar_item, &statusbar,
|
&scrollbar_item, &statusbar,
|
||||||
|
#ifdef HAVE_REMOTE_LCD
|
||||||
|
&remote_statusbar,
|
||||||
|
#endif
|
||||||
#if CONFIG_KEYPAD == RECORDER_PAD
|
#if CONFIG_KEYPAD == RECORDER_PAD
|
||||||
&buttonbar,
|
&buttonbar,
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -468,6 +468,7 @@ static const struct plugin_api rockbox_api = {
|
||||||
playlist_remove_all_tracks,
|
playlist_remove_all_tracks,
|
||||||
playlist_create,
|
playlist_create,
|
||||||
playlist_insert_track,
|
playlist_insert_track,
|
||||||
|
playlist_insert_directory,
|
||||||
playlist_shuffle,
|
playlist_shuffle,
|
||||||
PREFIX(audio_play),
|
PREFIX(audio_play),
|
||||||
audio_stop,
|
audio_stop,
|
||||||
|
|
@ -658,7 +659,6 @@ static const struct plugin_api rockbox_api = {
|
||||||
appsversion,
|
appsversion,
|
||||||
/* new stuff at the end, sort into place next time
|
/* new stuff at the end, sort into place next time
|
||||||
the API gets incompatible */
|
the API gets incompatible */
|
||||||
playlist_insert_directory,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
int plugin_load(const char* plugin, const void* parameter)
|
int plugin_load(const char* plugin, const void* parameter)
|
||||||
|
|
|
||||||
|
|
@ -128,12 +128,12 @@ void* plugin_get_buffer(size_t *buffer_size);
|
||||||
#define PLUGIN_MAGIC 0x526F634B /* RocK */
|
#define PLUGIN_MAGIC 0x526F634B /* RocK */
|
||||||
|
|
||||||
/* increase this every time the api struct changes */
|
/* increase this every time the api struct changes */
|
||||||
#define PLUGIN_API_VERSION 158
|
#define PLUGIN_API_VERSION 159
|
||||||
|
|
||||||
/* update this to latest version if a change to the api struct breaks
|
/* update this to latest version if a change to the api struct breaks
|
||||||
backwards compatibility (and please take the opportunity to sort in any
|
backwards compatibility (and please take the opportunity to sort in any
|
||||||
new function which are "waiting" at the end of the function table) */
|
new function which are "waiting" at the end of the function table) */
|
||||||
#define PLUGIN_MIN_API_VERSION 157
|
#define PLUGIN_MIN_API_VERSION 159
|
||||||
|
|
||||||
/* plugin return codes */
|
/* plugin return codes */
|
||||||
enum plugin_status {
|
enum plugin_status {
|
||||||
|
|
@ -595,6 +595,9 @@ struct plugin_api {
|
||||||
int (*playlist_create)(const char *dir, const char *file);
|
int (*playlist_create)(const char *dir, const char *file);
|
||||||
int (*playlist_insert_track)(struct playlist_info* playlist,
|
int (*playlist_insert_track)(struct playlist_info* playlist,
|
||||||
const char *filename, int position, bool queue, bool sync);
|
const char *filename, int position, bool queue, bool sync);
|
||||||
|
int (*playlist_insert_directory)(struct playlist_info* playlist,
|
||||||
|
const char *dirname, int position, bool queue,
|
||||||
|
bool recurse);
|
||||||
int (*playlist_shuffle)(int random_seed, int start_index);
|
int (*playlist_shuffle)(int random_seed, int start_index);
|
||||||
void (*audio_play)(long offset);
|
void (*audio_play)(long offset);
|
||||||
void (*audio_stop)(void);
|
void (*audio_stop)(void);
|
||||||
|
|
@ -821,9 +824,6 @@ struct plugin_api {
|
||||||
const char *appsversion;
|
const char *appsversion;
|
||||||
/* new stuff at the end, sort into place next time
|
/* new stuff at the end, sort into place next time
|
||||||
the API gets incompatible */
|
the API gets incompatible */
|
||||||
int (*playlist_insert_directory)(struct playlist_info* playlist,
|
|
||||||
const char *dirname, int position, bool queue,
|
|
||||||
bool recurse);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* plugin header */
|
/* plugin header */
|
||||||
|
|
|
||||||
|
|
@ -1112,14 +1112,12 @@ bool recording_screen(bool no_source)
|
||||||
else
|
else
|
||||||
compact_view[i] = false;
|
compact_view[i] = false;
|
||||||
}
|
}
|
||||||
|
vp_list[i] = *v; /* get a copy now so it can be sized more easily */
|
||||||
v->height = (font_get(v->font)->height)*(compact_view[i] ? 3 : 4);
|
v->height = (font_get(v->font)->height)*(compact_view[i] ? 3 : 4);
|
||||||
|
|
||||||
/* list section, rest of the screen */
|
/* list section, rest of the screen */
|
||||||
v = &vp_list[i];
|
vp_list[i].y = vp_top[i].y + vp_top[i].height;
|
||||||
viewport_set_defaults(v, i);
|
vp_list[i].height -= vp_list[i].y;
|
||||||
v->font = vp_top[i].font;
|
|
||||||
v->y = vp_top[i].y + vp_top[i].height;
|
|
||||||
v->height = screens[i].lcdheight - v->y; /* the rest */
|
|
||||||
screens[i].set_viewport(&vp_top[i]); /* req for next calls */
|
screens[i].set_viewport(&vp_top[i]); /* req for next calls */
|
||||||
|
|
||||||
screens[i].getstringsize("W", &w, &h);
|
screens[i].getstringsize("W", &w, &h);
|
||||||
|
|
|
||||||
|
|
@ -981,6 +981,7 @@ void settings_apply(bool read_disk)
|
||||||
#if defined(HAVE_RECORDING) && CONFIG_CODEC == SWCODEC
|
#if defined(HAVE_RECORDING) && CONFIG_CODEC == SWCODEC
|
||||||
enc_global_settings_apply();
|
enc_global_settings_apply();
|
||||||
#endif
|
#endif
|
||||||
|
send_event(GUI_EVENT_STATUSBAR_TOGGLE, NULL);
|
||||||
list_init_viewports(NULL);
|
list_init_viewports(NULL);
|
||||||
send_event(GUI_EVENT_ACTIONUPDATE, (void*)true);
|
send_event(GUI_EVENT_ACTIONUPDATE, (void*)true);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -149,6 +149,9 @@ enum { REPLAYGAIN_TRACK = 0, REPLAYGAIN_ALBUM, REPLAYGAIN_SHUFFLE, REPLAYGAIN_OF
|
||||||
/* show path types */
|
/* show path types */
|
||||||
enum { SHOW_PATH_OFF = 0, SHOW_PATH_CURRENT, SHOW_PATH_FULL };
|
enum { SHOW_PATH_OFF = 0, SHOW_PATH_CURRENT, SHOW_PATH_FULL };
|
||||||
|
|
||||||
|
/* statusbar visilibility */
|
||||||
|
enum { STATUSBAR_OFF = 0, STATUSBAR_TOP, STATUSBAR_BOTTOM };
|
||||||
|
|
||||||
/* Alarm settings */
|
/* Alarm settings */
|
||||||
#ifdef HAVE_RTC_ALARM
|
#ifdef HAVE_RTC_ALARM
|
||||||
enum { ALARM_START_WPS = 0,
|
enum { ALARM_START_WPS = 0,
|
||||||
|
|
@ -535,7 +538,10 @@ struct user_settings
|
||||||
int volume_type; /* how volume is displayed: 0=graphic, 1=percent */
|
int volume_type; /* how volume is displayed: 0=graphic, 1=percent */
|
||||||
int battery_display; /* how battery is displayed: 0=graphic, 1=percent */
|
int battery_display; /* how battery is displayed: 0=graphic, 1=percent */
|
||||||
bool show_icons; /* 0=hide 1=show */
|
bool show_icons; /* 0=hide 1=show */
|
||||||
bool statusbar; /* 0=hide, 1=show */
|
int statusbar; /* STATUSBAR_* enum values */
|
||||||
|
#ifdef HAVE_REMOTE_LCD
|
||||||
|
int remote_statusbar;
|
||||||
|
#endif
|
||||||
|
|
||||||
#if CONFIG_KEYPAD == RECORDER_PAD
|
#if CONFIG_KEYPAD == RECORDER_PAD
|
||||||
bool buttonbar; /* 0=hide, 1=show */
|
bool buttonbar; /* 0=hide, 1=show */
|
||||||
|
|
|
||||||
|
|
@ -591,8 +591,16 @@ const struct settings_list settings[] = {
|
||||||
ID2P(LANG_INVERT_CURSOR_POINTER),
|
ID2P(LANG_INVERT_CURSOR_POINTER),
|
||||||
ID2P(LANG_INVERT_CURSOR_BAR)),
|
ID2P(LANG_INVERT_CURSOR_BAR)),
|
||||||
#endif
|
#endif
|
||||||
OFFON_SETTING(F_THEMESETTING|F_TEMPVAR, statusbar,
|
CHOICE_SETTING(F_THEMESETTING|F_TEMPVAR, statusbar,
|
||||||
LANG_STATUS_BAR, true,"statusbar", gui_statusbar_changed),
|
LANG_STATUS_BAR, STATUSBAR_TOP, "statusbar","off,top,bottom",
|
||||||
|
gui_statusbar_changed, 3, ID2P(LANG_OFF), ID2P(LANG_STATUSBAR_TOP),
|
||||||
|
ID2P(LANG_STATUSBAR_BOTTOM)),
|
||||||
|
#ifdef HAVE_REMOTE_LCD
|
||||||
|
CHOICE_SETTING(F_THEMESETTING|F_TEMPVAR, remote_statusbar,
|
||||||
|
LANG_REMOTE_STATUSBAR, STATUSBAR_TOP, "remote statusbar","off,top,bottom",
|
||||||
|
gui_statusbar_changed, 3, ID2P(LANG_OFF), ID2P(LANG_STATUSBAR_TOP),
|
||||||
|
ID2P(LANG_STATUSBAR_BOTTOM)),
|
||||||
|
#endif
|
||||||
OFFON_SETTING(0,scrollbar, LANG_SCROLL_BAR, true,"scrollbar", NULL),
|
OFFON_SETTING(0,scrollbar, LANG_SCROLL_BAR, true,"scrollbar", NULL),
|
||||||
#if CONFIG_KEYPAD == RECORDER_PAD
|
#if CONFIG_KEYPAD == RECORDER_PAD
|
||||||
OFFON_SETTING(0,buttonbar, LANG_BUTTON_BAR ,true,"buttonbar", NULL),
|
OFFON_SETTING(0,buttonbar, LANG_BUTTON_BAR ,true,"buttonbar", NULL),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue