/* special keys PERSPECTIVE mode */ void special(int key,int x,int y) { pTransform view; pScene sc; pMesh mesh; pClip clip; pCube cube; float pancoeff = 0.1f; int keyact,idw = currentScene(); ubyte post = TRUE; /* default */ if ( ddebug ) printf("special key %d\n",key); sc = cv.scene[idw]; /* special mode camera */ if ( sc->persp->pmode == CAMERA ) { specCamera(sc,key); return; } view = sc->view; mesh = cv.mesh[sc->idmesh]; clip = sc->clip; cube = sc->cube; keyact = glutGetModifiers(); if ( keyact & GLUT_ACTIVE_SHIFT ) pancoeff = 0.01; switch(key) { case GLUT_KEY_F1: /* toggle clipping plane */ if ( mesh->dim == 3 ) { if ( cube->active & C_ON) keyCube('C',0,0); else keyClip('C',0,0); } post = FALSE; break; case GLUT_KEY_F2: /* edit clipping plane */ if ( mesh->dim == 3 ) { if ( cube->active & C_ON) keyCube('E',0,0); else if ( clip->active & C_ON ) keyClip('E',0,0); } post = FALSE; break; case GLUT_KEY_F3: /* freeze clipping plane */ if ( cube->active & C_ON ) keyCube('F',0,0); else if ( clip->active & C_ON ) keyClip('F',0,0); post = FALSE; break; case GLUT_KEY_F4: /* toggle Vclip */ if ( mesh->dim == 3 ) keyClip('Z',0,0); post = FALSE; break; case GLUT_KEY_F5: /* Toggle Shrink */ if ( mesh->ntet+mesh->nhex > 0 ) keyFeature('V',0,0); else keyFeature('S',0,0); break; case GLUT_KEY_F6: /* Increase Shrink */ keyFeature('I',0,0); break; case GLUT_KEY_F7: /* Decrease Shrink */ keyFeature('i',0,0); break; case GLUT_KEY_LEFT: /* translate eyes or object */ if ( clip->active & C_EDIT ) { clip->cliptr->panx -= 0.02 * sc->dmax; clip->cliptr->angle = 0.0; clip->active |= C_UPDATE + C_REDO; } else if ( keyact & GLUT_ACTIVE_CTRL ) { sc->par.eyesep *= 0.9; printf("eyesep %f\n",sc->par.eyesep); } else view->panx -= pancoeff * sc->dmax; break; case GLUT_KEY_RIGHT: if ( clip->active & C_EDIT ) { clip->cliptr->panx += 0.02 * sc->dmax; clip->cliptr->angle = 0.0; clip->active |= C_UPDATE + C_REDO; } else if ( keyact & GLUT_ACTIVE_CTRL ) { sc->par.eyesep *= 1.1; printf("eyesep %f\n",sc->par.eyesep); } else view->panx += pancoeff * sc->dmax; break; case GLUT_KEY_UP: if ( clip->active & C_EDIT ) { clip->cliptr->pany += 0.02 * sc->dmax; clip->cliptr->angle = 0.0; clip->active |= C_UPDATE + C_REDO; } else view->pany += pancoeff * sc->dmax; break; case GLUT_KEY_DOWN: if ( clip->active & C_EDIT ) { clip->cliptr->pany -= 0.02 * sc->dmax; clip->cliptr->angle = 0.0; clip->active |= C_UPDATE + C_REDO; } else view->pany -= pancoeff * sc->dmax; break; default: return; } if ( post ) glutPostRedisplay(); }
void CalculatorTestApp::handleKey(widgetid_t keyPressed) { // keyMap origKeyMap = (keyMap)buttons->getMap(); switch (keyPressed) { case zero: case one: case two: case three: case four: case five: case six: case seven: case eight: case nine: case hex_a: case hex_b: case hex_c: case hex_d: case hex_e: case hex_f: keyDigit(keyPressed); break; case decimal: keyDecimal(); break; case enter: keyEnter(); break; case clear: keyClear(); break; case backspace: keyBackspace(); break; case shift: keyShift(); break; case ee: keyEE(); break; default: // the following are functions that accept the current input string acceptText(); switch (keyPressed) { case divide: keyDivide(); break; case multiply: keyMultiply(); break; case add: keyAdd(); break; case subtract: keySubtract(); break; case inverse: keyInverse(); break; case percent: keyPercent(); break; case swap: keySwap(); break; case changeBase: keyBase(); break; case send: keySend(); break; case square_f: keySquare(); break; case cube_f: keyCube(); break; case pow_f: keyPow(); break; case exp_f: keyExp(); break; case pow10_f: keyPow10(); break; case sqrt_f: keySqrt(); break; case cubert_f: keyCubert(); break; case xroot_f: keyXroot(); break; case ln_f: keyLn(); break; case log10_f: keyLog10(); break; case sin_f: keySin(); break; case cos_f: keyCos(); break; case tan_f: keyTan(); break; case pi_f: keyPi(); break; case e_f: keyE(); break; case asin_f: keyAsin(); break; case acos_f: keyAcos(); break; case atan_f: keyAtan(); break; case logy_f: keyLogy(); break; case log2_f: keyLog2(); break; case in2mm_f: keyIn2mm(); break; case mm2in_f: keyMm2In(); break; case g2lb_f: keyG2lb(); break; case lb2g_f: keyLb2g(); break; case c2f_f: keyC2f(); break; case f2c_f: keyF2c(); break; case ppi_f: keyPpi(); break; default: break; } } // if (origKeyMap == sci_map && buttons->getMap() == sci_map) { // buttons->setMap(basic_map); // } drawDisplay(); }