forked from len0rd/rockbox
Fixed the slow status bar update in bug report #727790.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@4868 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
ea598c7b66
commit
3dc50b0d74
3 changed files with 19 additions and 6 deletions
|
@ -205,7 +205,7 @@ void statusbar_icon_battery(int percent, bool charging)
|
||||||
/*
|
/*
|
||||||
* Print volume gauge to status bar
|
* Print volume gauge to status bar
|
||||||
*/
|
*/
|
||||||
void statusbar_icon_volume(int percent)
|
bool statusbar_icon_volume(int percent)
|
||||||
{
|
{
|
||||||
int i,j;
|
int i,j;
|
||||||
int volume;
|
int volume;
|
||||||
|
@ -213,6 +213,8 @@ void statusbar_icon_volume(int percent)
|
||||||
int step=0;
|
int step=0;
|
||||||
char buffer[4];
|
char buffer[4];
|
||||||
unsigned int width, height;
|
unsigned int width, height;
|
||||||
|
bool needs_redraw = false;
|
||||||
|
int type = global_settings.volume_type;
|
||||||
#if defined(LOADABLE_FONTS)
|
#if defined(LOADABLE_FONTS)
|
||||||
unsigned char *font;
|
unsigned char *font;
|
||||||
#endif
|
#endif
|
||||||
|
@ -231,13 +233,20 @@ void statusbar_icon_volume(int percent)
|
||||||
STATUSBAR_Y_POS, 7, STATUSBAR_HEIGHT, false);
|
STATUSBAR_Y_POS, 7, STATUSBAR_HEIGHT, false);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
/* We want to redraw the icon later on */
|
||||||
if (last_volume != volume && last_volume >= 0) {
|
if (last_volume != volume && last_volume >= 0) {
|
||||||
switch_tick = current_tick + HZ;
|
switch_tick = current_tick + HZ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If the timeout hasn't yet been reached, we show it numerically
|
||||||
|
and tell the caller that we want to be called again */
|
||||||
|
if(TIME_BEFORE(current_tick,switch_tick)) {
|
||||||
|
type = 1;
|
||||||
|
needs_redraw = true;
|
||||||
|
}
|
||||||
|
|
||||||
/* display volume level numerical? */
|
/* display volume level numerical? */
|
||||||
if (global_settings.volume_type ||
|
if (type)
|
||||||
TIME_BEFORE(current_tick,switch_tick))
|
|
||||||
{
|
{
|
||||||
snprintf(buffer, sizeof(buffer), "%2d", percent);
|
snprintf(buffer, sizeof(buffer), "%2d", percent);
|
||||||
lcd_setfont(FONT_SYSFIXED);
|
lcd_setfont(FONT_SYSFIXED);
|
||||||
|
@ -259,6 +268,8 @@ void statusbar_icon_volume(int percent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
last_volume = volume;
|
last_volume = volume;
|
||||||
|
|
||||||
|
return needs_redraw;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -90,7 +90,7 @@ extern unsigned char slider_bar[];
|
||||||
|
|
||||||
extern void statusbar_wipe(void);
|
extern void statusbar_wipe(void);
|
||||||
extern void statusbar_icon_battery(int percent, bool charging);
|
extern void statusbar_icon_battery(int percent, bool charging);
|
||||||
extern void statusbar_icon_volume(int percent);
|
extern bool statusbar_icon_volume(int percent);
|
||||||
extern void statusbar_icon_play_state(int state);
|
extern void statusbar_icon_play_state(int state);
|
||||||
extern void statusbar_icon_play_mode(int mode);
|
extern void statusbar_icon_play_mode(int mode);
|
||||||
extern void statusbar_icon_shuffle(void);
|
extern void statusbar_icon_shuffle(void);
|
||||||
|
|
|
@ -54,6 +54,7 @@ struct status_info {
|
||||||
bool shuffle;
|
bool shuffle;
|
||||||
bool keylock;
|
bool keylock;
|
||||||
bool battery_safe;
|
bool battery_safe;
|
||||||
|
bool redraw_volume; /* true if the volume gauge needs updating */
|
||||||
};
|
};
|
||||||
|
|
||||||
void status_init(void)
|
void status_init(void)
|
||||||
|
@ -159,6 +160,7 @@ void status_draw(bool force_redraw)
|
||||||
if (force_redraw ||
|
if (force_redraw ||
|
||||||
info.inserted ||
|
info.inserted ||
|
||||||
!info.battery_safe ||
|
!info.battery_safe ||
|
||||||
|
info.redraw_volume ||
|
||||||
memcmp(&info, &lastinfo, sizeof(struct status_info)))
|
memcmp(&info, &lastinfo, sizeof(struct status_info)))
|
||||||
{
|
{
|
||||||
lcd_clearrect(0,0,LCD_WIDTH,8);
|
lcd_clearrect(0,0,LCD_WIDTH,8);
|
||||||
|
@ -213,7 +215,7 @@ void status_draw(bool force_redraw)
|
||||||
if (battery_state)
|
if (battery_state)
|
||||||
statusbar_icon_battery(info.battlevel, plug_state);
|
statusbar_icon_battery(info.battlevel, plug_state);
|
||||||
|
|
||||||
statusbar_icon_volume(info.volume);
|
info.redraw_volume = statusbar_icon_volume(info.volume);
|
||||||
statusbar_icon_play_state(current_playmode() + Icon_Play);
|
statusbar_icon_play_state(current_playmode() + Icon_Play);
|
||||||
switch (info.repeat) {
|
switch (info.repeat) {
|
||||||
case REPEAT_ONE:
|
case REPEAT_ONE:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue