summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2011-01-13 06:48:39 +0000
committerJonathan Gordon <rockbox@jdgordon.info>2011-01-13 06:48:39 +0000
commit261c56ba59235c2da2aa644fbea0b1fa492bd1c6 (patch)
treecdf37e93496f9dc3aaf71f45537ff3d5371c074f
parentc8535f27d140a2030cedf695a66595aae5b95c27 (diff)
downloadrockbox-261c56ba59235c2da2aa644fbea0b1fa492bd1c6.tar.gz
rockbox-261c56ba59235c2da2aa644fbea0b1fa492bd1c6.zip
FS#11867 - Add 2 new tags to allow skins to display themed peakmeters
%pL for the left channel, %pR for the right channel... usable as a value, conditional or bar (exactly the same as %pv/%bl/etc) git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29043 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/gui/skin_engine/skin_display.c10
-rw-r--r--apps/gui/skin_engine/skin_parser.c6
-rw-r--r--apps/gui/skin_engine/skin_render.c6
-rw-r--r--apps/gui/skin_engine/skin_tokens.c18
-rw-r--r--apps/recorder/peakmeter.c24
-rw-r--r--apps/recorder/peakmeter.h2
-rw-r--r--lib/skin_parser/tag_table.c3
-rw-r--r--lib/skin_parser/tag_table.h4
8 files changed, 66 insertions, 7 deletions
diff --git a/apps/gui/skin_engine/skin_display.c b/apps/gui/skin_engine/skin_display.c
index 47de4638d8..d38c8fd0ce 100644
--- a/apps/gui/skin_engine/skin_display.c
+++ b/apps/gui/skin_engine/skin_display.c
@@ -42,6 +42,7 @@
42#include "playlist.h" 42#include "playlist.h"
43#include "audio.h" 43#include "audio.h"
44#include "tagcache.h" 44#include "tagcache.h"
45#include "peakmeter.h"
45 46
46#ifdef HAVE_LCD_BITMAP 47#ifdef HAVE_LCD_BITMAP
47#include "peakmeter.h" 48#include "peakmeter.h"
@@ -159,6 +160,15 @@ void draw_progressbar(struct gui_wps *gwps, int line, struct progressbar *pb)
159 length = 100; 160 length = 100;
160 end = battery_level(); 161 end = battery_level();
161 } 162 }
163 else if (pb->type == SKIN_TOKEN_PEAKMETER_LEFTBAR ||
164 pb->type == SKIN_TOKEN_PEAKMETER_RIGHTBAR)
165 {
166 int left, right, val;
167 peak_meter_current_vals(&left, &right);
168 val = pb->type == SKIN_TOKEN_PEAKMETER_LEFTBAR ? left : right;
169 length = MAX_PEAK;
170 end = peak_meter_scale_value(val, length);
171 }
162#if CONFIG_TUNER 172#if CONFIG_TUNER
163 else if (in_radio_screen() || (get_radio_status() != FMRADIO_OFF)) 173 else if (in_radio_screen() || (get_radio_status() != FMRADIO_OFF))
164 { 174 {
diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c
index f292ff3946..5a90873d86 100644
--- a/apps/gui/skin_engine/skin_parser.c
+++ b/apps/gui/skin_engine/skin_parser.c
@@ -744,6 +744,10 @@ static int parse_progressbar_tag(struct skin_element* element,
744 token->type = SKIN_TOKEN_BATTERY_PERCENTBAR; 744 token->type = SKIN_TOKEN_BATTERY_PERCENTBAR;
745 else if (token->type == SKIN_TOKEN_TUNER_RSSI) 745 else if (token->type == SKIN_TOKEN_TUNER_RSSI)
746 token->type = SKIN_TOKEN_TUNER_RSSI_BAR; 746 token->type = SKIN_TOKEN_TUNER_RSSI_BAR;
747 else if (token->type == SKIN_TOKEN_PEAKMETER_LEFT)
748 token->type = SKIN_TOKEN_PEAKMETER_LEFTBAR;
749 else if (token->type == SKIN_TOKEN_PEAKMETER_RIGHT)
750 token->type = SKIN_TOKEN_PEAKMETER_RIGHTBAR;
747 pb->type = token->type; 751 pb->type = token->type;
748 752
749 return 0; 753 return 0;
@@ -1410,6 +1414,8 @@ static int skin_element_callback(struct skin_element* element, void* data)
1410 case SKIN_TOKEN_VOLUME: 1414 case SKIN_TOKEN_VOLUME:
1411 case SKIN_TOKEN_BATTERY_PERCENT: 1415 case SKIN_TOKEN_BATTERY_PERCENT:
1412 case SKIN_TOKEN_PLAYER_PROGRESSBAR: 1416 case SKIN_TOKEN_PLAYER_PROGRESSBAR:
1417 case SKIN_TOKEN_PEAKMETER_LEFT:
1418 case SKIN_TOKEN_PEAKMETER_RIGHT:
1413#ifdef HAVE_RADIO_RSSI 1419#ifdef HAVE_RADIO_RSSI
1414 case SKIN_TOKEN_TUNER_RSSI: 1420 case SKIN_TOKEN_TUNER_RSSI:
1415#endif 1421#endif
diff --git a/apps/gui/skin_engine/skin_render.c b/apps/gui/skin_engine/skin_render.c
index 68a5433eb1..424e0c29cc 100644
--- a/apps/gui/skin_engine/skin_render.c
+++ b/apps/gui/skin_engine/skin_render.c
@@ -139,6 +139,12 @@ static bool do_non_text_tags(struct gui_wps *gwps, struct skin_draw_info *info,
139 draw_peakmeters(gwps, info->line_number, vp); 139 draw_peakmeters(gwps, info->line_number, vp);
140 break; 140 break;
141#endif 141#endif
142#ifdef HAVE_LCD_BITMAP
143 case SKIN_TOKEN_PEAKMETER_LEFTBAR:
144 case SKIN_TOKEN_PEAKMETER_RIGHTBAR:
145 data->peak_meter_enabled = true;
146 /* fall through to the progressbar code */
147#endif
142 case SKIN_TOKEN_VOLUMEBAR: 148 case SKIN_TOKEN_VOLUMEBAR:
143 case SKIN_TOKEN_BATTERY_PERCENTBAR: 149 case SKIN_TOKEN_BATTERY_PERCENTBAR:
144#ifdef HAVE_LCD_BITMAP 150#ifdef HAVE_LCD_BITMAP
diff --git a/apps/gui/skin_engine/skin_tokens.c b/apps/gui/skin_engine/skin_tokens.c
index 217835a1e2..c644d5b3aa 100644
--- a/apps/gui/skin_engine/skin_tokens.c
+++ b/apps/gui/skin_engine/skin_tokens.c
@@ -59,6 +59,7 @@
59#include "skin_engine.h" 59#include "skin_engine.h"
60#include "statusbar-skinned.h" 60#include "statusbar-skinned.h"
61#include "root_menu.h" 61#include "root_menu.h"
62#include "peakmeter.h"
62#ifdef HAVE_RECORDING 63#ifdef HAVE_RECORDING
63#include "recording.h" 64#include "recording.h"
64#include "pcm_record.h" 65#include "pcm_record.h"
@@ -1267,6 +1268,23 @@ const char *get_token_value(struct gui_wps *gwps,
1267#endif 1268#endif
1268 1269
1269 1270
1271#ifdef HAVE_LCD_BITMAP
1272 /* peakmeter */
1273 case SKIN_TOKEN_PEAKMETER_LEFT:
1274 case SKIN_TOKEN_PEAKMETER_RIGHT:
1275 {
1276 int left, right, val;
1277 peak_meter_current_vals(&left, &right);
1278 val = token->type == SKIN_TOKEN_PEAKMETER_LEFT ?
1279 left : right;
1280 val = peak_meter_scale_value(val, limit==1 ? MAX_PEAK : limit);
1281 if (intval)
1282 *intval = val;
1283 snprintf(buf, buf_size, "%d", val);
1284 data->peak_meter_enabled = true;
1285 return buf;
1286 }
1287#endif
1270 1288
1271#if (CONFIG_CODEC == SWCODEC) 1289#if (CONFIG_CODEC == SWCODEC)
1272 case SKIN_TOKEN_CROSSFADE: 1290 case SKIN_TOKEN_CROSSFADE:
diff --git a/apps/recorder/peakmeter.c b/apps/recorder/peakmeter.c
index aacfc23cee..ca1b8c8750 100644
--- a/apps/recorder/peakmeter.c
+++ b/apps/recorder/peakmeter.c
@@ -930,6 +930,21 @@ void peak_meter_screen(struct screen *display, int x, int y, int height)
930 peak_meter_draw(display, &scales[display->screen_type], x, y, 930 peak_meter_draw(display, &scales[display->screen_type], x, y,
931 display->getwidth() - x, height); 931 display->getwidth() - x, height);
932} 932}
933
934/* sets *left and *right to the current *unscaled* values */
935void peak_meter_current_vals(int *left, int *right)
936{
937 static int left_level = 0, right_level = 0;
938 if (level_check){
939 /* only read the volume info from MAS if peek since last read*/
940 left_level = peak_meter_read_l();
941 right_level = peak_meter_read_r();
942 level_check = false;
943 }
944 *left = left_level;
945 *right = right_level;
946}
947
933/** 948/**
934 * Draws a peak meter in the specified size at the specified position. 949 * Draws a peak meter in the specified size at the specified position.
935 * @param int x - The x coordinate. 950 * @param int x - The x coordinate.
@@ -944,7 +959,7 @@ void peak_meter_screen(struct screen *display, int x, int y, int height)
944static void peak_meter_draw(struct screen *display, struct meter_scales *scales, 959static void peak_meter_draw(struct screen *display, struct meter_scales *scales,
945 int x, int y, int width, int height) 960 int x, int y, int width, int height)
946{ 961{
947 static int left_level = 0, right_level = 0; 962 int left_level = 0, right_level = 0;
948 int left = 0, right = 0; 963 int left = 0, right = 0;
949 int meterwidth = width - 3; 964 int meterwidth = width - 3;
950 int i, delta; 965 int i, delta;
@@ -964,12 +979,7 @@ static void peak_meter_draw(struct screen *display, struct meter_scales *scales,
964 if (peak_meter_enabled) { 979 if (peak_meter_enabled) {
965 980
966 981
967 if (level_check){ 982 peak_meter_current_vals(&left_level, &right_level);
968 /* only read the volume info from MAS if peek since last read*/
969 left_level = peak_meter_read_l();
970 right_level = peak_meter_read_r();
971 level_check = false;
972 }
973 983
974 /* scale the samples dBfs */ 984 /* scale the samples dBfs */
975 left = peak_meter_scale_value(left_level, meterwidth); 985 left = peak_meter_scale_value(left_level, meterwidth);
diff --git a/apps/recorder/peakmeter.h b/apps/recorder/peakmeter.h
index 4abcc154f3..fee4882679 100644
--- a/apps/recorder/peakmeter.h
+++ b/apps/recorder/peakmeter.h
@@ -34,6 +34,8 @@ extern void pm_reset_clipcount(void);
34extern void pm_activate_clipcount(bool active); 34extern void pm_activate_clipcount(bool active);
35 35
36extern void peak_meter_enable(bool enable); 36extern void peak_meter_enable(bool enable);
37/* sets *left and *right to the current *unscaled* values */
38extern void peak_meter_current_vals(int *left, int *right);
37 39
38extern void peak_meter_playback(bool playback); 40extern void peak_meter_playback(bool playback);
39extern int peak_meter_draw_get_btn(int action_context, int x[], int y[], 41extern int peak_meter_draw_get_btn(int action_context, int x[], int y[],
diff --git a/lib/skin_parser/tag_table.c b/lib/skin_parser/tag_table.c
index 197963f2ac..1b7fdbdb64 100644
--- a/lib/skin_parser/tag_table.c
+++ b/lib/skin_parser/tag_table.c
@@ -125,6 +125,9 @@ static const struct tag_info legal_tags[] =
125 { SKIN_TOKEN_BUTTON_VOLUME, "mv", "|D", SKIN_REFRESH_DYNAMIC }, 125 { SKIN_TOKEN_BUTTON_VOLUME, "mv", "|D", SKIN_REFRESH_DYNAMIC },
126 126
127 { SKIN_TOKEN_PEAKMETER, "pm", "", SKIN_REFRESH_PEAK_METER }, 127 { SKIN_TOKEN_PEAKMETER, "pm", "", SKIN_REFRESH_PEAK_METER },
128 { SKIN_TOKEN_PEAKMETER_LEFT, "pL", BAR_PARAMS, SKIN_REFRESH_PEAK_METER },
129 { SKIN_TOKEN_PEAKMETER_RIGHT, "pR", BAR_PARAMS, SKIN_REFRESH_PEAK_METER },
130
128 { SKIN_TOKEN_PLAYER_PROGRESSBAR, "pf", "", SKIN_REFRESH_DYNAMIC|SKIN_REFRESH_PLAYER_PROGRESS }, 131 { SKIN_TOKEN_PLAYER_PROGRESSBAR, "pf", "", SKIN_REFRESH_DYNAMIC|SKIN_REFRESH_PLAYER_PROGRESS },
129 { SKIN_TOKEN_PROGRESSBAR, "pb" , BAR_PARAMS, SKIN_REFRESH_PLAYER_PROGRESS }, 132 { SKIN_TOKEN_PROGRESSBAR, "pb" , BAR_PARAMS, SKIN_REFRESH_PLAYER_PROGRESS },
130 { SKIN_TOKEN_VOLUME, "pv" , BAR_PARAMS, SKIN_REFRESH_DYNAMIC }, 133 { SKIN_TOKEN_VOLUME, "pv" , BAR_PARAMS, SKIN_REFRESH_DYNAMIC },
diff --git a/lib/skin_parser/tag_table.h b/lib/skin_parser/tag_table.h
index a39939d225..31a5ec215f 100644
--- a/lib/skin_parser/tag_table.h
+++ b/lib/skin_parser/tag_table.h
@@ -185,6 +185,10 @@ enum skin_token_type {
185 SKIN_TOKEN_PLAYER_PROGRESSBAR, 185 SKIN_TOKEN_PLAYER_PROGRESSBAR,
186 /* Peakmeter */ 186 /* Peakmeter */
187 SKIN_TOKEN_PEAKMETER, 187 SKIN_TOKEN_PEAKMETER,
188 SKIN_TOKEN_PEAKMETER_LEFT,
189 SKIN_TOKEN_PEAKMETER_LEFTBAR,
190 SKIN_TOKEN_PEAKMETER_RIGHT,
191 SKIN_TOKEN_PEAKMETER_RIGHTBAR,
188 192
189 /* Current track */ 193 /* Current track */
190 SKIN_TOKEN_TRACK_ELAPSED_PERCENT, 194 SKIN_TOKEN_TRACK_ELAPSED_PERCENT,