summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAidan MacDonald <amachronic@protonmail.com>2021-04-09 00:54:10 +0100
committerSolomon Peachy <pizza@shaftnet.org>2021-04-09 10:53:44 +0000
commit10facef17b1983360944a771f15c58dee04a9523 (patch)
tree79ccd7e20bd5646965449fdf91e72034d120fb9b
parent9847f9c85e08c5d6917e0e57fcc492d35dcb1c44 (diff)
downloadrockbox-10facef17b.tar.gz
rockbox-10facef17b.zip
Skin engine: respect volume decimalization
This is basically the same problem as FS#13272, except it happens on certain themes, eg. rayboradio. The issue only affects targets with decimal volume levels. Tested the fix using the rayboradio theme on the FiiO M3K and the Fuze+ simulator. Volume was displayed correctly on both. Change-Id: I9e035f7a3c04c85c9b3b01243c7f0a5f8f0ccf9f
-rw-r--r--apps/gui/skin_engine/skin_tokens.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/apps/gui/skin_engine/skin_tokens.c b/apps/gui/skin_engine/skin_tokens.c
index b36b49c626..a0de45d3e3 100644
--- a/apps/gui/skin_engine/skin_tokens.c
+++ b/apps/gui/skin_engine/skin_tokens.c
@@ -670,6 +670,7 @@ const char *get_token_value(struct gui_wps *gwps,
{
int numeric_ret = -1;
const char *numeric_buf = "?";
+ int fmt_size;
if (!gwps)
return NULL;
@@ -886,7 +887,18 @@ const char *get_token_value(struct gui_wps *gwps,
break;
case SKIN_TOKEN_VOLUME:
- snprintf(buf, buf_size, "%d", global_settings.volume);
+ fmt_size = format_sound_value(buf, buf_size, SOUND_VOLUME,
+ global_settings.volume);
+ /* FIXME: this is a cheap hack to avoid breaking existing themes.
+ * The new formatting includes a unit based on the AUDIOHW_SETTING
+ * definition -- on all targets, it's defined to be "dB". But the
+ * old formatting was just an integer value, and many themes append
+ * "dB" manually. So we need to strip the unit to unbreak all those
+ * existing themes.
+ */
+ if(fmt_size >= 3 && !strcmp(&buf[fmt_size - 3], " dB"))
+ buf[fmt_size - 3] = 0;
+
if (intval)
{
int minvol = sound_min(SOUND_VOLUME);