comparison mupdf-source/thirdparty/freeglut/progs/demos/timer/timer.c @ 2:b50eed0cc0ef upstream

ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4. The directory name has changed: no version number in the expanded directory now.
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 15 Sep 2025 11:43:07 +0200
parents
children
comparison
equal deleted inserted replaced
1:1d09e1dec1d9 2:b50eed0cc0ef
1 /* Timer demo
2 *
3 * Written by John Tsiombikas <nuclear@member.fsf.org>
4 *
5 * Demonstrate the use of glutTimerFunc, by changing the color of the
6 * framebuffer every (approximately) 1 sec.
7 */
8 #include <stdio.h>
9 #include <GL/glut.h>
10
11 void disp(void);
12 void timer_func(int unused);
13
14 /* color index will be advanced every time the timer expires */
15 int cidx = 0;
16 int pcidx = 2;
17 float color[][3] = {
18 {1, 0, 0},
19 {0, 1, 0},
20 {0, 0, 1},
21 {1, 1, 0},
22 {0, 1, 1},
23 {1, 0, 1}
24 };
25 int timerInts[] = {
26 250,
27 500,
28 1000
29 };
30 int timerSurroundInt = 1000, timerCenterInt = 1000;
31
32 /* menu IDs, creation/update funcs and callback */
33 int menuID, subMenuSurround, subMenuCenter;
34
35 void createMenuEntries(int which)
36 {
37 int i;
38 for (i = 0; i < sizeof(timerInts) / sizeof(*timerInts); i++)
39 {
40 char temp[10] = {'\0'};
41 /* flag current value */
42 if ((which == 1 ? timerSurroundInt : timerCenterInt) == timerInts[i])
43 temp[0] = '+';
44 else
45 temp[0] = '-';
46
47 sprintf(temp + 1, " %4d ms", timerInts[i]);
48
49 glutAddMenuEntry(temp, timerInts[i]);
50 }
51 }
52
53 void updateMenuEntries(int which)
54 {
55 int i;
56 for (i = 0; i < sizeof(timerInts) / sizeof(*timerInts); i++)
57 {
58 char temp[10] = { '\0' };
59 /* flag current value */
60 if ((which == 1 ? timerSurroundInt : timerCenterInt) == timerInts[i])
61 temp[0] = '+';
62 else
63 temp[0] = '-';
64
65 sprintf(temp + 1, " %4d ms", timerInts[i]);
66
67 glutChangeToMenuEntry(i+1, temp, timerInts[i]);
68 }
69 }
70
71 void MenuSurround(int timerInt)
72 {
73 timerSurroundInt = timerInt;
74 glutSetMenu(subMenuSurround);
75 updateMenuEntries(1);
76 }
77 void MenuCenter(int timerInt)
78 {
79 timerCenterInt = timerInt;
80 glutSetMenu(subMenuCenter);
81 updateMenuEntries(2);
82 }
83
84 int main(int argc, char **argv)
85 {
86 glutInit(&argc, argv);
87 glutInitWindowSize(128, 128);
88 glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
89 glutCreateWindow("timer test");
90
91 glutDisplayFunc(disp);
92
93 /* get timer started, its reset in the timer function itself */
94 glutTimerFunc(1000, timer_func, 1);
95 glutTimerFunc(500, timer_func, 2);
96
97 /* menus for setting timing */
98 subMenuSurround = glutCreateMenu(MenuSurround);
99 createMenuEntries(1);
100
101 subMenuCenter = glutCreateMenu(MenuCenter);
102 createMenuEntries(2);
103
104 menuID = glutCreateMenu(MenuSurround); /* doesn't matter, no clickable entries in this menu */
105 glutAddSubMenu("Center", subMenuCenter);
106 glutAddSubMenu("Surround", subMenuSurround);
107 glutAttachMenu(GLUT_RIGHT_BUTTON);
108
109 glutMainLoop();
110 return 0;
111 }
112
113 void disp(void)
114 {
115 glClearColor(color[cidx][0], color[cidx][1], color[cidx][2], 1);
116 glClear(GL_COLOR_BUFFER_BIT);
117
118 glPointSize(10.f);
119 glColor3f(color[pcidx][0], color[pcidx][1], color[pcidx][2]);
120 glBegin(GL_POINTS);
121 glVertex2i(0,0);
122 glEnd();
123
124 glutSwapBuffers();
125 }
126
127 void timer_func(int which)
128 {
129 /* advance the color index and trigger a redisplay */
130 switch (which)
131 {
132 case 1:
133 cidx = (cidx + 1) % (sizeof color / sizeof *color);
134 break;
135 case 2:
136 pcidx = (pcidx + 1) % (sizeof color / sizeof *color);
137 break;
138 }
139
140 glutPostRedisplay();
141
142 /* (re)set the timer callback and ask glut to call it in x ms */
143 glutTimerFunc(which == 1 ? timerSurroundInt:timerCenterInt, timer_func, which);
144 }