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
This commit is contained in:
committed by
Joseph Eagar
parent
fe4e646405
commit
f69c565a33
Submodule release/scripts/addons updated: d990559d7b...c51e0bb179
@@ -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 */
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user