diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2017-08-01 17:35:07 +0300 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2017-08-01 17:42:35 +0300 |
commit | 636289b755f6cea1167440602a06aedf5cc2e1d5 (patch) | |
tree | 52c448afa478d6829b54f5fc283352c0742ce2ec /source/blender/blenkernel/intern/unit.c | |
parent | c1e177ad29249a9508ee4f1c7b09f51fba9ac9e9 (diff) |
Fix multi-units drawing re precision handling.
This is still far from prefect, but yet much better than what we had so
far (more consistent with inheritent precision available in floats).
Note that this fixes some (currently commented out) units unittests, and
requires adjusting some others, will be done in next commit.
Diffstat (limited to 'source/blender/blenkernel/intern/unit.c')
-rw-r--r-- | source/blender/blenkernel/intern/unit.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/source/blender/blenkernel/intern/unit.c b/source/blender/blenkernel/intern/unit.c index f97b89f1fd5..8606da0743b 100644 --- a/source/blender/blenkernel/intern/unit.c +++ b/source/blender/blenkernel/intern/unit.c @@ -375,8 +375,7 @@ static size_t unit_as_string(char *str, int len_max, double value, int prec, con /* Adjust precision to expected number of significant digits. * Note that here, we shall not have to worry about very big/small numbers, units are expected to replace * 'scientific notation' in those cases. */ - const int l10 = (value_conv == 0.0) ? 0 : (int)log10(fabs(value_conv)); - prec -= l10 + (int)(l10 < 0); + prec -= integer_digits_d(value_conv); CLAMP(prec, 0, 6); /* Convert to a string */ @@ -449,12 +448,15 @@ size_t bUnit_AsString(char *str, int len_max, double value, int prec, int system size_t i; i = unit_as_string(str, len_max, value_a, prec, usys, unit_a, '\0'); + prec -= integer_digits_d(value_a / unit_b->scalar) - integer_digits_d(value_b / unit_b->scalar); + prec = max_ii(prec, 0); + /* is there enough space for at least 1 char of the next unit? */ if (i + 2 < len_max) { str[i++] = ' '; /* use low precision since this is a smaller unit */ - i += unit_as_string(str + i, len_max - i, value_b, prec ? 1 : 0, usys, unit_b, '\0'); + i += unit_as_string(str + i, len_max - i, value_b, prec, usys, unit_b, '\0'); } return i; } |