home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 109 / EnigmaAmiga109CD.iso / software / sviluppo / mesa-glut / test / glut / menu_test.c < prev    next >
C/C++ Source or Header  |  1998-10-08  |  4KB  |  166 lines

  1.  
  2. /* Copyright (c) Mark J. Kilgard, 1997. */
  3.  
  4. /* This program is freely distributable without licensing fees 
  5.    and is provided without guarantee or warrantee expressed or 
  6.    implied. This program is -not- in the public domain. */
  7.  
  8. #include <stdlib.h>
  9. #include <stdio.h>
  10. #include <GL/glut.h>
  11.  
  12. int win, subwin;
  13. int mainmenu, submenu;
  14. int item = 666;
  15.  
  16. void
  17. display(void)
  18. {
  19.   glClear(GL_COLOR_BUFFER_BIT);
  20.   glFlush();
  21. }
  22.  
  23. /* ARGSUSED1 */
  24. void
  25. gokey(unsigned char key, int x, int y)
  26. {
  27.   char str[100];
  28.   int mods;
  29.  
  30.   mods = glutGetModifiers();
  31.   printf("key = %d, mods = 0x%x\n", key, mods);
  32.   if (mods & GLUT_ACTIVE_ALT) {
  33.     switch (key) {
  34.     case '1':
  35.       printf("Change to sub menu 1\n");
  36.       glutChangeToSubMenu(1, "sub 1", submenu);
  37.       break;
  38.     case '2':
  39.       printf("Change to sub menu 2\n");
  40.       glutChangeToSubMenu(2, "sub 2", submenu);
  41.       break;
  42.     case '3':
  43.       printf("Change to sub menu 3\n");
  44.       glutChangeToSubMenu(3, "sub 3", submenu);
  45.       break;
  46.     case '4':
  47.       printf("Change to sub menu 4\n");
  48.       glutChangeToSubMenu(4, "sub 4", submenu);
  49.       break;
  50.     case '5':
  51.       printf("Change to sub menu 5\n");
  52.       glutChangeToSubMenu(5, "sub 5", submenu);
  53.       break;
  54.     }
  55.   } else {
  56.     switch (key) {
  57.     case '1':
  58.       printf("Change to menu entry 1\n");
  59.       glutChangeToMenuEntry(1, "entry 1", 1);
  60.       break;
  61.     case '2':
  62.       printf("Change to menu entry 2\n");
  63.       glutChangeToMenuEntry(2, "entry 2", 2);
  64.       break;
  65.     case '3':
  66.       printf("Change to menu entry 3\n");
  67.       glutChangeToMenuEntry(3, "entry 3", 3);
  68.       break;
  69.     case '4':
  70.       printf("Change to menu entry 4\n");
  71.       glutChangeToMenuEntry(4, "entry 4", 4);
  72.       break;
  73.     case '5':
  74.       printf("Change to menu entry 5\n");
  75.       glutChangeToMenuEntry(5, "entry 5", 5);
  76.       break;
  77.     case 'a':
  78.     case 'A':
  79.       printf("Adding menu entry %d\n", item);
  80.       sprintf(str, "added entry %d", item);
  81.       glutAddMenuEntry(str, item);
  82.       item++;
  83.       break;
  84.     case 's':
  85.     case 'S':
  86.       printf("Adding submenu %d\n", item);
  87.       sprintf(str, "added submenu %d", item);
  88.       glutAddSubMenu(str, submenu);
  89.       item++;
  90.       break;
  91.     case 'q':
  92.       printf("Remove 1\n");
  93.       glutRemoveMenuItem(1);
  94.       break;
  95.     case 'w':
  96.       printf("Remove 2\n");
  97.       glutRemoveMenuItem(2);
  98.       break;
  99.     case 'e':
  100.       printf("Remove 3\n");
  101.       glutRemoveMenuItem(3);
  102.       break;
  103.     case 'r':
  104.       printf("Remove 4\n");
  105.       glutRemoveMenuItem(4);
  106.       break;
  107.     case 't':
  108.       printf("Remove 5\n");
  109.       glutRemoveMenuItem(5);
  110.       break;
  111.     }
  112.   }
  113. }
  114.  
  115. void
  116. keyboard(unsigned char key, int x, int y)
  117. {
  118.   glutSetMenu(mainmenu);
  119.   gokey(key, x, y);
  120. }
  121.  
  122. void
  123. keyboard2(unsigned char key, int x, int y)
  124. {
  125.   glutSetMenu(submenu);
  126.   gokey(key, x, y);
  127. }
  128.  
  129. void
  130. menu(int value)
  131. {
  132.   printf("menu: entry = %d\n", value);
  133. }
  134.  
  135. void
  136. menu2(int value)
  137. {
  138.   printf("menu2: entry = %d\n", value);
  139. }
  140.  
  141. int
  142. main(int argc, char **argv)
  143. {
  144.   glutInit(&argc, argv);
  145.   win = glutCreateWindow("menu test");
  146.   glClearColor(0.3, 0.3, 0.3, 0.0);
  147.   glutDisplayFunc(display);
  148.   glutKeyboardFunc(keyboard);
  149.   submenu = glutCreateMenu(menu2);
  150.   glutAddMenuEntry("Sub menu 1", 1001);
  151.   glutAddMenuEntry("Sub menu 2", 1002);
  152.   glutAddMenuEntry("Sub menu 3", 1003);
  153.   mainmenu = glutCreateMenu(menu);
  154.   glutAddMenuEntry("First", -1);
  155.   glutAddMenuEntry("Second", -2);
  156.   glutAddMenuEntry("Third", -3);
  157.   glutAddSubMenu("Submenu init", submenu);
  158.   glutAttachMenu(GLUT_RIGHT_BUTTON);
  159.   subwin = glutCreateSubWindow(win, 50, 50, 50, 50);
  160.   glClearColor(0.7, 0.7, 0.7, 0.0);
  161.   glutDisplayFunc(display);
  162.   glutKeyboardFunc(keyboard2);
  163.   glutMainLoop();
  164.   return 0;             /* ANSI C requires main to return int. */
  165. }
  166.