summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2009-03-20 16:12:09 +0000
committerThomas Martitz <kugel@rockbox.org>2009-03-20 16:12:09 +0000
commitad59f6ed22b90a07cdd6bbb8a69591d0281033a4 (patch)
tree6c23c4538737c777804a5954206abd3cdb2834e1
parentce6b116bc1c09b665e4a79272bc409b5e27f773e (diff)
Fix up statusbar drawing in the wps a bit, fixing most, if not all, (re-)draw issues.
a) remove the temporary work around in gui_wps_display b) let the wps-statusbars redraw if it's masked (i.e. WPS_REFRESH_ALL or WPS_REFRESH_STATUSBAR) c) fix a bug of mine, I attached re-fixing the bars to the wrong event d) unify the decision whether to draw bars at all e) some other style/code minor cleanups git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20400 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/gui/gwps-common.c16
-rw-r--r--apps/gui/gwps.c30
-rw-r--r--apps/gui/gwps.h21
-rw-r--r--apps/gui/viewport.c1
4 files changed, 33 insertions, 35 deletions
diff --git a/apps/gui/gwps-common.c b/apps/gui/gwps-common.c
index b60377de78..005fefd0fb 100644
--- a/apps/gui/gwps-common.c
+++ b/apps/gui/gwps-common.c
@@ -353,16 +353,6 @@ bool gui_wps_display(void)
FOR_NB_SCREENS(i)
{
gui_wps_refresh(&gui_wps[i], 0, WPS_REFRESH_ALL);
-#ifdef HAVE_LCD_BITMAP
- /* temporary work around so the statusbar doesnt disappear when the WPS
- * is first entered. This should be removed when the
- * WPS-statusbar handling is fixed up a bit more */
- bool draw = global_settings.statusbar;
- if (gui_wps[i].data->wps_sb_tag)
- draw = gui_wps[i].data->show_sb_on_wps;
- if (draw)
- gui_statusbar_draw(&statusbars.statusbars[i], true);
-#endif
}
return false;
}
@@ -2114,6 +2104,10 @@ bool gui_wps_refresh(struct gui_wps *gwps,
data->peak_meter_enabled = enable_pm;
#endif
+ if (refresh_mode & WPS_REFRESH_STATUSBAR)
+ {
+ gwps_draw_statusbars();
+ }
/* Restore the default viewport */
display->set_viewport(NULL);
@@ -2152,7 +2146,5 @@ bool gui_wps_refresh(struct gui_wps *gwps,
remote_backlight_on();
}
#endif
- /* force a bars update if they are being displayed */
- viewportmanager_draw_statusbars(NULL);
return true;
}
diff --git a/apps/gui/gwps.c b/apps/gui/gwps.c
index 89b8bf1960..cbce0f5973 100644
--- a/apps/gui/gwps.c
+++ b/apps/gui/gwps.c
@@ -151,7 +151,7 @@ static void play_hop(int direction)
#endif
}
-void gwps_fix_statusbars(void)
+static void gwps_fix_statusbars(void)
{
#ifdef HAVE_LCD_BITMAP
int i;
@@ -161,9 +161,11 @@ void gwps_fix_statusbars(void)
bool draw = false;
if (gui_wps[i].data->wps_sb_tag)
draw = gui_wps[i].data->show_sb_on_wps;
+ else if (global_settings.statusbar)
+ wpsbars |= VP_SB_ONSCREEN(i);
if (draw)
wpsbars |= (VP_SB_ONSCREEN(i) | VP_SB_IGNORE_SETTING(i));
- }
+ }
#else
wpsbars = VP_SB_ALLSCREENS;
#endif
@@ -188,6 +190,11 @@ static void gwps_leave_wps(void)
viewportmanager_set_statusbar(oldbars);
}
+void gwps_draw_statusbars(void)
+{
+ viewportmanager_set_statusbar(wpsbars);
+}
+
/* The WPS can be left in two ways:
* a) call a function, which draws over the wps. In this case, the wps
* will be still active (i.e. the below function didn't return)
@@ -207,7 +214,6 @@ long gui_wps_show(void)
bool update_track = false;
int i;
long last_left = 0, last_right = 0;
-
wps_state_init();
#ifdef HAVE_LCD_CHARCELLS
@@ -685,7 +691,7 @@ long gui_wps_show(void)
if (restore &&
((restoretimer == RESTORE_WPS_INSTANTLY) ||
- TIME_AFTER(restore, current_tick)))
+ TIME_AFTER(current_tick, restoretimer)))
{
/* restore wps backrops and statusbars */
#if LCD_DEPTH > 1
@@ -694,7 +700,6 @@ long gui_wps_show(void)
#if defined(HAVE_REMOTE_LCD) && LCD_REMOTE_DEPTH > 1
show_remote_wps_backdrop();
#endif
- viewportmanager_set_statusbar(wpsbars);
restore = false;
restoretimer = RESTORE_WPS_INSTANTLY;
if (gui_wps_display()) {
@@ -751,22 +756,21 @@ static void statusbar_toggle_handler(void *data)
{
(void)data;
int i;
- bool draw = global_settings.statusbar;
+ gwps_fix_statusbars();
FOR_NB_SCREENS(i)
{
- struct wps_viewport *vp = &gui_wps[i].data->viewports[0];
- if (gui_wps[i].data->wps_sb_tag)
- draw = gui_wps[i].data->show_sb_on_wps;
+ struct viewport *vp = &gui_wps[i].data->viewports[0].vp;
+ bool draw = wpsbars & (VP_SB_ONSCREEN(i) | VP_SB_IGNORE_SETTING(i));
if (!draw)
{
- vp->vp.y = 0;
- vp->vp.height = screens[i].lcdheight;
+ vp->y = 0;
+ vp->height = screens[i].lcdheight;
}
else
{
- vp->vp.y = STATUSBAR_HEIGHT;
- vp->vp.height = screens[i].lcdheight - STATUSBAR_HEIGHT;
+ vp->y = STATUSBAR_HEIGHT;
+ vp->height = screens[i].lcdheight - STATUSBAR_HEIGHT;
}
}
}
diff --git a/apps/gui/gwps.h b/apps/gui/gwps.h
index 70725df40b..d1239c1b34 100644
--- a/apps/gui/gwps.h
+++ b/apps/gui/gwps.h
@@ -26,15 +26,18 @@
#include "metadata.h"
/* constants used in line_type and as refresh_mode for wps_refresh */
-#define WPS_REFRESH_STATIC 1 /* line doesn't change over time */
-#define WPS_REFRESH_DYNAMIC 2 /* line may change (e.g. time flag) */
-#define WPS_REFRESH_SCROLL 4 /* line scrolls */
-#define WPS_REFRESH_PLAYER_PROGRESS 8 /* line contains a progress bar */
-#define WPS_REFRESH_PEAK_METER 16 /* line contains a peak meter */
+#define WPS_REFRESH_STATIC (1<<0) /* line doesn't change over time */
+#define WPS_REFRESH_DYNAMIC (1<<1) /* line may change (e.g. time flag) */
+#define WPS_REFRESH_SCROLL (1<<2) /* line scrolls */
+#define WPS_REFRESH_PLAYER_PROGRESS (1<<3) /* line contains a progress bar */
+#define WPS_REFRESH_PEAK_METER (1<<4) /* line contains a peak meter */
+#define WPS_REFRESH_STATUSBAR (1<<5) /* refresh statusbar */
#define WPS_REFRESH_ALL 0xff /* to refresh all line types */
-/* to refresh only those lines that change over time */
-#define WPS_REFRESH_NON_STATIC (WPS_REFRESH_ALL & ~WPS_REFRESH_STATIC & ~WPS_REFRESH_SCROLL)
+/* to refresh only those lines that change over time */
+#define WPS_REFRESH_NON_STATIC (WPS_REFRESH_DYNAMIC| \
+ WPS_REFRESH_PLAYER_PROGRESS| \
+ WPS_REFRESH_PEAK_METER)
/* alignments */
#define WPS_ALIGN_RIGHT 32
#define WPS_ALIGN_CENTER 64
@@ -440,8 +443,8 @@ bool wps_data_load(struct wps_data *wps_data,
const char *buf,
bool isfile);
-/* Sets up the statusbars for the wps and each screen */
-void gwps_fix_statusbars(void);
+/* Redraw statusbars if necessary */
+void gwps_draw_statusbars(void);
/* Returns the index of the subline in the subline array
line - 0-based line number
diff --git a/apps/gui/viewport.c b/apps/gui/viewport.c
index bc1ce8e9d3..a6313b88bd 100644
--- a/apps/gui/viewport.c
+++ b/apps/gui/viewport.c
@@ -125,7 +125,6 @@ void viewportmanager_draw_statusbars(void* data)
(void)data;
int i;
- gwps_fix_statusbars();
FOR_NB_SCREENS(i)
{
if (showing_bars(i))