{0, 1, 1},
{1, 0, 1}
};
+int timerInts[] = {
+ 250,
+ 500,
+ 1000
+};
+int timerSurroundInt = 1000, timerCenterInt = 1000;
+
+/* menu IDs, creation/update funcs and callback */
+int menuID, subMenuSurround, subMenuCenter;
+
+void createMenuEntries(int which)
+{
+ for (int i = 0; i < sizeof(timerInts) / sizeof(*timerInts); i++)
+ {
+ char temp[10] = {'\0'};
+ /* flag current value */
+ if ((which == 1 ? timerSurroundInt : timerCenterInt) == timerInts[i])
+ temp[0] = '+';
+ else
+ temp[0] = '-';
+
+ sprintf(temp + 1, " %4d ms", timerInts[i]);
+
+ glutAddMenuEntry(temp, timerInts[i]);
+ }
+}
+
+void updateMenuEntries(int which)
+{
+ for (int i = 0; i < sizeof(timerInts) / sizeof(*timerInts); i++)
+ {
+ char temp[10] = { '\0' };
+ /* flag current value */
+ if ((which == 1 ? timerSurroundInt : timerCenterInt) == timerInts[i])
+ temp[0] = '+';
+ else
+ temp[0] = '-';
+
+ sprintf(temp + 1, " %4d ms", timerInts[i]);
+
+ glutChangeToMenuEntry(i+1, temp, timerInts[i]);
+ }
+}
+\r
+void MenuSurround(int timerInt)\r
+{\r
+ timerSurroundInt = timerInt;\r
+ glutSetMenu(subMenuSurround);\r
+ updateMenuEntries(1);\r
+}
+void MenuCenter(int timerInt)\r
+{\r
+ timerCenterInt = timerInt;\r
+ glutSetMenu(subMenuCenter);\r
+ updateMenuEntries(2);\r
+}
int main(int argc, char **argv)
{
glutTimerFunc(1000, timer_func, 1);
glutTimerFunc(500, timer_func, 2);
+ /* menus for setting timing */
+ subMenuSurround = glutCreateMenu(MenuSurround);\r
+ createMenuEntries(1);\r
+\r
+ subMenuCenter = glutCreateMenu(MenuCenter);\r
+ createMenuEntries(2);\r
+\r
+ menuID = glutCreateMenu(MenuSurround); /* doesn't matter, no clickable entries in this menu */\r
+ glutAddSubMenu("Center", subMenuCenter);\r
+ glutAddSubMenu("Surround", subMenuSurround);\r
+ glutAttachMenu(GLUT_RIGHT_BUTTON);
+
glutMainLoop();
return 0;
}
glutPostRedisplay();
- /* (re)set the timer callback and ask glut to call it in 1 second */
- glutTimerFunc(1000, timer_func, which);
+ /* (re)set the timer callback and ask glut to call it in x ms */
+ glutTimerFunc(which == 1 ? timerSurroundInt:timerCenterInt, timer_func, which);
}