summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Soffke <christian.soffke@gmail.com>2025-01-02 02:10:16 +0100
committerChristian Soffke <christian.soffke@gmail.com>2025-01-03 13:45:14 -0500
commit384c35418a8e693aa0a0522911edfcc58ef23069 (patch)
tree65ab1812646765a02bae6f7ec1a8221b97137153
parentaf7ed73f311fcb0e4ef2e40d77369b3cc165671c (diff)
downloadrockbox-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.c14
-rw-r--r--apps/misc.c14
-rw-r--r--apps/misc.h18
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