diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mupdf-source/thirdparty/freeglut/progs/demos/timer/timer.c	Mon Sep 15 11:43:07 2025 +0200
@@ -0,0 +1,144 @@
+/* Timer demo
+ *
+ * Written by John Tsiombikas <nuclear@member.fsf.org>
+ *
+ * Demonstrate the use of glutTimerFunc, by changing the color of the
+ * framebuffer every (approximately) 1 sec.
+ */
+#include <stdio.h>
+#include <GL/glut.h>
+
+void disp(void);
+void timer_func(int unused);
+
+/* color index will be advanced every time the timer expires */
+int cidx = 0;
+int pcidx = 2;
+float color[][3] = {
+	{1, 0, 0},
+	{0, 1, 0},
+	{0, 0, 1},
+	{1, 1, 0},
+	{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)
+{
+	int i;
+    for (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)
+{
+	int i;
+    for (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)
+{
+	glutInit(&argc, argv);
+	glutInitWindowSize(128, 128);
+	glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
+	glutCreateWindow("timer test");
+
+	glutDisplayFunc(disp);
+
+    /* get timer started, its reset in the timer function itself */
+    glutTimerFunc(1000, timer_func, 1);
+    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();
+	return 0;
+}
+
+void disp(void)
+{
+	glClearColor(color[cidx][0], color[cidx][1], color[cidx][2], 1);
+	glClear(GL_COLOR_BUFFER_BIT);
+
+    glPointSize(10.f);
+    glColor3f(color[pcidx][0], color[pcidx][1], color[pcidx][2]);
+    glBegin(GL_POINTS);
+        glVertex2i(0,0);
+    glEnd();
+
+	glutSwapBuffers();
+}
+
+void timer_func(int which)
+{
+	/* advance the color index and trigger a redisplay */
+    switch (which)
+    {
+    case 1:
+        cidx = (cidx + 1) % (sizeof color / sizeof *color);
+        break;
+    case 2:
+        pcidx = (pcidx + 1) % (sizeof color / sizeof *color);
+        break;
+    }
+    
+	glutPostRedisplay();
+
+	/* (re)set the timer callback and ask glut to call it in x ms */
+    glutTimerFunc(which == 1 ? timerSurroundInt:timerCenterInt, timer_func, which);
+}