diff options
author | Martin Poirier <theeth@yahoo.com> | 2005-04-24 05:18:13 +0400 |
---|---|---|
committer | Martin Poirier <theeth@yahoo.com> | 2005-04-24 05:18:13 +0400 |
commit | 6379ff9b7046e9286aaa117e98cdaa932480008c (patch) | |
tree | d368612dd2420f314d90e123063d2efca81c4a5a /source/blender | |
parent | 3c7617de521d9191012b2ef01ee8a396310aaaea (diff) |
Toying a bit with MMB behavior:
MMB click with no constraint selects a constraint right away (the axis selector doesn't flash on screen)
MMB click with a constraint removes the constraint
MMB click-drag in both case (with and without a constraint) uses the axis selector.
stopConstraint didn't remove the CON_SELECT flag, so cancelling transform while selecting a constraint and then reentering transform was funny. Fixed
Diffstat (limited to 'source/blender')
-rwxr-xr-x | source/blender/include/transform.h | 2 | ||||
-rwxr-xr-x | source/blender/src/transform.c | 21 | ||||
-rwxr-xr-x | source/blender/src/transform_constraints.c | 7 |
3 files changed, 22 insertions, 8 deletions
diff --git a/source/blender/include/transform.h b/source/blender/include/transform.h index 1d42861e07c..23c816053ff 100755 --- a/source/blender/include/transform.h +++ b/source/blender/include/transform.h @@ -266,7 +266,7 @@ void stopConstraint(TransInfo *t); void getConstraintMatrix(TransInfo *t); -void initSelectConstraint(TransInfo *t); +void initSelectConstraint(TransInfo *t, float mtx[3][3]); void selectConstraint(TransInfo *t); void postSelectConstraint(TransInfo *t); diff --git a/source/blender/src/transform.c b/source/blender/src/transform.c index 25011e2f4b4..2c0ee40954c 100755 --- a/source/blender/src/transform.c +++ b/source/blender/src/transform.c @@ -134,7 +134,10 @@ void Transform(int mode, int context) short pmval[2] = {0, 0}, mval[2], val; float mati[3][3]; unsigned short event; + /* constraint mode THIS IS A HACK will have to use con.mode eventually */ char cmode = '\0'; + /* If MMB is pressed or not */ + char mmb_press = 0; /*joeedh -> hopefully may be what makes the old transform() constant*/ /* ton: I doubt, but it doesnt harm for now. shouldnt be needed though */ @@ -226,6 +229,9 @@ void Transform(int mode, int context) getmouseco_areawin(mval); if (mval[0] != pmval[0] || mval[1] != pmval[1]) { + if (mmb_press) { + initSelectConstraint(&Trans, mati); + } Trans.redraw = 1; } if (Trans.redraw) { @@ -272,10 +278,18 @@ void Transform(int mode, int context) initTrackball(&Trans); } } - else - initSelectConstraint(&Trans); + else { + mmb_press = 1; + if (Trans.con.mode & CON_APPLY) { + stopConstraint(&Trans); + } + else { + initSelectConstraint(&Trans, mati); + postSelectConstraint(&Trans); + } + } + Trans.redraw = 1; } - Trans.redraw = 1; break; case ESCKEY: case RIGHTMOUSE: @@ -433,6 +447,7 @@ void Transform(int mode, int context) after releasing modifer key */ case MIDDLEMOUSE: if ((Trans.flag & T_NO_CONSTRAINT)==0) { + mmb_press = 0; postSelectConstraint(&Trans); Trans.redraw = 1; } diff --git a/source/blender/src/transform_constraints.c b/source/blender/src/transform_constraints.c index 6908e6c8f96..7611041cddd 100755 --- a/source/blender/src/transform_constraints.c +++ b/source/blender/src/transform_constraints.c @@ -718,7 +718,7 @@ void startConstraint(TransInfo *t) { } void stopConstraint(TransInfo *t) { - t->con.mode &= ~CON_APPLY; + t->con.mode &= ~(CON_APPLY|CON_SELECT); *t->con.text = '\0'; t->num.idx_max = t->idx_max; } @@ -751,10 +751,9 @@ void getConstraintMatrix(TransInfo *t) Mat3MulMat3(t->con.pmtx, t->con.mtx, mat); } -void initSelectConstraint(TransInfo *t) +void initSelectConstraint(TransInfo *t, float mtx[3][3]) { - Mat3One(t->con.mtx); - Mat3One(t->con.pmtx); + Mat3CpyMat3(t->con.mtx, mtx); t->con.mode |= CON_APPLY; t->con.mode |= CON_SELECT; |