//主菜单 void MenuFunc(int data) { glutGetMenu(); switch(data) { case 1://背景赋值为纯色 //Bcolor = red; break; case 2: //Bcolor = black_white_line; break; case 3: //Bcolor = black_white_sqare;//背景赋值为方格色 break; case 4://文件的保存 SaveFile(); break; case 5: ReadFile(); break; case 6: ClearScreen(); break; case 7: //rotate break; } }
void it(int value) { glutDestroyWindow(glutGetWindow()); printf("menu selection: win=%d, menu=%d\n", glutGetWindow(), glutGetMenu()); switch (value) { case 1: if (list == 1) { list = 2; } else { list = 1; } break; case 2: exit(0); break; case 3: glutAddMenuEntry("new entry", value + 9); break; case 4: glutChangeToMenuEntry(1, "toggle it for drawing", 1); glutChangeToMenuEntry(3, "motion done", 3); glutIdleFunc(idle); break; case 5: glutIdleFunc(NULL); break; case 6: glutTimerFunc(2000, delayed_stop, 0); break; default: printf("value = %d\n", value); } }
void menu2(int value) { printf("menu item selected: %d\n", value); if (value != 46) { printf("FAIL: time6 expected 45\n"); exit(1); } glutDestroyMenu(glutGetMenu()); glutDestroyWindow(glutGetWindow()); glutTimerFunc(1000, time7, 7); }
void time2(int value) { if (value != 2) { printf("FAIL: time2 expected 2\n"); exit(1); } glutMouseFunc(mouse); /* By attaching and detaching a menu to each button, make sure button usage for menus does not mess up normal button callback. */ glutCreateMenu(menu); glutAttachMenu(GLUT_RIGHT_BUTTON); glutAttachMenu(GLUT_MIDDLE_BUTTON); glutAttachMenu(GLUT_LEFT_BUTTON); glutDetachMenu(GLUT_RIGHT_BUTTON); glutDetachMenu(GLUT_MIDDLE_BUTTON); glutDetachMenu(GLUT_LEFT_BUTTON); glutDestroyMenu(glutGetMenu()); switch (mouseButtons) { case 3: printf("In the black window, please click: left, then middle, then right buttons (in that order)\n"); break; case 2: printf("In the black window, please click: left, then right buttons (in that order)\n"); break; case 1: printf("In the black window, please click: left button\n"); break; case 0: /* No mouse buttons?? Skip all subsequent tests since they involve the mouse. */ glutTimerFunc(1000, time7, 7); glutMouseFunc(NULL); break; } }
int main(int argc, char **argv) { int win, menu; int marray[NUM]; int warray[NUM]; int i, j; GLint isIndex; glutInit(&argc, argv); glutInitWindowPosition(10, 10); glutInitWindowSize(200, 200); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); win = glutCreateWindow("test2"); glGetIntegerv(GL_INDEX_MODE, &isIndex); if (isIndex != 0) { printf("FAIL: window should be RGBA\n"); exit(1); } glutSetWindow(win); glutDisplayFunc(display); menu = glutCreateMenu(menuSelect); glutSetMenu(menu); glutReshapeFunc(NULL); glutReshapeFunc(NULL); glutKeyboardFunc(NULL); glutKeyboardFunc(NULL); glutMouseFunc(NULL); glutMouseFunc(NULL); glutMotionFunc(NULL); glutMotionFunc(NULL); glutVisibilityFunc(NULL); glutVisibilityFunc(NULL); glutMenuStateFunc(NULL); glutMenuStateFunc(NULL); glutMenuStatusFunc(NULL); glutMenuStatusFunc(NULL); glutSpecialFunc(NULL); glutSpecialFunc(NULL); glutSpaceballMotionFunc(NULL); glutSpaceballMotionFunc(NULL); glutSpaceballRotateFunc(NULL); glutSpaceballRotateFunc(NULL); glutSpaceballButtonFunc(NULL); glutSpaceballButtonFunc(NULL); glutButtonBoxFunc(NULL); glutButtonBoxFunc(NULL); glutDialsFunc(NULL); glutDialsFunc(NULL); glutTabletMotionFunc(NULL); glutTabletMotionFunc(NULL); glutTabletButtonFunc(NULL); glutTabletButtonFunc(NULL); for (i = 0; i < NUM; i++) { marray[i] = glutCreateMenu(menuSelect); warray[i] = glutCreateWindow("test"); glutDisplayFunc(display); for (j = 0; j < i; j++) { glutAddMenuEntry("Hello", 1); glutAddSubMenu("Submenu", menu); } if (marray[i] != glutGetMenu()) { printf("FAIL: current menu not %d\n", marray[i]); exit(1); } if (warray[i] != glutGetWindow()) { printf("FAIL: current window not %d\n", warray[i]); exit(1); } glutDisplayFunc(NeverVoid); glutVisibilityFunc(NeverValue); glutHideWindow(); } for (i = 0; i < NUM; i++) { glutDestroyMenu(marray[i]); glutDestroyWindow(warray[i]); } glutTimerFunc(500, timer, 42); head = glutGet(GLUT_ELAPSED_TIME); glutIdleFunc(idle); glutMainLoop(); return 0; /* ANSI C requires main to return int. */ }
int main(int argc, char **argv) { int win1, win2, men1, men2, men3; glutInit(&argc, argv); if (0 != glutGetMenu()) { printf("FAIL: current menu wrong, should be zero\n"); exit(1); } if (0 != glutGetWindow()) { printf("FAIL: current window wrong, should be zero\n"); exit(1); } glutInitWindowSize(140, 140); /* Make sure initial glut init display mode is right. */ if (glutGet(GLUT_INIT_DISPLAY_MODE) != (GLUT_RGBA | GLUT_SINGLE | GLUT_DEPTH)) { printf("FAIL: init display mode wrong\n"); exit(1); } glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_STENCIL); if (glutGet(GLUT_INIT_DISPLAY_MODE) != (GLUT_RGBA | GLUT_SINGLE | GLUT_STENCIL)) { printf("FAIL: display mode wrong\n"); exit(1); } /* Interesting case: creating menu before creating windows. */ men1 = glutCreateMenu(menuSelect); /* Make sure glutCreateMenu doesn't change init display mode. */ if (glutGet(GLUT_INIT_DISPLAY_MODE) != (GLUT_RGBA | GLUT_SINGLE | GLUT_STENCIL)) { printf("FAIL: display mode changed\n"); exit(1); } if (men1 != glutGetMenu()) { printf("FAIL: current menu wrong\n"); exit(1); } glutAddMenuEntry("hello", 1); glutAddMenuEntry("bye", 2); glutAddMenuEntry("yes", 3); glutAddMenuEntry("no", 4); glutAddSubMenu("submenu", 5); win1 = glutCreateWindow("test24"); glutDisplayFunc(display); if (win1 != glutGetWindow()) { printf("FAIL: current window wrong\n"); exit(1); } if (men1 != glutGetMenu()) { printf("FAIL: current menu wrong\n"); exit(1); } men2 = glutCreateMenu(menuSelect); glutAddMenuEntry("yes", 3); glutAddMenuEntry("no", 4); glutAddSubMenu("submenu", 5); /* Make sure glutCreateMenu doesn't change init display mode. */ if (glutGet(GLUT_INIT_DISPLAY_MODE) != (GLUT_RGBA | GLUT_SINGLE | GLUT_STENCIL)) { printf("FAIL: display mode changed\n"); exit(1); } if (men2 != glutGetMenu()) { printf("FAIL: current menu wrong\n"); exit(1); } if (win1 != glutGetWindow()) { printf("FAIL: current window wrong\n"); exit(1); } win2 = glutCreateWindow("test24 second"); glutDisplayFunc(display); if (win2 != glutGetWindow()) { printf("FAIL: current window wrong\n"); exit(1); } glutDestroyWindow(win2); if (0 != glutGetWindow()) { printf("FAIL: current window wrong, should be zero\n"); exit(1); } men3 = glutCreateMenu(menuSelect); glutAddMenuEntry("no", 4); glutAddSubMenu("submenu", 5); if (glutGet(GLUT_INIT_DISPLAY_MODE) != (GLUT_RGBA | GLUT_SINGLE | GLUT_STENCIL)) { printf("FAIL: display mode changed\n"); exit(1); } glutDestroyMenu(men3); if (0 != glutGetMenu()) { printf("FAIL: current menu wrong, should be zero\n"); exit(1); } glutTimerFunc(2 * 1000, timer, 23); glutMainLoop(); return 0; /* ANSI C requires main to return int. */ }
/** Notify all listeners about a mouse button state change, as * caused by the menu passed. */ void GlutMouseSource::menuStatusCallback( int state, int x, int y ){ if ( state == GLUT_MENU_IN_USE ){ int info = ( glutGetMenu() + 1 ) | MOUSE_BUTTON_DOWN; //&&&just a hack to test!! instance->notify( info, x, y ); } }
/* * Class: gruenewa_opengl_GLUT__ * Method: glutGetMenu * Signature: ()I */ JNIEXPORT jint JNICALL Java_gruenewa_opengl_GLUT_00024_glutGetMenu (JNIEnv * jenv, jobject jobj) { return glutGetMenu(); }