diff options
author | Jonathan Gordon <rockbox@jdgordon.info> | 2010-05-09 13:01:59 +0000 |
---|---|---|
committer | Jonathan Gordon <rockbox@jdgordon.info> | 2010-05-09 13:01:59 +0000 |
commit | 38ef849d06c7f206b4e9238058ce7b52fbc5d019 (patch) | |
tree | 9426af72e4ea2e7c64bec9b65935d363b0af19ae | |
parent | 382c23e10dc44a357c5ce65df01c38559d722314 (diff) | |
download | rockbox-38ef849d06c7f206b4e9238058ce7b52fbc5d019.tar.gz rockbox-38ef849d06c7f206b4e9238058ce7b52fbc5d019.zip |
slightly rework peakmeter handling to make it cleaner and be able to be used in conditionals
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25913 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r-- | apps/gui/skin_engine/skin_display.c | 59 | ||||
-rw-r--r-- | apps/recorder/peakmeter.c | 6 | ||||
-rw-r--r-- | apps/recorder/peakmeter.h | 2 | ||||
-rw-r--r-- | apps/recorder/radio.c | 2 | ||||
-rw-r--r-- | apps/recorder/recording.c | 6 |
5 files changed, 35 insertions, 40 deletions
diff --git a/apps/gui/skin_engine/skin_display.c b/apps/gui/skin_engine/skin_display.c index 9316294aad..9b42a7c18b 100644 --- a/apps/gui/skin_engine/skin_display.c +++ b/apps/gui/skin_engine/skin_display.c | |||
@@ -630,6 +630,10 @@ static bool evaluate_conditional(struct gui_wps *gwps, int *token_index) | |||
630 | struct progressbar *bar = (struct progressbar*)data->tokens[i].value.data; | 630 | struct progressbar *bar = (struct progressbar*)data->tokens[i].value.data; |
631 | bar->draw = false; | 631 | bar->draw = false; |
632 | } | 632 | } |
633 | else if (data->tokens[i].type == WPS_TOKEN_PEAKMETER) | ||
634 | { | ||
635 | data->peak_meter_enabled = false; | ||
636 | } | ||
633 | #endif | 637 | #endif |
634 | #ifdef HAVE_ALBUMART | 638 | #ifdef HAVE_ALBUMART |
635 | if (data->albumart && data->tokens[i].type == WPS_TOKEN_ALBUMART_DISPLAY) | 639 | if (data->albumart && data->tokens[i].type == WPS_TOKEN_ALBUMART_DISPLAY) |
@@ -692,6 +696,9 @@ static bool get_line(struct gui_wps *gwps, | |||
692 | break; | 696 | break; |
693 | 697 | ||
694 | #ifdef HAVE_LCD_BITMAP | 698 | #ifdef HAVE_LCD_BITMAP |
699 | case WPS_TOKEN_PEAKMETER: | ||
700 | data->peak_meter_enabled = true; | ||
701 | break; | ||
695 | case WPS_TOKEN_VOLUMEBAR: | 702 | case WPS_TOKEN_VOLUMEBAR: |
696 | case WPS_TOKEN_BATTERY_PERCENTBAR: | 703 | case WPS_TOKEN_BATTERY_PERCENTBAR: |
697 | case WPS_TOKEN_PROGRESSBAR: | 704 | case WPS_TOKEN_PROGRESSBAR: |
@@ -1083,19 +1090,6 @@ static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode) | |||
1083 | 1090 | ||
1084 | bool update_line, new_subline_refresh; | 1091 | bool update_line, new_subline_refresh; |
1085 | 1092 | ||
1086 | #ifdef HAVE_LCD_BITMAP | ||
1087 | |||
1088 | /* to find out wether the peak meter is enabled we | ||
1089 | assume it wasn't until we find a line that contains | ||
1090 | the peak meter. We can't use peak_meter_enabled itself | ||
1091 | because that would mean to turn off the meter thread | ||
1092 | temporarily. (That shouldn't matter unless yield | ||
1093 | or sleep is called but who knows...) | ||
1094 | */ | ||
1095 | bool enable_pm = false; | ||
1096 | |||
1097 | #endif | ||
1098 | |||
1099 | /* reset to first subline if refresh all flag is set */ | 1093 | /* reset to first subline if refresh all flag is set */ |
1100 | if (refresh_mode == WPS_REFRESH_ALL) | 1094 | if (refresh_mode == WPS_REFRESH_ALL) |
1101 | { | 1095 | { |
@@ -1226,27 +1220,27 @@ static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode) | |||
1226 | /* peakmeter */ | 1220 | /* peakmeter */ |
1227 | if (flags & vp_refresh_mode & WPS_REFRESH_PEAK_METER) | 1221 | if (flags & vp_refresh_mode & WPS_REFRESH_PEAK_METER) |
1228 | { | 1222 | { |
1229 | /* the peakmeter should be alone on its line */ | 1223 | if (!data->peak_meter_enabled) |
1230 | update_line = false; | 1224 | { |
1231 | 1225 | peak_meter_enable(false); | |
1232 | int h = font_get(skin_viewport->vp.font)->height; | ||
1233 | int peak_meter_y = line_count* h; | ||
1234 | |||
1235 | /* The user might decide to have the peak meter in the last | ||
1236 | line so that it is only displayed if no status bar is | ||
1237 | visible. If so we neither want do draw nor enable the | ||
1238 | peak meter. */ | ||
1239 | if (peak_meter_y + h <= skin_viewport->vp.y+skin_viewport->vp.height) { | ||
1240 | /* found a line with a peak meter -> remember that we must | ||
1241 | enable it later */ | ||
1242 | enable_pm = true; | ||
1243 | peak_meter_enabled = true; | ||
1244 | peak_meter_screen(gwps->display, 0, peak_meter_y, | ||
1245 | MIN(h, skin_viewport->vp.y+skin_viewport->vp.height - peak_meter_y)); | ||
1246 | } | 1226 | } |
1247 | else | 1227 | else |
1248 | { | 1228 | { |
1249 | peak_meter_enabled = false; | 1229 | /* the peakmeter should be alone on its line */ |
1230 | update_line = false; | ||
1231 | |||
1232 | int h = font_get(skin_viewport->vp.font)->height; | ||
1233 | int peak_meter_y = line_count* h; | ||
1234 | |||
1235 | /* The user might decide to have the peak meter in the last | ||
1236 | line so that it is only displayed if no status bar is | ||
1237 | visible. If so we neither want do draw nor enable the | ||
1238 | peak meter. */ | ||
1239 | if (peak_meter_y + h <= skin_viewport->vp.y+skin_viewport->vp.height) { | ||
1240 | peak_meter_enable(true); | ||
1241 | peak_meter_screen(gwps->display, 0, peak_meter_y, | ||
1242 | MIN(h, skin_viewport->vp.y+skin_viewport->vp.height - peak_meter_y)); | ||
1243 | } | ||
1250 | } | 1244 | } |
1251 | } | 1245 | } |
1252 | 1246 | ||
@@ -1302,9 +1296,6 @@ static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode) | |||
1302 | #endif | 1296 | #endif |
1303 | } | 1297 | } |
1304 | 1298 | ||
1305 | #ifdef HAVE_LCD_BITMAP | ||
1306 | data->peak_meter_enabled = enable_pm; | ||
1307 | #endif | ||
1308 | /* Restore the default viewport */ | 1299 | /* Restore the default viewport */ |
1309 | display->set_viewport(NULL); | 1300 | display->set_viewport(NULL); |
1310 | 1301 | ||
diff --git a/apps/recorder/peakmeter.c b/apps/recorder/peakmeter.c index 154f605898..164b14b15c 100644 --- a/apps/recorder/peakmeter.c +++ b/apps/recorder/peakmeter.c | |||
@@ -78,7 +78,11 @@ static long pm_clip_timeout_r; | |||
78 | 78 | ||
79 | /* Temporarily en- / disables peak meter. This is especially for external | 79 | /* Temporarily en- / disables peak meter. This is especially for external |
80 | applications to detect if the peak_meter is in use and needs drawing at all */ | 80 | applications to detect if the peak_meter is in use and needs drawing at all */ |
81 | bool peak_meter_enabled = true; | 81 | static bool peak_meter_enabled = true; |
82 | void peak_meter_enable(bool enable) | ||
83 | { | ||
84 | peak_meter_enabled = enable; | ||
85 | } | ||
82 | 86 | ||
83 | /** Parameters **/ | 87 | /** Parameters **/ |
84 | /* Range */ | 88 | /* Range */ |
diff --git a/apps/recorder/peakmeter.h b/apps/recorder/peakmeter.h index 6fc2d6be58..308e5fb916 100644 --- a/apps/recorder/peakmeter.h +++ b/apps/recorder/peakmeter.h | |||
@@ -32,7 +32,7 @@ extern int pm_get_clipcount(void); | |||
32 | extern void pm_reset_clipcount(void); | 32 | extern void pm_reset_clipcount(void); |
33 | extern void pm_activate_clipcount(bool active); | 33 | extern void pm_activate_clipcount(bool active); |
34 | 34 | ||
35 | extern bool peak_meter_enabled; | 35 | extern void peak_meter_enable(bool enable); |
36 | 36 | ||
37 | extern void peak_meter_playback(bool playback); | 37 | extern void peak_meter_playback(bool playback); |
38 | extern int peak_meter_draw_get_btn(int action_context, int x[], int y[], | 38 | extern int peak_meter_draw_get_btn(int action_context, int x[], int y[], |
diff --git a/apps/recorder/radio.c b/apps/recorder/radio.c index 7761f248ca..5841664742 100644 --- a/apps/recorder/radio.c +++ b/apps/recorder/radio.c | |||
@@ -548,7 +548,7 @@ int radio_screen(void) | |||
548 | /* Yes, we use the D/A for monitoring */ | 548 | /* Yes, we use the D/A for monitoring */ |
549 | peak_meter_playback(true); | 549 | peak_meter_playback(true); |
550 | 550 | ||
551 | peak_meter_enabled = true; | 551 | peak_meter_enable(true); |
552 | 552 | ||
553 | rec_init_recording_options(&rec_options); | 553 | rec_init_recording_options(&rec_options); |
554 | rec_options.rec_source = AUDIO_SRC_LINEIN; | 554 | rec_options.rec_source = AUDIO_SRC_LINEIN; |
diff --git a/apps/recorder/recording.c b/apps/recorder/recording.c index d5ac91000c..21db298184 100644 --- a/apps/recorder/recording.c +++ b/apps/recorder/recording.c | |||
@@ -698,7 +698,7 @@ void rec_set_source(int source, unsigned flags) | |||
698 | 698 | ||
699 | /* Set peakmeters for recording or reset to playback */ | 699 | /* Set peakmeters for recording or reset to playback */ |
700 | peak_meter_playback((flags & SRCF_RECORDING) == 0); | 700 | peak_meter_playback((flags & SRCF_RECORDING) == 0); |
701 | peak_meter_enabled = true; | 701 | peak_meter_enable(true); |
702 | } | 702 | } |
703 | #endif /* CONFIG_CODEC == SWCODEC && !defined (SIMULATOR) */ | 703 | #endif /* CONFIG_CODEC == SWCODEC && !defined (SIMULATOR) */ |
704 | 704 | ||
@@ -1099,7 +1099,7 @@ bool recording_screen(bool no_source) | |||
1099 | buffer */ | 1099 | buffer */ |
1100 | #else | 1100 | #else |
1101 | /* Yes, we use the D/A for monitoring */ | 1101 | /* Yes, we use the D/A for monitoring */ |
1102 | peak_meter_enabled = true; | 1102 | peak_meter_enable(true); |
1103 | peak_meter_playback(true); | 1103 | peak_meter_playback(true); |
1104 | #endif | 1104 | #endif |
1105 | 1105 | ||
@@ -1549,7 +1549,7 @@ bool recording_screen(bool no_source) | |||
1549 | { | 1549 | { |
1550 | #if CONFIG_CODEC != SWCODEC | 1550 | #if CONFIG_CODEC != SWCODEC |
1551 | peak_meter_playback(true); | 1551 | peak_meter_playback(true); |
1552 | peak_meter_enabled = false; | 1552 | peak_meter_enable(false); |
1553 | #endif | 1553 | #endif |
1554 | done = 1; | 1554 | done = 1; |
1555 | } | 1555 | } |