#if !defined(Linux) #include //Not Linux must be windows #endif #include #include #include #include void reshape(int x, int y) { /* problem: if reshaping done, drawn pixel doesn't correspond to x, y */ glViewport(0, 0, x, y); /* glOrtho(0.0, x, 0.0, y, -1.0, 1.0); <-- keep commented or won't rewrite screen */ glClear(GL_COLOR_BUFFER_BIT); glFlush(); } void redraw(void) { glClear(GL_COLOR_BUFFER_BIT); } void mouse(int btn, int state, int x, int y) { int yy; yy = glutGet(GLUT_WINDOW_HEIGHT); y = yy - y; /* In Glut, Y coordinate increases from top to bottom */ glColor3f(1.0, 1.0, 1.0); glBegin(GL_POINTS); glVertex2i(x, y); glEnd(); glFlush(); if (state == GLUT_DOWN) { printf("DOWN: x=%3d y=%3d \n", x, y); } else { printf("UP: x=%3d y=%3d \n", x, y); } } void motion(int x, int y) { int yy; yy = glutGet(GLUT_WINDOW_HEIGHT); y = yy - y; glColor3f(1.0, 1.0, 1.0); glBegin(GL_POINTS); glVertex2i(x, y); glEnd(); glFlush(); printf("motion: x=%3d y=%3d \n", x, y); } void keyboard(unsigned char key, int x, int y) { switch (key){ case 0x1B: case 'q': case 'Q': #if !defined(Linux) exit(0); #else return; #endif break; case 'm': case 'M': printf("M: x=%3d y=%3d \n", x, y); break; } } main(int argc, char **argv) { glutInit(&argc, argv); glutInitWindowSize(512, 512); glutInitDisplayMode(GLUT_RGB); glutCreateWindow("Glut mouse"); glutMouseFunc(mouse); glutPassiveMotionFunc(motion); glutKeyboardFunc(keyboard); glutDisplayFunc(redraw); glutReshapeFunc(reshape); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0, 511.0, 0.0, 511.0); glClearColor(0.0, 0.0, 0.0, 1.0); glutMainLoop(); }