raster pushed a commit to branch master. http://git.enlightenment.org/core/enlightenment.git/commit/?id=71b5cb3e7c963f10af9be66df958ac98e92f8042
commit 71b5cb3e7c963f10af9be66df958ac98e92f8042 Author: Carsten Haitzler (Rasterman) <[email protected]> Date: Fri Jun 5 11:21:20 2020 +0100 xsettings - always use decimal for format for float prints snprintf will use locale and maybe print 10,24 instead of 10.24 ... thus use a custom routine to specially do this always by hand without mssing with locale. @fix --- src/bin/e_xsettings.c | 53 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 46 insertions(+), 7 deletions(-) diff --git a/src/bin/e_xsettings.c b/src/bin/e_xsettings.c index ba9aa06e5..ee672c24c 100644 --- a/src/bin/e_xsettings.c +++ b/src/bin/e_xsettings.c @@ -509,6 +509,44 @@ _e_xsettings_theme_set(void) _e_xsettings_string_set(_setting_theme_name, NULL); } +static int +_dbl_to_str(char *buf, size_t buf_size, double val, int decimals) +{ + int ival; + size_t l = 0; + + if (val < 0) + { + if (buf_size < 2) return -1; + val = -val; + buf[0] = '-'; + buf[1] = 0; + l++; + } + ival = val; + snprintf(buf + l, buf_size - l, "%i", ival); + if (decimals <= 0) return 0; + l = strlen(buf); + if (l >= (buf_size - 2)) return -1; + buf[l] = '.'; + buf[l + 1] = 0; + l++; + + while (decimals > 0) + { + if (l >= (buf_size - 1)) return -1; + val *= 10.0; + ival = val; + val = val - ival; + buf[l] = '0' + (ival % 10); + buf[l + 1] = 0; + l++; + if (l >= (buf_size - 1)) return -1; + decimals--; + } + return 0; +} + static void _e_xsettings_font_set(void) { @@ -525,17 +563,18 @@ _e_xsettings_font_set(void) Eina_Strbuf *buf; Eina_List *l; int size = efd->size; - char size_buf[12]; + char size_buf[32]; const char *p; /* TODO better way to convert evas font sizes? */ - if (!size) size = 12; - else if (size < 0) size /= -10; - else if (size < 5) size = 5; - else if (size > 25) size = 25; + if (!size) size = 10; // default if not set + else if (size < 0) size /= -10; // in 1/10th units + + // limit sizes + if (size < 5) size = 5; // don't allow too small + else if (size > 100) size = 100; // don't allow silly sizes - /* Convert from pixels to point. */ - snprintf(size_buf, sizeof(size_buf), "%1.1f", (float) size * 0.75); + _dbl_to_str(size_buf, sizeof(size_buf), (double)size * 0.75, 3); buf = eina_strbuf_new(); eina_strbuf_append(buf, efp->name); --
