summaryrefslogtreecommitdiff
path: root/apps/gui
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 /apps/gui
parentc8535f27d140a2030cedf695a66595aae5b95c27 (diff)
downloadrockbox-261c56ba59235c2da2aa644fbea0b1fa492bd1c6.zip
rockbox-261c56ba59235c2da2aa644fbea0b1fa492bd1c6.tar.gz
rockbox-261c56ba59235c2da2aa644fbea0b1fa492bd1c6.tar.bz2
rockbox-261c56ba59235c2da2aa644fbea0b1fa492bd1c6.tar.xz
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
Diffstat (limited to 'apps/gui')
-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
4 files changed, 40 insertions, 0 deletions
diff --git a/apps/gui/skin_engine/skin_display.c b/apps/gui/skin_engine/skin_display.c
index 47de463..d38c8fd 100644
--- a/apps/gui/skin_engine/skin_display.c
+++ b/apps/gui/skin_engine/skin_display.c
@@ -42,6 +42,7 @@
#include "playlist.h"
#include "audio.h"
#include "tagcache.h"
+#include "peakmeter.h"
#ifdef HAVE_LCD_BITMAP
#include "peakmeter.h"
@@ -159,6 +160,15 @@ void draw_progressbar(struct gui_wps *gwps, int line, struct progressbar *pb)
length = 100;
end = battery_level();
}
+ else if (pb->type == SKIN_TOKEN_PEAKMETER_LEFTBAR ||
+ pb->type == SKIN_TOKEN_PEAKMETER_RIGHTBAR)
+ {
+ int left, right, val;
+ peak_meter_current_vals(&left, &right);
+ val = pb->type == SKIN_TOKEN_PEAKMETER_LEFTBAR ? left : right;
+ length = MAX_PEAK;
+ end = peak_meter_scale_value(val, length);
+ }
#if CONFIG_TUNER
else if (in_radio_screen() || (get_radio_status() != FMRADIO_OFF))
{
diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c
index f292ff3..5a90873 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,
token->type = SKIN_TOKEN_BATTERY_PERCENTBAR;
else if (token->type == SKIN_TOKEN_TUNER_RSSI)
token->type = SKIN_TOKEN_TUNER_RSSI_BAR;
+ else if (token->type == SKIN_TOKEN_PEAKMETER_LEFT)
+ token->type = SKIN_TOKEN_PEAKMETER_LEFTBAR;
+ else if (token->type == SKIN_TOKEN_PEAKMETER_RIGHT)
+ token->type = SKIN_TOKEN_PEAKMETER_RIGHTBAR;
pb->type = token->type;
return 0;
@@ -1410,6 +1414,8 @@ static int skin_element_callback(struct skin_element* element, void* data)
case SKIN_TOKEN_VOLUME:
case SKIN_TOKEN_BATTERY_PERCENT:
case SKIN_TOKEN_PLAYER_PROGRESSBAR:
+ case SKIN_TOKEN_PEAKMETER_LEFT:
+ case SKIN_TOKEN_PEAKMETER_RIGHT:
#ifdef HAVE_RADIO_RSSI
case SKIN_TOKEN_TUNER_RSSI:
#endif
diff --git a/apps/gui/skin_engine/skin_render.c b/apps/gui/skin_engine/skin_render.c
index 68a5433..424e0c2 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,
draw_peakmeters(gwps, info->line_number, vp);
break;
#endif
+#ifdef HAVE_LCD_BITMAP
+ case SKIN_TOKEN_PEAKMETER_LEFTBAR:
+ case SKIN_TOKEN_PEAKMETER_RIGHTBAR:
+ data->peak_meter_enabled = true;
+ /* fall through to the progressbar code */
+#endif
case SKIN_TOKEN_VOLUMEBAR:
case SKIN_TOKEN_BATTERY_PERCENTBAR:
#ifdef HAVE_LCD_BITMAP
diff --git a/apps/gui/skin_engine/skin_tokens.c b/apps/gui/skin_engine/skin_tokens.c
index 217835a..c644d5b 100644
--- a/apps/gui/skin_engine/skin_tokens.c
+++ b/apps/gui/skin_engine/skin_tokens.c
@@ -59,6 +59,7 @@
#include "skin_engine.h"
#include "statusbar-skinned.h"
#include "root_menu.h"
+#include "peakmeter.h"
#ifdef HAVE_RECORDING
#include "recording.h"
#include "pcm_record.h"
@@ -1267,6 +1268,23 @@ const char *get_token_value(struct gui_wps *gwps,
#endif
+#ifdef HAVE_LCD_BITMAP
+ /* peakmeter */
+ case SKIN_TOKEN_PEAKMETER_LEFT:
+ case SKIN_TOKEN_PEAKMETER_RIGHT:
+ {
+ int left, right, val;
+ peak_meter_current_vals(&left, &right);
+ val = token->type == SKIN_TOKEN_PEAKMETER_LEFT ?
+ left : right;
+ val = peak_meter_scale_value(val, limit==1 ? MAX_PEAK : limit);
+ if (intval)
+ *intval = val;
+ snprintf(buf, buf_size, "%d", val);
+ data->peak_meter_enabled = true;
+ return buf;
+ }
+#endif
#if (CONFIG_CODEC == SWCODEC)
case SKIN_TOKEN_CROSSFADE: