Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRamil Roosileht <Limarest>2022-06-08 21:51:29 +0300
committerJoseph Eagar <joeedh@gmail.com>2022-06-08 21:51:29 +0300
commitf69c565a33ca58bb95a2bd22de0e211799508182 (patch)
treef5e1787f21c59ccff85c403afa51db7069304f49
parentfe4e646405eb3a8e38617411a2f9b1b8f6b8a8cb (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/addons0
-rw-r--r--source/blender/blenkernel/intern/unit.c14
-rw-r--r--source/blender/editors/object/object_remesh.cc2
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);