diff options
Diffstat (limited to 'source/blender/editors/util')
-rw-r--r-- | source/blender/editors/util/ed_transverts.c | 2 | ||||
-rw-r--r-- | source/blender/editors/util/ed_util.c | 2 | ||||
-rw-r--r-- | source/blender/editors/util/numinput.c | 30 |
3 files changed, 20 insertions, 14 deletions
diff --git a/source/blender/editors/util/ed_transverts.c b/source/blender/editors/util/ed_transverts.c index 3bd927e5b25..104b628c25a 100644 --- a/source/blender/editors/util/ed_transverts.c +++ b/source/blender/editors/util/ed_transverts.c @@ -192,7 +192,7 @@ static void set_mapped_co(void *vuserdata, int index, const float co[3], bool ED_transverts_check_obedit(Object *obedit) { - return (ELEM6(obedit->type, OB_ARMATURE, OB_LATTICE, OB_MESH, OB_SURF, OB_CURVE, OB_MBALL)); + return (ELEM(obedit->type, OB_ARMATURE, OB_LATTICE, OB_MESH, OB_SURF, OB_CURVE, OB_MBALL)); } void ED_transverts_create_from_obedit(TransVertStore *tvs, Object *obedit, const int mode) diff --git a/source/blender/editors/util/ed_util.c b/source/blender/editors/util/ed_util.c index 47fbfbe3eba..56b12fcdcda 100644 --- a/source/blender/editors/util/ed_util.c +++ b/source/blender/editors/util/ed_util.c @@ -86,7 +86,7 @@ void ED_editors_init(bContext *C) /* This is called during initialization, so we don't want to store any reports */ ReportList *reports = CTX_wm_reports(C); - int reports_flag_prev = reports->flag &= ~RPT_STORE; + int reports_flag_prev = reports->flag & ~RPT_STORE; SWAP(int, reports->flag, reports_flag_prev); diff --git a/source/blender/editors/util/numinput.c b/source/blender/editors/util/numinput.c index a618ab8419b..a154f12a786 100644 --- a/source/blender/editors/util/numinput.c +++ b/source/blender/editors/util/numinput.c @@ -33,6 +33,7 @@ #include "BLI_string_cursor_utf8.h" #include "BKE_context.h" +#include "BKE_scene.h" #include "BKE_unit.h" #include "DNA_scene_types.h" @@ -87,7 +88,7 @@ void initNumInput(NumInput *n) } /* str must be NUM_STR_REP_LEN * (idx_max + 1) length. */ -void outputNumInput(NumInput *n, char *str, const float scale_length) +void outputNumInput(NumInput *n, char *str, UnitSettings *unit_settings) { short j; const int ln = NUM_STR_REP_LEN; @@ -98,7 +99,7 @@ void outputNumInput(NumInput *n, char *str, const float scale_length) const short i = (n->flag & NUM_AFFECT_ALL && n->idx != j && !(n->val_flag[j] & NUM_EDITED)) ? 0 : j; /* Use scale_length if needed! */ - const float fac = ELEM3(n->unit_type[j], B_UNIT_LENGTH, B_UNIT_AREA, B_UNIT_VOLUME) ? scale_length : 1.0f; + const float fac = (float)BKE_scene_unit_scale(unit_settings, n->unit_type[j], 1.0); if (n->val_flag[i] & NUM_EDITED) { /* Get the best precision, allows us to draw '10.0001' as '10' instead! */ @@ -189,15 +190,15 @@ bool applyNumInput(NumInput *n, float *vec) if (n->val_flag[i] & NUM_NO_NEGATIVE && val < 0.0f) { val = 0.0f; } - if (n->val_flag[i] & NUM_NO_ZERO && val == 0.0f) { - val = 0.0001f; - } if (n->val_flag[i] & NUM_NO_FRACTION && val != floorf(val)) { val = floorf(val + 0.5f); if (n->val_flag[i] & NUM_NO_ZERO && val == 0.0f) { val = 1.0f; } } + else if (n->val_flag[i] & NUM_NO_ZERO && val == 0.0f) { + val = 0.0001f; + } } vec[j] = val; } @@ -442,6 +443,13 @@ bool handleNumInput(bContext *C, NumInput *n, const wmEvent *event) } } + /* Up to this point, if we have a ctrl modifier, skip. + * This allows to still access most of modals' shortcuts even in numinput mode. + */ + if (!updated && event->ctrl) { + return false; + } + if ((!utf8_buf || !utf8_buf[0]) && ascii[0]) { /* Fallback to ascii. */ utf8_buf = ascii; @@ -471,26 +479,24 @@ bool handleNumInput(bContext *C, NumInput *n, const wmEvent *event) #ifdef WITH_PYTHON Scene *sce = CTX_data_scene(C); double val; - float fac = 1.0f; char str_unit_convert[NUM_STR_REP_LEN * 6]; /* Should be more than enough! */ const char *default_unit = NULL; + /* Use scale_length if needed! */ + const float fac = (float)BKE_scene_unit_scale(&sce->unit, n->unit_type[idx], 1.0); + /* Make radian default unit when needed. */ if (n->unit_use_radians && n->unit_type[idx] == B_UNIT_ROTATION) default_unit = "r"; - /* Use scale_length if needed! */ - if (ELEM3(n->unit_type[idx], B_UNIT_LENGTH, B_UNIT_AREA, B_UNIT_VOLUME)) - fac /= sce->unit.scale_length; - BLI_strncpy(str_unit_convert, n->str, sizeof(str_unit_convert)); - bUnit_ReplaceString(str_unit_convert, sizeof(str_unit_convert), default_unit, 1.0, + bUnit_ReplaceString(str_unit_convert, sizeof(str_unit_convert), default_unit, fac, n->unit_sys, n->unit_type[idx]); /* Note: with angles, we always get values as radians here... */ if (BPY_button_exec(C, str_unit_convert, &val, false) != -1) { - n->val[idx] = (float)val * fac; + n->val[idx] = (float)val; n->val_flag[idx] &= ~NUM_INVALID; } else { |