editmesh_select.c:1499 --- should this be 'toggle' ? - it is for edge and vertex but not face.
On Thu, May 24, 2012 at 11:05 PM, Nathan Vegdahl <[email protected]> wrote: > Revision: 46986 > > http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46986 > Author: cessen > Date: 2012-05-24 21:05:27 +0000 (Thu, 24 May 2012) > Log Message: > ----------- > Modifications to the view3d.select() operator: > > 1. Two new boolean options have been added to the operator: "deselect" > and "toggle". > 2. The previous behavior of "extend" (toggling the selection) has > been moved to the "toggle" option. > 3. "extend" now only extends the selection, it never deselects. > 4. "deselect" is pretty self-explanatory: it deselects (i.e. opposite > of extend). > 5. The built-in keymap has been changed to use "toggle" where > "extend" was used before for this operator, to maintain the > previous behavior in the default keymap. > > In short, this works towards making "extend" and "deselect" fully > consistent across all selection tools (adding to and removing from > selection, respectively), but still preserves the old behavior > as well. > > (Patch reviewed by Brecht.) > > Modified Paths: > -------------- > trunk/blender/source/blender/editors/armature/editarmature.c > trunk/blender/source/blender/editors/curve/editcurve.c > trunk/blender/source/blender/editors/include/ED_armature.h > trunk/blender/source/blender/editors/include/ED_curve.h > trunk/blender/source/blender/editors/include/ED_mball.h > trunk/blender/source/blender/editors/include/ED_mesh.h > trunk/blender/source/blender/editors/include/ED_object.h > trunk/blender/source/blender/editors/include/ED_particle.h > trunk/blender/source/blender/editors/mesh/editface.c > trunk/blender/source/blender/editors/mesh/editmesh_select.c > trunk/blender/source/blender/editors/metaball/mball_edit.c > trunk/blender/source/blender/editors/object/object_lattice.c > trunk/blender/source/blender/editors/physics/particle_edit.c > trunk/blender/source/blender/editors/space_view3d/view3d_ops.c > trunk/blender/source/blender/editors/space_view3d/view3d_select.c > > Modified: trunk/blender/source/blender/editors/armature/editarmature.c > =================================================================== > --- trunk/blender/source/blender/editors/armature/editarmature.c > 2012-05-24 20:20:12 UTC (rev 46985) > +++ trunk/blender/source/blender/editors/armature/editarmature.c > 2012-05-24 21:05:27 UTC (rev 46986) > @@ -1842,7 +1842,7 @@ > } > > /* context: editmode armature in view3d */ > -int mouse_armature(bContext *C, const int mval[2], int extend) > +int mouse_armature(bContext *C, const int mval[2], int extend, int deselect, > int toggle) > { > Object *obedit = CTX_data_edit_object(C); > bArmature *arm = obedit->data; > @@ -1857,7 +1857,7 @@ > nearBone = get_nearest_editbonepoint(&vc, mval, arm->edbo, 1, > &selmask); > if (nearBone) { > > - if (!extend) > + if (!extend && !deselect && !toggle) > ED_armature_deselect_all(obedit, 0); > > /* by definition the non-root connected bones have no root > point drawn, > @@ -1867,6 +1867,18 @@ > if (nearBone->parent && (nearBone->flag & > BONE_CONNECTED)) { > /* click in a chain */ > if (extend) { > + /* select this bone */ > + nearBone->flag |= BONE_TIPSEL; > + nearBone->parent->flag |= BONE_TIPSEL; > + } > + else if (deselect) { > + /* deselect this bone */ > + nearBone->flag &= ~(BONE_TIPSEL | > BONE_SELECTED); > + /* only deselect parent tip if it is > not selected */ > + if (!(nearBone->parent->flag & > BONE_SELECTED)) > + nearBone->parent->flag &= > ~BONE_TIPSEL; > + } > + else if (toggle) { > /* hold shift inverts this bone's > selection */ > if (nearBone->flag & BONE_SELECTED) { > /* deselect this bone */ > @@ -1889,18 +1901,29 @@ > } > else { > if (extend) { > + nearBone->flag |= (BONE_TIPSEL | > BONE_ROOTSEL); > + } > + else if (deselect) { > + nearBone->flag &= ~(BONE_TIPSEL | > BONE_ROOTSEL); > + } > + else if (toggle) { > /* hold shift inverts this bone's > selection */ > if (nearBone->flag & BONE_SELECTED) > nearBone->flag &= > ~(BONE_TIPSEL | BONE_ROOTSEL); > else > nearBone->flag |= (BONE_TIPSEL > | BONE_ROOTSEL); > } > - else nearBone->flag |= (BONE_TIPSEL | > BONE_ROOTSEL); > + else > + nearBone->flag |= (BONE_TIPSEL | > BONE_ROOTSEL); > } > } > else { > - if (extend && (nearBone->flag & selmask)) > + if (extend) > + nearBone->flag |= selmask; > + else if (deselect) > nearBone->flag &= ~selmask; > + else if (toggle && (nearBone->flag & selmask)) > + nearBone->flag &= ~selmask; > else > nearBone->flag |= selmask; > } > @@ -4475,7 +4498,7 @@ > > /* called from editview.c, for mode-less pose selection */ > /* assumes scene obact and basact is still on old situation */ > -int ED_do_pose_selectbuffer(Scene *scene, Base *base, unsigned int *buffer, > short hits, short extend) > +int ED_do_pose_selectbuffer(Scene *scene, Base *base, unsigned int *buffer, > short hits, short extend, short deselect, short toggle) > { > Object *ob = base->object; > Bone *nearBone; > @@ -4494,7 +4517,7 @@ > * note, special exception for armature mode so we can do > multi-select > * we could check for multi-select explicitly but think its > fine to > * always give predictable behavior in weight paint mode - > campbell */ > - if (!extend || ((ob_act && (ob_act != ob) && (ob_act->mode & > OB_MODE_WEIGHT_PAINT) == 0))) { > + if ((!extend && !deselect && !toggle)|| ((ob_act && (ob_act > != ob) && (ob_act->mode & OB_MODE_WEIGHT_PAINT) == 0))) { > ED_pose_deselectall(ob, 0); > nearBone->flag |= (BONE_SELECTED | BONE_TIPSEL | > BONE_ROOTSEL); > arm->act_bone = nearBone; > @@ -4503,25 +4526,34 @@ > //select_actionchannel_by_name(ob->action, > nearBone->name, 1); > } > else { > - if (nearBone->flag & BONE_SELECTED) { > - /* if not active, we make it active */ > - if (nearBone != arm->act_bone) { > - arm->act_bone = nearBone; > + if (extend) { > + nearBone->flag |= (BONE_SELECTED | > BONE_TIPSEL | BONE_ROOTSEL); > + arm->act_bone = nearBone; > + } > + else if (deselect) { > + nearBone->flag &= ~(BONE_SELECTED | > BONE_TIPSEL | BONE_ROOTSEL); > + } > + else if (toggle) { > + if (nearBone->flag & BONE_SELECTED) { > + /* if not active, we make it active */ > + if (nearBone != arm->act_bone) { > + arm->act_bone = nearBone; > + } > + else { > + nearBone->flag &= > ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL); > + > + // XXX old cruft! use > notifiers instead > + > //select_actionchannel_by_name(ob->action, nearBone->name, 0); > + } > } > else { > - nearBone->flag &= ~(BONE_SELECTED | > BONE_TIPSEL | BONE_ROOTSEL); > - > + nearBone->flag |= (BONE_SELECTED | > BONE_TIPSEL | BONE_ROOTSEL); > + arm->act_bone = nearBone; > + > // XXX old cruft! use notifiers instead > - > //select_actionchannel_by_name(ob->action, nearBone->name, 0); > + > //select_actionchannel_by_name(ob->action, nearBone->name, 1); > } > - } > - else { > - nearBone->flag |= (BONE_SELECTED | > BONE_TIPSEL | BONE_ROOTSEL); > - arm->act_bone = nearBone; > - > - // XXX old cruft! use notifiers instead > - //select_actionchannel_by_name(ob->action, > nearBone->name, 1); > - } > + } > } > > /* in weightpaint we select the associated vertex group too */ > > Modified: trunk/blender/source/blender/editors/curve/editcurve.c > =================================================================== > --- trunk/blender/source/blender/editors/curve/editcurve.c 2012-05-24 > 20:20:12 UTC (rev 46985) > +++ trunk/blender/source/blender/editors/curve/editcurve.c 2012-05-24 > 21:05:27 UTC (rev 46986) > @@ -4126,7 +4126,7 @@ > > /***************** pick select from 3d view **********************/ > > -int mouse_nurb(bContext *C, const int mval[2], int extend) > +int mouse_nurb(bContext *C, const int mval[2], int extend, int deselect, int > toggle) > { > Object *obedit = CTX_data_edit_object(C); > Curve *cu = obedit->data; > @@ -4146,12 +4146,8 @@ > hand = findnearestNurbvert(&vc, 1, location, &nu, &bezt, &bp); > > if (bezt || bp) { > - if (extend == 0) { > - > - setflagsNurb(editnurb, 0); > - > + if (extend) { > if (bezt) { > - > if (hand == 1) { > select_beztriple(bezt, SELECT, 1, > HIDDEN); > cu->lastsel = bezt; > @@ -4167,11 +4163,28 @@ > cu->lastsel = bp; > select_bpoint(bp, SELECT, 1, HIDDEN); > } > - > } > - else { > + else if (deselect) { > if (bezt) { > if (hand == 1) { > + select_beztriple(bezt, DESELECT, 1, > HIDDEN); > + if (bezt == cu->lastsel) cu->lastsel > = NULL; > + } > + else if (hand == 0) { > + bezt->f1 &= ~SELECT; > + } > + else { > + bezt->f3 &= ~SELECT; > + } > + } > + else { > + select_bpoint(bp, DESELECT, 1, HIDDEN); > + if (cu->lastsel == bp) cu->lastsel = NULL; > + } > + } > + else if (toggle) { > + if (bezt) { > + if (hand == 1) { > if (bezt->f2 & SELECT) { > select_beztriple(bezt, > DESELECT, 1, HIDDEN); > if (bezt == cu->lastsel) > cu->lastsel = NULL; > @@ -4198,7 +4211,27 @@ > cu->lastsel = bp; > } > } > + } > + else { > + setflagsNurb(editnurb, 0); > > + if (bezt) { > + > + if (hand == 1) { > + select_beztriple(bezt, SELECT, 1, > HIDDEN); > + cu->lastsel = bezt; > + } > + else { > + if (hand == 0) bezt->f1 |= SELECT; > + else bezt->f3 |= SELECT; > + > + cu->lastsel = NULL; > + } > + } > + else { > + cu->lastsel = bp; > + select_bpoint(bp, SELECT, 1, HIDDEN); > + } > } > > if (nu != get_actNurb(obedit)) > > Modified: trunk/blender/source/blender/editors/include/ED_armature.h > =================================================================== > --- trunk/blender/source/blender/editors/include/ED_armature.h 2012-05-24 > 20:20:12 UTC (rev 46985) > +++ trunk/blender/source/blender/editors/include/ED_armature.h 2012-05-24 > 21:05:27 UTC (rev 46986) > @@ -113,8 +113,8 @@ > void ED_armature_deselect_all_visible(struct Object *obedit); > > int ED_do_pose_selectbuffer(struct Scene *scene, struct Base *base, unsigned > int *buffer, > - short hits, short extend); > -int mouse_armature(struct bContext *C, const int mval[2], int extend); > + short hits, short extend, short deselect, short > toggle); > +int mouse_armature(struct bContext *C, const int mval[2], int extend, int > deselect, int toggle); > int join_armature_exec(struct bContext *C, struct wmOperator *op); > struct Bone *get_indexed_bone(struct Object *ob, int index); > float ED_rollBoneToVector(EditBone *bone, const float new_up_axis[3], const > short axis_only); > > Modified: trunk/blender/source/blender/editors/include/ED_curve.h > =================================================================== > --- trunk/blender/source/blender/editors/include/ED_curve.h 2012-05-24 > 20:20:12 UTC (rev 46985) > +++ trunk/blender/source/blender/editors/include/ED_curve.h 2012-05-24 > 21:05:27 UTC (rev 46986) > @@ -65,7 +65,7 @@ > > void BKE_curve_editNurb_free(struct Curve *cu); > > -int mouse_nurb(struct bContext *C, const int mval[2], int extend); > +int mouse_nurb(struct bContext *C, const int mval[2], int extend, int > deselect, int toggle); > > struct Nurb *add_nurbs_primitive(struct bContext *C, float mat[4][4], int > type, int newob); > > > Modified: trunk/blender/source/blender/editors/include/ED_mball.h > =================================================================== > --- trunk/blender/source/blender/editors/include/ED_mball.h 2012-05-24 > 20:20:12 UTC (rev 46985) > +++ trunk/blender/source/blender/editors/include/ED_mball.h 2012-05-24 > 21:05:27 UTC (rev 46986) > @@ -40,7 +40,7 @@ > > struct MetaElem *add_metaball_primitive(struct bContext *C, float mat[4][4], > int type, int newname); > > -int mouse_mball(struct bContext *C, const int mval[2], int extend); > +int mouse_mball(struct bContext *C, const int mval[2], int extend, int > deselect, int toggle); > > void free_editMball(struct Object *obedit); > void make_editMball(struct Object *obedit); > > Modified: trunk/blender/source/blender/editors/include/ED_mesh.h > =================================================================== > --- trunk/blender/source/blender/editors/include/ED_mesh.h 2012-05-24 > 20:20:12 UTC (rev 46985) > +++ trunk/blender/source/blender/editors/include/ED_mesh.h 2012-05-24 > 21:05:27 UTC (rev 46986) > @@ -156,7 +156,7 @@ > /* editmesh_mods.c */ > extern unsigned int bm_vertoffs, bm_solidoffs, bm_wireoffs; > > -int mouse_mesh(struct bContext *C, const int mval[2], short extend); > +int mouse_mesh(struct bContext *C, const int mval[2], short extend, > short deselect, short toggle); > > struct BMVert *editbmesh_get_x_mirror_vert(struct Object *ob, struct > BMEditMesh *em, struct BMVert *eve, const float co[3], int index); > int mesh_get_x_mirror_vert(struct Object *ob, int index); > > @@ Diff output truncated at 10240 characters. @@ > _______________________________________________ > Bf-blender-cvs mailing list > [email protected] > http://lists.blender.org/mailman/listinfo/bf-blender-cvs -- - Campbell _______________________________________________ Bf-committers mailing list [email protected] http://lists.blender.org/mailman/listinfo/bf-committers
