From: Ash Tyndall Date: Sat, 22 Oct 2011 02:37:34 +0000 (+0800) Subject: (no commit message) X-Git-Url: https://git.ucc.asn.au/?p=atyndall%2Fcits2231.git;a=commitdiff_plain;h=fe551bcf4f464576a9e1e76acc83ba24d0bfe63c --- diff --git a/scene.c b/scene.c index 3f211b4..a8d9596 100644 --- a/scene.c +++ b/scene.c @@ -199,6 +199,9 @@ void windowReshape(int w, int h) { * @param y Mouse y position */ void mouse(int button, int state, int x, int y) { + if ( glutGetModifiers() == GLUT_ACTIVE_SHIFT ) { + button = GLUT_MIDDLE_BUTTON; + } switch(button) { case GLUT_LEFT_BUTTON: case GLUT_MIDDLE_BUTTON: @@ -299,16 +302,18 @@ void motion(int x, int y) { break; case STATE_OBJECT_POSITION_SCALE: - //so.x, so.y, so.z + if ( buttonSelected == GLUT_LEFT_BUTTON ) { // w: left/right, h: near/far + //so.x, so.y, so.z //sceneObjs[curObject].x += (x - startx)*leftrightFactor; } else if ( buttonSelected == GLUT_MIDDLE_BUTTON ) { // w: big/small, h: up/down // For big/small scaling, we map negative numbers to 0->1 and positive numbers to 1->inf float diff = (x - startx); - float scaling = ( diff + (float)height/bigsmallFactor ) / ( (float)height/bigsmallFactor ); + float max = (float)height/bigsmallFactor; + float scaling = ( diff + max) / max; sceneObjs[curObject].scale[0] *= scaling; sceneObjs[curObject].scale[1] *= scaling;