void mouse(int button, int state, int x, int y) { long s=0x00000000; s |= (button == GLUT_LEFT_BUTTON) ? ((state == GLUT_DOWN) ? Trackball::LBUTTON_DOWN : Trackball::LBUTTON_UP) : 0; s |= (button == GLUT_MIDDLE_BUTTON) ? ((state == GLUT_DOWN) ? Trackball::MBUTTON_DOWN : Trackball::MBUTTON_UP) : 0; s |= (button == GLUT_RIGHT_BUTTON) ? ((state == GLUT_DOWN) ? Trackball::RBUTTON_DOWN : Trackball::RBUTTON_UP) : 0; int key_state = glutGetModifiers(); s |= (key_state & GLUT_ACTIVE_CTRL) ? Trackball::CTRL_DOWN : 0; s |= (key_state & GLUT_ACTIVE_ALT) ? Trackball::ALT_DOWN : 0; s |= (key_state & GLUT_ACTIVE_SHIFT) ? Trackball::SHIFT_DOWN : 0; if (s & Trackball::BUTTON_DOWN){ trackball.mouseDown(s, x, y); } if (s & Trackball::BUTTON_UP){ trackball.mouseUp(s, x, y); } }