diff options
author | Campbell Barton <ideasman42@gmail.com> | 2019-04-16 10:01:00 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2019-04-16 10:01:00 +0300 |
commit | a9481479776aa7c1998382a0cc52113fc4706c0c (patch) | |
tree | 0a28ae49316989ae40c11ee0f60336b03b873b12 /source/blender/editors/space_view3d | |
parent | edc1b0167518a7c5b73b948fcb3a74da20343fb5 (diff) |
Fix T63646: Box/Lasso select fails to de-select
Select 'New' wasn't de-selecting when there was nothing selected
in some cases.
Diffstat (limited to 'source/blender/editors/space_view3d')
-rw-r--r-- | source/blender/editors/space_view3d/view3d_select.c | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index 3ff6a7146c6..f57b31b2ed2 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -700,7 +700,7 @@ static bool do_lasso_select_mesh( if (ts->selectmode & SCE_SELECT_VERTEX) { if (bbsel) { - data.is_changed = edbm_backbuf_check_and_select_verts(vc->em, sel_op); + data.is_changed |= edbm_backbuf_check_and_select_verts(vc->em, sel_op); } else { mesh_foreachScreenVert(vc, do_lasso_select_mesh__doSelectVert, &data, V3D_PROJ_TEST_CLIP_DEFAULT); @@ -716,7 +716,7 @@ static bool do_lasso_select_mesh( if (ts->selectmode & SCE_SELECT_FACE) { if (bbsel) { - data.is_changed = edbm_backbuf_check_and_select_faces(vc->em, sel_op); + data.is_changed |= edbm_backbuf_check_and_select_faces(vc->em, sel_op); } else { mesh_foreachScreenFace(vc, do_lasso_select_mesh__doSelectFace, &data, V3D_PROJ_TEST_CLIP_DEFAULT); @@ -1065,22 +1065,22 @@ static bool view3d_lasso_select( if (vc->obedit == NULL) { /* Object Mode */ if (BKE_paint_select_face_test(ob)) { - changed_multi = do_lasso_select_paintface(vc, mcords, moves, sel_op); + changed_multi |= do_lasso_select_paintface(vc, mcords, moves, sel_op); } else if (BKE_paint_select_vert_test(ob)) { - changed_multi = do_lasso_select_paintvert(vc, mcords, moves, sel_op); + changed_multi |= do_lasso_select_paintvert(vc, mcords, moves, sel_op); } else if (ob && (ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT))) { /* pass */ } else if (ob && (ob->mode & OB_MODE_PARTICLE_EDIT)) { - changed_multi = PE_lasso_select(C, mcords, moves, sel_op); + changed_multi |= PE_lasso_select(C, mcords, moves, sel_op); } else if (ob && (ob->mode & OB_MODE_POSE)) { - changed_multi = do_lasso_select_pose(vc, mcords, moves, sel_op); + changed_multi |= do_lasso_select_pose(vc, mcords, moves, sel_op); } else { - changed_multi = do_lasso_select_objects(vc, mcords, moves, sel_op); + changed_multi |= do_lasso_select_objects(vc, mcords, moves, sel_op); } } else { /* Edit Mode */ @@ -2248,13 +2248,9 @@ static bool do_paintvert_box_select( { const bool use_zbuf = !XRAY_ENABLED(vc->v3d); Mesh *me; - MVert *mvert; - unsigned int *rt; - int a, index; - char *selar; me = vc->obact->data; - if ((me == NULL) || (me->totvert == 0) || BLI_rcti_is_empty(rect)) { + if ((me == NULL) || (me->totvert == 0)) { return OPERATOR_CANCELLED; } @@ -2263,7 +2259,15 @@ static bool do_paintvert_box_select( changed |= paintvert_deselect_all_visible(vc->obact, SEL_DESELECT, false); } - if (use_zbuf) { + if (BLI_rcti_is_empty(rect)) { + /* pass */ + } + else if (use_zbuf) { + MVert *mvert; + unsigned int *rt; + int a, index; + char *selar; + selar = MEM_callocN(me->totvert + 1, "selar"); uint buf_len; @@ -2479,7 +2483,7 @@ static bool do_mesh_box_select( if (ts->selectmode & SCE_SELECT_VERTEX) { if (bbsel) { - data.is_changed = edbm_backbuf_check_and_select_verts(vc->em, sel_op); + data.is_changed |= edbm_backbuf_check_and_select_verts(vc->em, sel_op); } else { mesh_foreachScreenVert(vc, do_mesh_box_select__doSelectVert, &data, V3D_PROJ_TEST_CLIP_DEFAULT); @@ -2495,7 +2499,7 @@ static bool do_mesh_box_select( if (ts->selectmode & SCE_SELECT_FACE) { if (bbsel) { - data.is_changed = edbm_backbuf_check_and_select_faces(vc->em, sel_op); + data.is_changed |= edbm_backbuf_check_and_select_faces(vc->em, sel_op); } else { mesh_foreachScreenFace(vc, do_mesh_box_select__doSelectFace, &data, V3D_PROJ_TEST_CLIP_DEFAULT); |