/* * paint.c * * Sweep out rectangles using the mouse. * * Left button: sweep out a new rectangle * Middle button: clear the screen * * Pat Hanrahan 1/97 */ #include #include int Width = 512, Height = 512; int Start = 0; int StartX, StartY; void Reshape(GLint w, GLint h) { Width = w; Height = h; glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0, w, 0, h, 0.0, 1.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void Display() { glClearColor(0, 0, 0, 1); glClear(GL_COLOR_BUFFER_BIT); } void DrawRect( float x1, float y1, float x2, float y2 ) { glBegin(GL_QUADS); glVertex2f(x1, y1); glVertex2f(x2, y1); glVertex2f(x2, y2); glVertex2f(x1, y2); glEnd(); } void Mouse(int button, int state, int x, int y) { Start = 0; if( state == GLUT_DOWN ) switch( button ) { case GLUT_LEFT_BUTTON: glColor3f( drand48(), drand48(), drand48() ); StartX = x; StartY = Height - y; Start = 1; break; case GLUT_MIDDLE_BUTTON: glutPostRedisplay(); break; } } void MouseDrag( int x, int y ) { DrawRect( StartX, StartY, x, Height - y ); } void Keyboard( unsigned char key, int x, int y ) { #define ESCAPE '\033' if( key == ESCAPE ) exit(0); } main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB); glutInitWindowSize(512, 512); glutCreateWindow("Paint"); glutDisplayFunc(Display); glutReshapeFunc(Reshape); glutKeyboardFunc(Keyboard); glutMouseFunc(Mouse); glutMotionFunc(MouseDrag); glutMainLoop(); }