summaryrefslogtreecommitdiff
path: root/apps/gui
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 /apps/gui
parent9847f9c85e08c5d6917e0e57fcc492d35dcb1c44 (diff)
downloadrockbox-10facef17b1983360944a771f15c58dee04a9523.tar.gz
rockbox-10facef17b1983360944a771f15c58dee04a9523.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
Diffstat (limited to 'apps/gui')
-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,
670{ 670{
671 int numeric_ret = -1; 671 int numeric_ret = -1;
672 const char *numeric_buf = "?"; 672 const char *numeric_buf = "?";
673 int fmt_size;
673 674
674 if (!gwps) 675 if (!gwps)
675 return NULL; 676 return NULL;
@@ -886,7 +887,18 @@ const char *get_token_value(struct gui_wps *gwps,
886 break; 887 break;
887 888
888 case SKIN_TOKEN_VOLUME: 889 case SKIN_TOKEN_VOLUME:
889 snprintf(buf, buf_size, "%d", global_settings.volume); 890 fmt_size = format_sound_value(buf, buf_size, SOUND_VOLUME,
891 global_settings.volume);
892 /* FIXME: this is a cheap hack to avoid breaking existing themes.
893 * The new formatting includes a unit based on the AUDIOHW_SETTING
894 * definition -- on all targets, it's defined to be "dB". But the
895 * old formatting was just an integer value, and many themes append
896 * "dB" manually. So we need to strip the unit to unbreak all those
897 * existing themes.
898 */
899 if(fmt_size >= 3 && !strcmp(&buf[fmt_size - 3], " dB"))
900 buf[fmt_size - 3] = 0;
901
890 if (intval) 902 if (intval)
891 { 903 {
892 int minvol = sound_min(SOUND_VOLUME); 904 int minvol = sound_min(SOUND_VOLUME);