diff options
Diffstat (limited to 'source/blender/editors/transform/transform.c')
-rw-r--r-- | source/blender/editors/transform/transform.c | 168 |
1 files changed, 95 insertions, 73 deletions
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 3f9077421b1..d6ce32f9974 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -168,11 +168,12 @@ static void applyBoneEnvelope(TransInfo *t, const int mval[2]); static void initBoneRoll(TransInfo *t); static void applyBoneRoll(TransInfo *t, const int mval[2]); -static void initEdgeSlide_ex(TransInfo *t, bool use_double_side); +static void initEdgeSlide_ex(TransInfo *t, bool use_double_side, bool use_even, bool flipped, bool use_clamp); static void initEdgeSlide(TransInfo *t); static eRedrawFlag handleEventEdgeSlide(TransInfo *t, const struct wmEvent *event); static void applyEdgeSlide(TransInfo *t, const int mval[2]); +static void initVertSlide_ex(TransInfo *t, bool use_even, bool flipped, bool use_clamp); static void initVertSlide(TransInfo *t); static eRedrawFlag handleEventVertSlide(TransInfo *t, const struct wmEvent *event); static void applyVertSlide(TransInfo *t, const int mval[2]); @@ -1037,6 +1038,7 @@ int transformEvent(TransInfo *t, const wmEvent *event) } /* vert slide can fail on unconnected vertices (rare but possible) */ if (t->state == TRANS_CANCEL) { + t->mode = TFM_TRANSLATION; t->state = TRANS_STARTING; restoreTransObjects(t); resetTransRestrictions(t); @@ -1063,15 +1065,14 @@ int transformEvent(TransInfo *t, const wmEvent *event) /* only switch when... */ if (!(t->options & CTX_TEXTURE) && !(t->options & (CTX_MOVIECLIP | CTX_MASK))) { if (ELEM(t->mode, TFM_ROTATION, TFM_RESIZE, TFM_TRACKBALL, TFM_TRANSLATION, TFM_EDGE_SLIDE, TFM_VERT_SLIDE)) { + restoreTransObjects(t); resetTransModal(t); resetTransRestrictions(t); if (t->mode == TFM_ROTATION) { - restoreTransObjects(t); initTrackball(t); } else { - restoreTransObjects(t); initRotation(t); } initSnapping(t, NULL); // need to reinit after mode change @@ -1363,15 +1364,14 @@ int transformEvent(TransInfo *t, const wmEvent *event) /* only switch when... */ if (!(t->options & CTX_TEXTURE)) { if (ELEM(t->mode, TFM_ROTATION, TFM_RESIZE, TFM_TRACKBALL, TFM_TRANSLATION)) { + restoreTransObjects(t); resetTransModal(t); resetTransRestrictions(t); if (t->mode == TFM_ROTATION) { - restoreTransObjects(t); initTrackball(t); } else { - restoreTransObjects(t); initRotation(t); } initSnapping(t, NULL); // need to reinit after mode change @@ -1721,7 +1721,7 @@ static void drawHelpline(bContext *UNUSED(C), int x, int y, void *customdata) glVertex2fv(cent); glEnd(); - glTranslatef(mval[0], mval[1], 0); + glTranslate2iv(mval); glRotatef(-RAD2DEGF(atan2f(cent[0] - t->mval[0], cent[1] - t->mval[1])), 0, 0, 1); setlinestyle(0); @@ -1733,7 +1733,7 @@ static void drawHelpline(bContext *UNUSED(C), int x, int y, void *customdata) case HLP_HARROW: UI_ThemeColor(TH_VIEW_OVERLAY); - glTranslatef(mval[0], mval[1], 0); + glTranslate2iv(mval); glLineWidth(3.0); drawArrow(RIGHT, 5, 10, 5); @@ -1743,7 +1743,7 @@ static void drawHelpline(bContext *UNUSED(C), int x, int y, void *customdata) case HLP_VARROW: UI_ThemeColor(TH_VIEW_OVERLAY); - glTranslatef(mval[0], mval[1], 0); + glTranslate2iv(mval); glLineWidth(3.0); drawArrow(UP, 5, 10, 5); @@ -1794,7 +1794,7 @@ static void drawHelpline(bContext *UNUSED(C), int x, int y, void *customdata) unsigned char col[3], col2[3]; UI_GetThemeColor3ubv(TH_GRID, col); - glTranslatef(mval[0], mval[1], 0); + glTranslate2iv(mval); glLineWidth(3.0); @@ -2077,47 +2077,41 @@ bool initTransform(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve t->launch_event = LEFTMOUSE; } + unit_m3(t->spacemtx); + initTransInfo(C, t, op, event); + initTransformOrientation(C, t); if (t->spacetype == SPACE_VIEW3D) { - initTransformOrientation(C, t); - t->draw_handle_apply = ED_region_draw_cb_activate(t->ar->type, drawTransformApply, t, REGION_DRAW_PRE_VIEW); t->draw_handle_view = ED_region_draw_cb_activate(t->ar->type, drawTransformView, t, REGION_DRAW_POST_VIEW); t->draw_handle_pixel = ED_region_draw_cb_activate(t->ar->type, drawTransformPixel, t, REGION_DRAW_POST_PIXEL); t->draw_handle_cursor = WM_paint_cursor_activate(CTX_wm_manager(C), helpline_poll, drawHelpline, t); } else if (t->spacetype == SPACE_IMAGE) { - unit_m3(t->spacemtx); t->draw_handle_view = ED_region_draw_cb_activate(t->ar->type, drawTransformView, t, REGION_DRAW_POST_VIEW); //t->draw_handle_pixel = ED_region_draw_cb_activate(t->ar->type, drawTransformPixel, t, REGION_DRAW_POST_PIXEL); t->draw_handle_cursor = WM_paint_cursor_activate(CTX_wm_manager(C), helpline_poll, drawHelpline, t); } else if (t->spacetype == SPACE_CLIP) { - unit_m3(t->spacemtx); t->draw_handle_view = ED_region_draw_cb_activate(t->ar->type, drawTransformView, t, REGION_DRAW_POST_VIEW); t->draw_handle_cursor = WM_paint_cursor_activate(CTX_wm_manager(C), helpline_poll, drawHelpline, t); } else if (t->spacetype == SPACE_NODE) { - unit_m3(t->spacemtx); /*t->draw_handle_apply = ED_region_draw_cb_activate(t->ar->type, drawTransformApply, t, REGION_DRAW_PRE_VIEW);*/ t->draw_handle_view = ED_region_draw_cb_activate(t->ar->type, drawTransformView, t, REGION_DRAW_POST_VIEW); t->draw_handle_cursor = WM_paint_cursor_activate(CTX_wm_manager(C), helpline_poll, drawHelpline, t); } else if (t->spacetype == SPACE_IPO) { - unit_m3(t->spacemtx); t->draw_handle_view = ED_region_draw_cb_activate(t->ar->type, drawTransformView, t, REGION_DRAW_POST_VIEW); //t->draw_handle_pixel = ED_region_draw_cb_activate(t->ar->type, drawTransformPixel, t, REGION_DRAW_POST_PIXEL); t->draw_handle_cursor = WM_paint_cursor_activate(CTX_wm_manager(C), helpline_poll, drawHelpline, t); } else if (t->spacetype == SPACE_ACTION) { - unit_m3(t->spacemtx); t->draw_handle_view = ED_region_draw_cb_activate(t->ar->type, drawTransformView, t, REGION_DRAW_POST_VIEW); //t->draw_handle_pixel = ED_region_draw_cb_activate(t->ar->type, drawTransformPixel, t, REGION_DRAW_POST_PIXEL); t->draw_handle_cursor = WM_paint_cursor_activate(CTX_wm_manager(C), helpline_poll, drawHelpline, t); } - else - unit_m3(t->spacemtx); createTransData(C, t); // make TransData structs from selection @@ -2234,14 +2228,20 @@ bool initTransform(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve t->mode = TFM_BONE_ENVELOPE_DIST; break; case TFM_EDGE_SLIDE: + case TFM_VERT_SLIDE: { - const bool use_double_side = (op ? !RNA_boolean_get(op->ptr, "single_side") : true); - initEdgeSlide_ex(t, use_double_side); + const bool use_even = (op ? RNA_boolean_get(op->ptr, "use_even") : false); + const bool flipped = (op ? RNA_boolean_get(op->ptr, "flipped") : false); + const bool use_clamp = (op ? RNA_boolean_get(op->ptr, "use_clamp") : true); + if (mode == TFM_EDGE_SLIDE) { + const bool use_double_side = (op ? !RNA_boolean_get(op->ptr, "single_side") : true); + initEdgeSlide_ex(t, use_double_side, use_even, flipped, use_clamp); + } + else { + initVertSlide_ex(t, use_even, flipped, use_clamp); + } break; } - case TFM_VERT_SLIDE: - initVertSlide(t); - break; case TFM_BONE_ROLL: initBoneRoll(t); break; @@ -3092,6 +3092,7 @@ static void applyShear(TransInfo *t, const int UNUSED(mval[2])) float value; int i; char str[MAX_INFO_LEN]; + const bool is_local_center = transdata_check_local_center(t, t->around); copy_m3_m4(persmat, t->viewmat); invert_m3_m3(persinv, persmat); @@ -3127,8 +3128,10 @@ static void applyShear(TransInfo *t, const int UNUSED(mval[2])) mul_m3_m3m3(tmat, smat, persmat); mul_m3_m3m3(totmat, persinv, tmat); - + for (i = 0; i < t->total; i++, td++) { + const float *center, *co; + if (td->flag & TD_NOACTION) break; @@ -3143,12 +3146,22 @@ static void applyShear(TransInfo *t, const int UNUSED(mval[2])) else { copy_m3_m3(tmat, totmat); } - sub_v3_v3v3(vec, td->center, t->center); + + if (is_local_center) { + center = td->center; + co = td->loc; + } + else { + center = t->center; + co = td->center; + } + + sub_v3_v3v3(vec, co, center); mul_m3_v3(tmat, vec); - add_v3_v3(vec, t->center); - sub_v3_v3(vec, td->center); + add_v3_v3(vec, center); + sub_v3_v3(vec, co); mul_v3_fl(vec, td->factor); @@ -5967,7 +5980,7 @@ static void calcEdgeSlide_mval_range( } } -static void calcEdgeSlide_non_proportional( +static void calcEdgeSlide_even( TransInfo *t, EdgeSlideData *sld, const float mval[2]) { TransDataEdgeSlideVert *sv = sld->sv; @@ -6013,7 +6026,7 @@ static void calcEdgeSlide_non_proportional( } } -static bool createEdgeSlideVerts_double_side(TransInfo *t) +static bool createEdgeSlideVerts_double_side(TransInfo *t, bool use_even, bool flipped, bool use_clamp) { BMEditMesh *em = BKE_editmesh_from_object(t->obedit); BMesh *bm = em->bm; @@ -6032,9 +6045,11 @@ static bool createEdgeSlideVerts_double_side(TransInfo *t) slide_origdata_init_flag(t, &sld->orig_data); - sld->is_proportional = true; + sld->use_even = use_even; sld->curr_sv_index = 0; - sld->flipped_vtx = false; + sld->flipped = flipped; + if (!use_clamp) + t->flag |= T_ALT_TRANSFORM; /*ensure valid selection*/ BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { @@ -6340,7 +6355,7 @@ static bool createEdgeSlideVerts_double_side(TransInfo *t) slide_origdata_create_data(t, &sld->orig_data, (TransDataGenericSlideVert *)sld->sv, sizeof(*sld->sv), sld->totsv); if (rv3d) { - calcEdgeSlide_non_proportional(t, sld, mval); + calcEdgeSlide_even(t, sld, mval); } sld->em = em; @@ -6358,7 +6373,7 @@ static bool createEdgeSlideVerts_double_side(TransInfo *t) * A simple version of #createEdgeSlideVerts_double_side * Which assumes the longest unselected. */ -static bool createEdgeSlideVerts_single_side(TransInfo *t) +static bool createEdgeSlideVerts_single_side(TransInfo *t, bool use_even, bool flipped, bool use_clamp) { BMEditMesh *em = BKE_editmesh_from_object(t->obedit); BMesh *bm = em->bm; @@ -6383,10 +6398,12 @@ static bool createEdgeSlideVerts_single_side(TransInfo *t) slide_origdata_init_flag(t, &sld->orig_data); - sld->is_proportional = true; + sld->use_even = use_even; sld->curr_sv_index = 0; - /* heppans to be best for single-sided */ - sld->flipped_vtx = true; + /* happens to be best for single-sided */ + sld->flipped = !flipped; + if (!use_clamp) + t->flag |= T_ALT_TRANSFORM; /* ensure valid selection */ j = 0; @@ -6532,7 +6549,7 @@ static bool createEdgeSlideVerts_single_side(TransInfo *t) slide_origdata_create_data(t, &sld->orig_data, (TransDataGenericSlideVert *)sld->sv, sizeof(*sld->sv), sld->totsv); if (rv3d) { - calcEdgeSlide_non_proportional(t, sld, mval); + calcEdgeSlide_even(t, sld, mval); } sld->em = em; @@ -6580,7 +6597,7 @@ void freeEdgeSlideVerts(TransInfo *t) t->customData = NULL; } -static void initEdgeSlide_ex(TransInfo *t, bool use_double_side) +static void initEdgeSlide_ex(TransInfo *t, bool use_double_side, bool use_even, bool flipped, bool use_clamp) { EdgeSlideData *sld; bool ok; @@ -6590,10 +6607,10 @@ static void initEdgeSlide_ex(TransInfo *t, bool use_double_side) t->handleEvent = handleEventEdgeSlide; if (use_double_side) { - ok = createEdgeSlideVerts_double_side(t); + ok = createEdgeSlideVerts_double_side(t, use_even, flipped, use_clamp); } else { - ok = createEdgeSlideVerts_single_side(t); + ok = createEdgeSlideVerts_single_side(t, use_even, flipped, use_clamp); } if (!ok) { @@ -6627,7 +6644,7 @@ static void initEdgeSlide_ex(TransInfo *t, bool use_double_side) static void initEdgeSlide(TransInfo *t) { - initEdgeSlide_ex(t, true); + initEdgeSlide_ex(t, true, false, false, true); } static eRedrawFlag handleEventEdgeSlide(struct TransInfo *t, const struct wmEvent *event) @@ -6639,16 +6656,14 @@ static eRedrawFlag handleEventEdgeSlide(struct TransInfo *t, const struct wmEven switch (event->type) { case EKEY: if (event->val == KM_PRESS) { - sld->is_proportional = !sld->is_proportional; + sld->use_even = !sld->use_even; calcEdgeSlideCustomPoints(t); return TREDRAW_HARD; } break; case FKEY: if (event->val == KM_PRESS) { - if (sld->is_proportional == false) { - sld->flipped_vtx = !sld->flipped_vtx; - } + sld->flipped = !sld->flipped; calcEdgeSlideCustomPoints(t); return TREDRAW_HARD; } @@ -6688,8 +6703,8 @@ static void drawEdgeSlide(TransInfo *t) EdgeSlideData *sld = t->customData; const bool is_clamp = !(t->flag & T_ALT_TRANSFORM); - /* Non-Prop mode */ - if ((sld->is_proportional == false) || (is_clamp == false)) { + /* Even mode */ + if ((sld->use_even == true) || (is_clamp == false)) { View3D *v3d = t->view; const float line_size = UI_GetThemeValuef(TH_OUTLINE_WIDTH) + 0.5f; @@ -6704,7 +6719,7 @@ static void drawEdgeSlide(TransInfo *t) glMultMatrixf(t->obedit->obmat); - if (sld->is_proportional == false) { + if (sld->use_even == true) { float co_a[3], co_b[3], co_mark[3]; TransDataEdgeSlideVert *curr_sv = &sld->sv[sld->curr_sv_index]; const float fac = (sld->perc + 1.0f) / 2.0f; @@ -6731,7 +6746,7 @@ static void drawEdgeSlide(TransInfo *t) UI_ThemeColorShadeAlpha(TH_SELECT, -30, alpha_shade); glPointSize(ctrl_size); bglBegin(GL_POINTS); - if (sld->flipped_vtx) { + if (sld->flipped) { if (curr_sv->v_side[1]) bglVertex3fv(curr_sv->v_side[1]->co); } else { @@ -6807,7 +6822,7 @@ static void doEdgeSlide(TransInfo *t, float perc) sld->perc = perc; sv = svlist; - if (sld->is_proportional == true) { + if (sld->use_even == false) { const bool is_clamp = !(t->flag & T_ALT_TRANSFORM); if (is_clamp) { const int side_index = (perc < 0.0f); @@ -6837,7 +6852,7 @@ static void doEdgeSlide(TransInfo *t, float perc) } else { /** - * Implementation note, non proportional mode ignores the starting positions and uses only the + * Implementation note, even mode ignores the starting positions and uses only the * a/b verts, this could be changed/improved so the distance is still met but the verts are moved along * their original path (which may not be straight), however how it works now is OK and matches 2.4x - Campbell * @@ -6845,7 +6860,7 @@ static void doEdgeSlide(TransInfo *t, float perc) * is the same as the distance between the original vert locations, same goes for the lines below. */ TransDataEdgeSlideVert *curr_sv = &sld->sv[sld->curr_sv_index]; - const float curr_length_perc = curr_sv->edge_len * (((sld->flipped_vtx ? perc : -perc) + 1.0f) / 2.0f); + const float curr_length_perc = curr_sv->edge_len * (((sld->flipped ? perc : -perc) + 1.0f) / 2.0f); float co_a[3]; float co_b[3]; @@ -6857,7 +6872,7 @@ static void doEdgeSlide(TransInfo *t, float perc) add_v3_v3v3(co_a, sv->v_co_orig, sv->dir_side[0]); add_v3_v3v3(co_b, sv->v_co_orig, sv->dir_side[1]); - if (sld->flipped_vtx) { + if (sld->flipped) { interp_line_v3_v3v3v3(sv->v->co, co_b, sv->v_co_orig, co_a, fac); } else { @@ -6874,8 +6889,8 @@ static void applyEdgeSlide(TransInfo *t, const int UNUSED(mval[2])) size_t ofs = 0; float final; EdgeSlideData *sld = t->customData; - bool flipped = sld->flipped_vtx; - bool is_proportional = sld->is_proportional; + bool flipped = sld->flipped; + bool use_even = sld->use_even; const bool is_clamp = !(t->flag & T_ALT_TRANSFORM); const bool is_constrained = !(is_clamp == false || hasNumInput(&t->num)); @@ -6902,8 +6917,8 @@ static void applyEdgeSlide(TransInfo *t, const int UNUSED(mval[2])) else { ofs += BLI_snprintf(str + ofs, MAX_INFO_LEN - ofs, "%.4f ", final); } - ofs += BLI_snprintf(str + ofs, MAX_INFO_LEN - ofs, IFACE_("(E)ven: %s, "), WM_bool_as_string(!is_proportional)); - if (!is_proportional) { + ofs += BLI_snprintf(str + ofs, MAX_INFO_LEN - ofs, IFACE_("(E)ven: %s, "), WM_bool_as_string(use_even)); + if (use_even) { ofs += BLI_snprintf(str + ofs, MAX_INFO_LEN - ofs, IFACE_("(F)lipped: %s, "), WM_bool_as_string(flipped)); } ofs += BLI_snprintf(str + ofs, MAX_INFO_LEN - ofs, IFACE_("Alt or (C)lamp: %s"), WM_bool_as_string(is_clamp)); @@ -6944,7 +6959,7 @@ static void calcVertSlideCustomPoints(struct TransInfo *t) ARRAY_SET_ITEMS(mval_start, co_orig_2d[0] + mval_ofs[0], co_orig_2d[1] + mval_ofs[1]); ARRAY_SET_ITEMS(mval_end, co_curr_2d[0] + mval_ofs[0], co_curr_2d[1] + mval_ofs[1]); - if (sld->flipped_vtx && sld->is_proportional == false) { + if (sld->flipped && sld->use_even) { setCustomPoints(t, &t->mouse, mval_start, mval_end); } else { @@ -7035,7 +7050,7 @@ static void calcVertSlideMouseActiveEdges(struct TransInfo *t, const int mval[2] } } -static bool createVertSlideVerts(TransInfo *t) +static bool createVertSlideVerts(TransInfo *t, bool use_even, bool flipped, bool use_clamp) { BMEditMesh *em = BKE_editmesh_from_object(t->obedit); BMesh *bm = em->bm; @@ -7049,9 +7064,11 @@ static bool createVertSlideVerts(TransInfo *t) slide_origdata_init_flag(t, &sld->orig_data); - sld->is_proportional = true; + sld->use_even = use_even; sld->curr_sv_index = 0; - sld->flipped_vtx = false; + sld->flipped = flipped; + if (!use_clamp) + t->flag |= T_ALT_TRANSFORM; j = 0; BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { @@ -7185,7 +7202,7 @@ void freeVertSlideVerts(TransInfo *t) t->customData = NULL; } -static void initVertSlide(TransInfo *t) +static void initVertSlide_ex(TransInfo *t, bool use_even, bool flipped, bool use_clamp) { VertSlideData *sld; @@ -7193,7 +7210,7 @@ static void initVertSlide(TransInfo *t) t->transform = applyVertSlide; t->handleEvent = handleEventVertSlide; - if (!createVertSlideVerts(t)) { + if (!createVertSlideVerts(t, use_even, flipped, use_clamp)) { t->state = TRANS_CANCEL; return; } @@ -7222,6 +7239,11 @@ static void initVertSlide(TransInfo *t) t->flag |= T_NO_CONSTRAINT | T_NO_PROJECT; } +static void initVertSlide(TransInfo *t) +{ + initVertSlide_ex(t, false, false, true); +} + static eRedrawFlag handleEventVertSlide(struct TransInfo *t, const struct wmEvent *event) { if (t->mode == TFM_VERT_SLIDE) { @@ -7231,8 +7253,8 @@ static eRedrawFlag handleEventVertSlide(struct TransInfo *t, const struct wmEven switch (event->type) { case EKEY: if (event->val == KM_PRESS) { - sld->is_proportional = !sld->is_proportional; - if (sld->flipped_vtx) { + sld->use_even = !sld->use_even; + if (sld->flipped) { calcVertSlideCustomPoints(t); } return TREDRAW_HARD; @@ -7240,7 +7262,7 @@ static eRedrawFlag handleEventVertSlide(struct TransInfo *t, const struct wmEven break; case FKEY: if (event->val == KM_PRESS) { - sld->flipped_vtx = !sld->flipped_vtx; + sld->flipped = !sld->flipped; calcVertSlideCustomPoints(t); return TREDRAW_HARD; } @@ -7339,7 +7361,7 @@ static void drawVertSlide(TransInfo *t) glPointSize(ctrl_size); bglBegin(GL_POINTS); - bglVertex3fv((sld->flipped_vtx && sld->is_proportional == false) ? + bglVertex3fv((sld->flipped && sld->use_even) ? curr_sv->co_link_orig_3d[curr_sv->co_link_curr] : curr_sv->co_orig_3d); bglEnd(); @@ -7397,7 +7419,7 @@ static void doVertSlide(TransInfo *t, float perc) sld->perc = perc; sv = svlist; - if (sld->is_proportional == true) { + if (sld->use_even == false) { for (i = 0; i < sld->totsv; i++, sv++) { interp_v3_v3v3(sv->v->co, sv->co_orig_3d, sv->co_link_orig_3d[sv->co_link_curr], perc); } @@ -7415,7 +7437,7 @@ static void doVertSlide(TransInfo *t, float perc) edge_len = normalize_v3(dir); if (edge_len > FLT_EPSILON) { - if (sld->flipped_vtx) { + if (sld->flipped) { madd_v3_v3v3fl(sv->v->co, sv->co_link_orig_3d[sv->co_link_curr], dir, -tperc); } else { @@ -7435,8 +7457,8 @@ static void applyVertSlide(TransInfo *t, const int UNUSED(mval[2])) size_t ofs = 0; float final; VertSlideData *sld = t->customData; - const bool flipped = sld->flipped_vtx; - const bool is_proportional = sld->is_proportional; + const bool flipped = sld->flipped; + const bool use_even = sld->use_even; const bool is_clamp = !(t->flag & T_ALT_TRANSFORM); const bool is_constrained = !(is_clamp == false || hasNumInput(&t->num)); @@ -7463,8 +7485,8 @@ static void applyVertSlide(TransInfo *t, const int UNUSED(mval[2])) else { ofs += BLI_snprintf(str + ofs, MAX_INFO_LEN - ofs, "%.4f ", final); } - ofs += BLI_snprintf(str + ofs, MAX_INFO_LEN - ofs, IFACE_("(E)ven: %s, "), WM_bool_as_string(!is_proportional)); - if (!is_proportional) { + ofs += BLI_snprintf(str + ofs, MAX_INFO_LEN - ofs, IFACE_("(E)ven: %s, "), WM_bool_as_string(use_even)); + if (use_even) { ofs += BLI_snprintf(str + ofs, MAX_INFO_LEN - ofs, IFACE_("(F)lipped: %s, "), WM_bool_as_string(flipped)); } ofs += BLI_snprintf(str + ofs, MAX_INFO_LEN - ofs, IFACE_("Alt or (C)lamp: %s"), WM_bool_as_string(is_clamp)); |