Event driven programming: capturing keypresses and mouse clicks
CS-116A: Introduction to Computer Graphics
Instructor: Rob Bruce
Fall 2016

SLIDE 1: Event driven programming.

  • Event driving program is appropriate for Graphical User Interfaces (GUI) or GUI environments such as OSX, Windows, or X-windows (e.g. Linux, BSD, or other Unix-like operating system).
  • Program execution is not top-down.
  • Program is a series of trigger-based functions.
  • User defines the action to occur when:
  • - User presses left mouse button.
  • - User presses middle mouse button.
  • - User presses right mouse button.
  • - A specific key on the keyboard (i.e. left arrow key).

SLIDE 2: Processing mouse events with GLUT: main().

Creating a subroutine to intercept keyboard events with GLUT application programmer interface:

int main (int argc, char *argv[])
{
  glutInit (&argc, argv);
  glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
  glutInitWindowSize (X_RESOLUTION, Y_RESOLUTION);
  glutInitWindowPosition (0,0);
  glutCreateWindow ("Mouse keyboard click demo");
  glutDisplayFunc (display);
  glutReshapeFunc (reshape);
  glutMouseFunc (mouse);
  glutKeyboardFunc (keyboard);
  glutSpecialFunc (arrow_keys);
  glutMainLoop ();
}

SLIDE 3: Processing keyboard input with GLUT: main()

Creating a subroutine to intercept keyboard events with GLUT application programmer interface:

int main (int argc, char *argv[])
{
  glutInit (&argc, argv);
  glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
  glutInitWindowSize (X_RESOLUTION, Y_RESOLUTION);
  glutInitWindowPosition (0,0);
  glutCreateWindow ("Mouse keyboard click demo");
  glutDisplayFunc (display);
  glutReshapeFunc (reshape);
  glutMouseFunc (mouse);
  glutKeyboardFunc (keyboard);
  glutSpecialFunc (arrow_keys);
  glutMainLoop ();
}

SLIDE 4: Processing arrow keys with GLUT: main()

Creating a subroutine to intercept keyboard events with GLUT application programmer interface:

int main (int argc, char *argv[])
{
  glutInit (&argc, argv);
  glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
  glutInitWindowSize (X_RESOLUTION, Y_RESOLUTION);
  glutInitWindowPosition (0,0);
  glutCreateWindow ("Mouse keyboard click demo");
  glutDisplayFunc (display);
  glutReshapeFunc (reshape);
  glutMouseFunc (mouse);
  glutKeyboardFunc (keyboard);
  glutSpecialFunc (arrow_keys);
  glutMainLoop ();
}

SLIDE 5: Processing mouse clicks with GLUT: mouse subroutine

void mouse (int mouse_button, int state, int x, int y)
{
  if (mouse_button == GLUT_LEFT_BUTTON)
  {
    if (state == GLUT_UP)
    {
    }
    if (state == GLUT_DOWN)
    {
    }
  }
  if (mouse_button == GLUT_MIDDLE_BUTTON)
  {
    if (state == GLUT_UP)
    {
    }
    if (state == GLUT_DOWN)
    {
    }
  }
  if (mouse_button == GLUT_RIGHT_BUTTON)
  {
    if (state == GLUT_UP)
    {
    }
    if (state == GLUT_DOWN)
    {
    }
  }
}

SLIDE 6: Processing keyboard input with GLUT: keyboard subroutine

void keyboard (unsigned char key, int x, int y)
{
  switch (key)
  {
    case 27: // escape key
    break;
    default:
    break;
  }
}

SLIDE 7: Processing arrow keys with GLUT: arrow keys subroutine

void arrow_keys (int key, int x, int y)
{
  switch (key)
  {
    case GLUT_KEY_UP:
    break;
    case GLUT_KEY_DOWN:
    break;
    case GLUT_KEY_LEFT:
    break;
    case GLUT_KEY_RIGHT:
    break;
    default:
    break;
  }
}

SLIDE 8: Demonstration program

Next I’ll demonstrate a program that captures mouse clicks and keyboard input.

Robert Bruce

Contact and Office hours

Education

Research interests


Research

Publications

Graduate supervision

Undergraduate supervision


Courses

Fall 2016, CS-116A:

Greensheet

Lectures:

Assignments:

Handouts:

Programs:


Other

Valid XHTML 1.0 Strict Valid CSS!