diff options
author | Christian Soffke <christian.soffke@gmail.com> | 2025-01-02 02:10:16 +0100 |
---|---|---|
committer | Christian Soffke <christian.soffke@gmail.com> | 2025-01-03 13:45:14 -0500 |
commit | 384c35418a8e693aa0a0522911edfcc58ef23069 (patch) | |
tree | 65ab1812646765a02bae6f7ec1a8221b97137153 | |
parent | af7ed73f311fcb0e4ef2e40d77369b3cc165671c (diff) | |
download | rockbox-384c35418a.tar.gz rockbox-384c35418a.zip |
FS#13537: format_sound_value alignment issue in themes
Positive values included a leading space, which
meant they weren't displayed center-aligned in
themes anymore.
Change-Id: Ibe75e9b81a2989c87630dd3ea78e4b90c6c74502
-rw-r--r-- | apps/gui/skin_engine/skin_tokens.c | 14 | ||||
-rw-r--r-- | apps/misc.c | 14 | ||||
-rw-r--r-- | apps/misc.h | 18 |
3 files changed, 28 insertions, 18 deletions
diff --git a/apps/gui/skin_engine/skin_tokens.c b/apps/gui/skin_engine/skin_tokens.c index a54da2c238..c3e81e4da0 100644 --- a/apps/gui/skin_engine/skin_tokens.c +++ b/apps/gui/skin_engine/skin_tokens.c @@ -988,7 +988,6 @@ const char *get_token_value(struct gui_wps *gwps, { int numeric_ret = -1; const char *numeric_buf = "?"; - int fmt_size; if (!gwps) return NULL; @@ -1173,17 +1172,8 @@ const char *get_token_value(struct gui_wps *gwps, break; case SKIN_TOKEN_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; + format_sound_value_ex(buf, buf_size, SOUND_VOLUME, + global_settings.volume, true); if (intval) { diff --git a/apps/misc.c b/apps/misc.c index 1557384dfa..a3823cd5a3 100644 --- a/apps/misc.c +++ b/apps/misc.c @@ -1167,8 +1167,7 @@ void replaygain_update(void) dsp_replaygain_set_settings(&settings); } -/* format a sound value like: -1.05 dB */ -int format_sound_value(char *buf, size_t size, int snd, int val) +void format_sound_value_ex(char *buf, size_t buf_sz, int snd, int val, bool skin_token) { int numdec = sound_numdecimals(snd); const char *unit = sound_unit(snd); @@ -1183,8 +1182,15 @@ int format_sound_value(char *buf, size_t size, int snd, int val) unsigned int av = abs(physval); unsigned int i = av / factor; unsigned int d = av - i*factor; - return snprintf(buf, size, "%c%u%.*s%.*u %s", " -"[physval < 0], - i, numdec, ".", numdec, d, unit); + + snprintf(buf, buf_sz, "%s%u%.*s%.*u%s%s", physval < 0 ? "-" : &" "[skin_token], + i, numdec, ".", numdec, d, &" "[skin_token], skin_token ? "" : unit); +} + +/* format a sound value as "-1.05 dB", or " 1.05 dB" */ +void format_sound_value(char *buf, size_t buf_sz, int snd, int val) +{ + format_sound_value_ex(buf, buf_sz, snd, val, false); } #endif /* !defined(__PCTOOL__) */ diff --git a/apps/misc.h b/apps/misc.h index 87765b28b1..f3c23e9f78 100644 --- a/apps/misc.h +++ b/apps/misc.h @@ -256,8 +256,22 @@ void pop_current_activity(void); void pop_current_activity_without_refresh(void); enum current_activity get_current_activity(void); -/* format a sound value like: -1.05 dB */ -int format_sound_value(char *buf, size_t len, int snd, int val); +/* Format a sound value like: "-1.05 dB" (negative values) + * " 1.05 dB" (positive values include leading space) + */ +void format_sound_value(char *buf, size_t buf_sz, int snd, int val); + +/* Set skin_token parameter to true to format a sound value for + * display in themes, like: "-1.05" (negative values) + * "1.05" (positive values without leading space) + * + * (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.) + */ +void format_sound_value_ex(char *buf, size_t buf_sz, int snd, int val, bool skin_token); #ifndef PLUGIN enum core_load_bmp_error |