Toying a bit with MMB behavior:
authorMartin Poirier <theeth@yahoo.com>
Sun, 24 Apr 2005 01:18:13 +0000 (01:18 +0000)
committerMartin Poirier <theeth@yahoo.com>
Sun, 24 Apr 2005 01:18:13 +0000 (01:18 +0000)
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

source/blender/include/transform.h
source/blender/src/transform.c
source/blender/src/transform_constraints.c

index 1d42861e07cf22053d0d0c8fa4784441ac896a0f..23c816053ff25a2cbceec891f9c2085246eeab97 100755 (executable)
@@ -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);
 
index 25011e2f4b4a0c9602422e3cf49519b2f9d513dd..2c0ee40954c99c51d40953f847225c3409a7d62b 100755 (executable)
@@ -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;
                                        }
index 6908e6c8f9641d58c3a82929863d4141e7374b52..7611041cddd608e1d512f8d3ea21f6da11595490 100755 (executable)
@@ -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;