cursor_test.c
上传用户:xk288cn
上传日期:2007-05-28
资源大小:4876k
文件大小:4k
源码类别:

GIS编程

开发平台:

Visual C++

  1. /* Copyright (c) Mark J. Kilgard, 1994. */
  2. /* This program is freely distributable without licensing fees 
  3.    and is provided without guarantee or warrantee expressed or 
  4.    implied. This program is -not- in the public domain. */
  5. #include <stdlib.h>
  6. #include <stdio.h>
  7. #include <GL/glut.h>
  8. int cursor[] =
  9. {
  10.   GLUT_CURSOR_INHERIT,
  11.   GLUT_CURSOR_NONE,
  12.   GLUT_CURSOR_FULL_CROSSHAIR,
  13.   GLUT_CURSOR_RIGHT_ARROW,
  14.   GLUT_CURSOR_LEFT_ARROW,
  15.   GLUT_CURSOR_INFO,
  16.   GLUT_CURSOR_DESTROY,
  17.   GLUT_CURSOR_HELP,
  18.   GLUT_CURSOR_CYCLE,
  19.   GLUT_CURSOR_SPRAY,
  20.   GLUT_CURSOR_WAIT,
  21.   GLUT_CURSOR_TEXT,
  22.   GLUT_CURSOR_CROSSHAIR,
  23.   GLUT_CURSOR_UP_DOWN,
  24.   GLUT_CURSOR_LEFT_RIGHT,
  25.   GLUT_CURSOR_TOP_SIDE,
  26.   GLUT_CURSOR_BOTTOM_SIDE,
  27.   GLUT_CURSOR_LEFT_SIDE,
  28.   GLUT_CURSOR_RIGHT_SIDE,
  29.   GLUT_CURSOR_TOP_LEFT_CORNER,
  30.   GLUT_CURSOR_TOP_RIGHT_CORNER,
  31.   GLUT_CURSOR_BOTTOM_RIGHT_CORNER,
  32.   GLUT_CURSOR_BOTTOM_LEFT_CORNER,
  33.   0,
  34. };
  35. char *name[] =
  36. {
  37.   "INHERIT",
  38.   "NONE",
  39.   "FULL CROSSHAIR",
  40.   "RIGHT ARROW",
  41.   "LEFT ARROW",
  42.   "INFO",
  43.   "DESTROY",
  44.   "HELP",
  45.   "CYCLE",
  46.   "SPRAY",
  47.   "WAIT",
  48.   "TEXT",
  49.   "CROSSHAIR",
  50.   "UP DOWN",
  51.   "LEFT RIGHT",
  52.   "TOP SIDE",
  53.   "BOTTOM SIDE",
  54.   "LEFT SIDE",
  55.   "RIGHT SIDE",
  56.   "TOP LEFT CORNER",
  57.   "TOP RIGHT CORNER",
  58.   "BOTTOM RIGHT CORNER",
  59.   "BOTTOM LEFT CORNER",
  60.   NULL,
  61. };
  62. int win;
  63. void
  64. futureSetCursor(int value)
  65. {
  66.   glutSetCursor(GLUT_CURSOR_HELP);
  67. }
  68. void
  69. menu(int value)
  70. {
  71.   int cursor;
  72.   if(value < 0) {
  73.     switch(value) {
  74.     case -1:
  75.       glutSetWindow(win);
  76.       glutWarpPointer(25, 25);
  77.       return;
  78.     case -2:
  79.       glutSetWindow(win);
  80.       glutWarpPointer(-25, -25);
  81.       return;
  82.     case -3:
  83.       glutSetWindow(win);
  84.       glutWarpPointer(250, 250);
  85.       return;
  86.     case -4:
  87.       glutSetWindow(win);
  88.       glutWarpPointer(2000, 200);
  89.       return;
  90.     case -5:
  91.       glutTimerFunc(3000, futureSetCursor, glutGetWindow());
  92.       return;
  93.     }
  94.   }
  95.   glutSetCursor(value);
  96.   cursor = glutGet(GLUT_WINDOW_CURSOR);
  97.   if (cursor != value) {
  98.     printf("cursor_test: cursor not set rightn");
  99.     exit(1);
  100.   }
  101. }
  102. void
  103. display(void)
  104. {
  105.   glClear(GL_COLOR_BUFFER_BIT);
  106.   glFlush();
  107. }
  108. void keyboard0( unsigned char key, int x, int y )
  109. {
  110.     printf( "main window: %d %c (%d, %d)n", key, key, x, y );
  111. }
  112. void keyboardup( unsigned char key, int x, int y )
  113. {
  114.     printf( "main window (UP): %d %c (%d, %d)n", key, key, x, y );
  115. }
  116. void keyboard1( unsigned char key, int x, int y )
  117. {
  118.     printf( "subwindow 1: %d %c (%d, %d)n", key, key, x, y );
  119. }
  120. void keyboard2( unsigned char key, int x, int y )
  121. {
  122.     printf( "subwindow 2: %d %c (%d, %d)n", key, key, x, y );
  123. }
  124. void keyboard3( unsigned char key, int x, int y )
  125. {
  126.     printf( "subwindow 3: %d %c (%d, %d)n", key, key, x, y );
  127. }
  128. void motion( int x, int y )
  129. {
  130. printf( "mouse motion: %d %dn", x, y );
  131. }
  132. int
  133. main(int argc, char **argv)
  134. {
  135.   int i;
  136.   int sub1, sub2;
  137.   glutInit(&argc, argv);
  138.   win = glutCreateWindow("cursor test");
  139.   glutSetCursor(GLUT_CURSOR_INFO);
  140.   glClearColor(0.49, 0.62, 0.75, 0.0);
  141.   glutDisplayFunc(display);
  142.   glutCreateMenu(menu);
  143.   for (i = 0; name[i] != NULL; i++) {
  144.     glutAddMenuEntry(name[i], cursor[i]);
  145.   }
  146.   glutAddMenuEntry("Warp to (25,25)", -1);
  147.   glutAddMenuEntry("Warp to (-25,-25)", -2);
  148.   glutAddMenuEntry("Warp to (250,250)", -3);
  149.   glutAddMenuEntry("Warp to (2000,200)", -4);
  150.   glutAddMenuEntry("Set cursor in 3 secs", -5);
  151.   glutAttachMenu(GLUT_RIGHT_BUTTON);
  152.   glutKeyboardFunc( keyboard0 );
  153.   glutKeyboardUpFunc( keyboardup );
  154.   glutMotionFunc( motion );
  155.   sub1 = glutCreateSubWindow(win, 10, 10, 90, 90);
  156.   glutSetCursor(GLUT_CURSOR_CROSSHAIR);
  157.   glutAttachMenu(GLUT_RIGHT_BUTTON);
  158.   glutKeyboardFunc( keyboard1 );
  159.   glClearColor(0.3, 0.82, 0.55, 0.0);
  160.   glutDisplayFunc(display);
  161.   sub2 = glutCreateSubWindow(win, 80, 80, 90, 90);
  162.   glutSetCursor(GLUT_CURSOR_WAIT);
  163.   glutAttachMenu(GLUT_RIGHT_BUTTON);
  164.   glutKeyboardFunc( keyboard2 );
  165.   glClearColor(0.9, 0.2, 0.2, 0.0);
  166.   glutDisplayFunc(display);
  167.   glutCreateSubWindow(sub2, 30, 30, 30, 30 );
  168.   glutSetCursor(GLUT_CURSOR_TEXT);
  169.   glutAttachMenu(GLUT_RIGHT_BUTTON);
  170.   glutKeyboardFunc( keyboard3 );
  171.   glClearColor(0.9, 0.9, 0.2, 0.0);
  172.   glutDisplayFunc(display);
  173.   glutMainLoop();
  174.   return 0;             /* ANSI C requires main to return int. */
  175. }