timer demo now has a menu to:
- set flicker tempo - test whether menus can be modified in the callback (there was a regression with this in freeglut 2.8.1 that was perchance already fixed in r1583, but make sure we're testing this from now on) git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1637 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
parent
5757433d2a
commit
0be6109313
@ -22,6 +22,62 @@ float color[][3] = {
|
|||||||
{0, 1, 1},
|
{0, 1, 1},
|
||||||
{1, 0, 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]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MenuSurround(int timerInt)
|
||||||
|
{
|
||||||
|
timerSurroundInt = timerInt;
|
||||||
|
glutSetMenu(subMenuSurround);
|
||||||
|
updateMenuEntries(1);
|
||||||
|
}
|
||||||
|
void MenuCenter(int timerInt)
|
||||||
|
{
|
||||||
|
timerCenterInt = timerInt;
|
||||||
|
glutSetMenu(subMenuCenter);
|
||||||
|
updateMenuEntries(2);
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
@ -36,6 +92,18 @@ int main(int argc, char **argv)
|
|||||||
glutTimerFunc(1000, timer_func, 1);
|
glutTimerFunc(1000, timer_func, 1);
|
||||||
glutTimerFunc(500, timer_func, 2);
|
glutTimerFunc(500, timer_func, 2);
|
||||||
|
|
||||||
|
/* menus for setting timing */
|
||||||
|
subMenuSurround = glutCreateMenu(MenuSurround);
|
||||||
|
createMenuEntries(1);
|
||||||
|
|
||||||
|
subMenuCenter = glutCreateMenu(MenuCenter);
|
||||||
|
createMenuEntries(2);
|
||||||
|
|
||||||
|
menuID = glutCreateMenu(MenuSurround); /* doesn't matter, no clickable entries in this menu */
|
||||||
|
glutAddSubMenu("Center", subMenuCenter);
|
||||||
|
glutAddSubMenu("Surround", subMenuSurround);
|
||||||
|
glutAttachMenu(GLUT_RIGHT_BUTTON);
|
||||||
|
|
||||||
glutMainLoop();
|
glutMainLoop();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -69,6 +137,6 @@ void timer_func(int which)
|
|||||||
|
|
||||||
glutPostRedisplay();
|
glutPostRedisplay();
|
||||||
|
|
||||||
/* (re)set the timer callback and ask glut to call it in 1 second */
|
/* (re)set the timer callback and ask glut to call it in x ms */
|
||||||
glutTimerFunc(1000, timer_func, which);
|
glutTimerFunc(which == 1 ? timerSurroundInt:timerCenterInt, timer_func, which);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user