diff options
author | Aidan MacDonald <amachronic@protonmail.com> | 2021-04-09 00:54:10 +0100 |
---|---|---|
committer | Solomon Peachy <pizza@shaftnet.org> | 2021-04-09 10:53:44 +0000 |
commit | 10facef17b1983360944a771f15c58dee04a9523 (patch) | |
tree | 79ccd7e20bd5646965449fdf91e72034d120fb9b | |
parent | 9847f9c85e08c5d6917e0e57fcc492d35dcb1c44 (diff) | |
download | rockbox-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.c | 14 |
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); |