diff options
author | Ramil Roosileht <Limarest> | 2022-06-08 21:51:29 +0300 |
---|---|---|
committer | Joseph Eagar <joeedh@gmail.com> | 2022-06-08 21:51:29 +0300 |
commit | f69c565a33ca58bb95a2bd22de0e211799508182 (patch) | |
tree | f5e1787f21c59ccff85c403afa51db7069304f49 | |
parent | fe4e646405eb3a8e38617411a2f9b1b8f6b8a8cb (diff) |
D15085: Fix numbers jumping in edit voxel size widget
Introduces an option for BKE_unit_value_as_string to skip stripping of zeroes, thus reducing flickering when using edit voxel size widget.
{F13125416}
Reviewed By: Julien Kaspar & Joseph Eagar
Differential Revision: https://developer.blender.org/D15085
Ref D15085
m--------- | release/scripts/addons | 0 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/unit.c | 14 | ||||
-rw-r--r-- | source/blender/editors/object/object_remesh.cc | 2 |
3 files changed, 13 insertions, 3 deletions
diff --git a/release/scripts/addons b/release/scripts/addons -Subproject d990559d7b19593cbaff17ba59b8dd9d0d60e61 +Subproject c51e0bb1793c44c7a1b7435593dd5022cf7c8ee diff --git a/source/blender/blenkernel/intern/unit.c b/source/blender/blenkernel/intern/unit.c index 30e02e5411b..2520ce5179f 100644 --- a/source/blender/blenkernel/intern/unit.c +++ b/source/blender/blenkernel/intern/unit.c @@ -460,11 +460,19 @@ static size_t unit_as_string(char *str, } double value_conv = (value / unit->scalar) - unit->bias; + bool strip_skip; /* 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. */ prec -= integer_digits_d(value_conv); + + /* Negative precision is used to disable stripping of zeroes. This reduces text jumping when changing values. */ + if (prec < 0) { + strip_skip = true; + prec *= -1; + } + CLAMP(prec, 0, 6); /* Convert to a string. */ @@ -478,8 +486,10 @@ static size_t unit_as_string(char *str, size_t i = len - 1; if (prec > 0) { - while (i > 0 && str[i] == '0') { /* 4.300 -> 4.3 */ - str[i--] = pad; + if (!strip_skip) { + while (i > 0 && str[i] == '0') { /* 4.300 -> 4.3 */ + str[i--] = pad; + } } if (i > 0 && str[i] == '.') { /* 10. -> 10 */ diff --git a/source/blender/editors/object/object_remesh.cc b/source/blender/editors/object/object_remesh.cc index ba2efa6e517..71b757b66ff 100644 --- a/source/blender/editors/object/object_remesh.cc +++ b/source/blender/editors/object/object_remesh.cc @@ -344,7 +344,7 @@ static void voxel_size_edit_draw(const bContext *C, ARegion *UNUSED(ar), void *a BKE_unit_value_as_string(str, VOXEL_SIZE_EDIT_MAX_STR_LEN, (double)(cd->voxel_size * unit->scale_length), - 4, + -3, B_UNIT_LENGTH, unit, true); |