aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2020-03-15 18:30:24 +0100
committerDavid Robillard <d@drobilla.net>2020-03-15 20:53:37 +0100
commitefc053fe5a38a4928fbfd3780f5665dd43bc7f95 (patch)
treec3e28366d5b57592e82c004ab59a3e364d4ef57f /examples
parent3b9e8287fd4c1096a2d6244aa07bc28cacb4da8d (diff)
Unify event loop functions as puglUpdate()
The previous separation between polling and dispatching was a lie, especially on MacOS where it is impossible to only poll for events without dispatching anything. Providing such an API is misleading, and problematic in various other ways. So, merge them into a single puglUpdate() function which can do the right thing on all platforms. This also adds the behaviour of actually processing all events in the given time interval, which is almost always what clients actually want to do when using a positive timeout (naively doing this before caused terrible input lag).
Diffstat (limited to 'examples')
-rw-r--r--examples/pugl_cairo_demo.c14
-rw-r--r--examples/pugl_embed_demo.c21
-rw-r--r--examples/pugl_gl3_demo.c8
-rw-r--r--examples/pugl_print_events.c5
-rw-r--r--examples/pugl_window_demo.c13
5 files changed, 30 insertions, 31 deletions
diff --git a/examples/pugl_cairo_demo.c b/examples/pugl_cairo_demo.c
index d2e57f8..a1423ae 100644
--- a/examples/pugl_cairo_demo.c
+++ b/examples/pugl_cairo_demo.c
@@ -203,6 +203,11 @@ onEvent(PuglView* view, const PuglEvent* event)
app->entered = false;
puglPostRedisplay(view);
break;
+ case PUGL_UPDATE:
+ if (app->opts.continuous) {
+ puglPostRedisplay(view);
+ }
+ break;
case PUGL_EXPOSE:
onDisplay(app, view, &event->expose);
break;
@@ -249,14 +254,9 @@ main(int argc, char** argv)
puglShowWindow(view);
PuglFpsPrinter fpsPrinter = { puglGetTime(app.world) };
+ const double timeout = app.opts.continuous ? (1 / 60.0) : -1.0;
while (!app.quit) {
- if (app.opts.continuous) {
- postButtonRedisplay(view);
- } else {
- puglPollEvents(app.world, -1);
- }
-
- puglDispatchEvents(app.world);
+ puglUpdate(app.world, timeout);
if (app.opts.continuous) {
puglPrintFps(app.world, &fpsPrinter, &app.framesDrawn);
diff --git a/examples/pugl_embed_demo.c b/examples/pugl_embed_demo.c
index 6bafae5..174fd36 100644
--- a/examples/pugl_embed_demo.c
+++ b/examples/pugl_embed_demo.c
@@ -1,5 +1,5 @@
/*
- Copyright 2012-2019 David Robillard <http://drobilla.net>
+ Copyright 2012-2020 David Robillard <http://drobilla.net>
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -164,6 +164,11 @@ onParentEvent(PuglView* view, const PuglEvent* event)
reshapeCube((int)event->configure.width, (int)event->configure.height);
puglSetFrame(app->child, getChildFrame(parentFrame));
break;
+ case PUGL_UPDATE:
+ if (app->continuous) {
+ puglPostRedisplay(view);
+ }
+ break;
case PUGL_EXPOSE:
if (puglHasFocus(app->parent)) {
glMatrixMode(GL_MODELVIEW);
@@ -208,6 +213,11 @@ onEvent(PuglView* view, const PuglEvent* event)
case PUGL_CONFIGURE:
reshapeCube((int)event->configure.width, (int)event->configure.height);
break;
+ case PUGL_UPDATE:
+ if (app->continuous) {
+ puglPostRedisplay(view);
+ }
+ break;
case PUGL_EXPOSE:
onDisplay(view);
break;
@@ -317,14 +327,7 @@ main(int argc, char** argv)
while (!app.quit) {
const double thisTime = puglGetTime(app.world);
- if (app.continuous) {
- puglPostRedisplay(app.parent);
- puglPostRedisplay(app.child);
- } else {
- puglPollEvents(app.world, -1);
- }
-
- puglDispatchEvents(app.world);
+ puglUpdate(app.world, app.continuous ? 0.0 : -1.0);
++framesDrawn;
if (!requestedAttention && thisTime > 5.0) {
diff --git a/examples/pugl_gl3_demo.c b/examples/pugl_gl3_demo.c
index e0c63ca..26db852 100644
--- a/examples/pugl_gl3_demo.c
+++ b/examples/pugl_gl3_demo.c
@@ -1,5 +1,5 @@
/*
- Copyright 2012-2019 David Robillard <http://drobilla.net>
+ Copyright 2012-2020 David Robillard <http://drobilla.net>
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -177,6 +177,9 @@ onEvent(PuglView* view, const PuglEvent* event)
case PUGL_CONFIGURE:
onConfigure(view, event->configure.width, event->configure.height);
break;
+ case PUGL_UPDATE:
+ puglPostRedisplay(view);
+ break;
case PUGL_EXPOSE: onExpose(view); break;
case PUGL_CLOSE: app->quit = 1; break;
case PUGL_KEY_PRESS:
@@ -411,8 +414,7 @@ main(int argc, char** argv)
// Grind away, drawing continuously
PuglFpsPrinter fpsPrinter = {puglGetTime(app.world)};
while (!app.quit) {
- puglPostRedisplay(app.view);
- puglDispatchEvents(app.world);
+ puglUpdate(app.world, 0.0);
puglPrintFps(app.world, &fpsPrinter, &app.framesDrawn);
}
diff --git a/examples/pugl_print_events.c b/examples/pugl_print_events.c
index c662117..9c81033 100644
--- a/examples/pugl_print_events.c
+++ b/examples/pugl_print_events.c
@@ -1,5 +1,5 @@
/*
- Copyright 2012-2019 David Robillard <http://drobilla.net>
+ Copyright 2012-2020 David Robillard <http://drobilla.net>
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -68,8 +68,7 @@ main(void)
puglShowWindow(app.view);
while (!app.quit) {
- puglPollEvents(app.world, -1);
- puglDispatchEvents(app.world);
+ puglUpdate(app.world, -1.0);
}
puglFreeView(app.view);
diff --git a/examples/pugl_window_demo.c b/examples/pugl_window_demo.c
index 394b959..248d44e 100644
--- a/examples/pugl_window_demo.c
+++ b/examples/pugl_window_demo.c
@@ -128,6 +128,9 @@ onEvent(PuglView* view, const PuglEvent* event)
case PUGL_CONFIGURE:
reshapeCube((int)event->configure.width, (int)event->configure.height);
break;
+ case PUGL_UPDATE:
+ puglPostRedisplay(view);
+ break;
case PUGL_EXPOSE:
onDisplay(view);
break;
@@ -224,15 +227,7 @@ main(int argc, char** argv)
PuglFpsPrinter fpsPrinter = {puglGetTime(app.world)};
unsigned framesDrawn = 0;
while (!app.quit) {
- if (app.continuous) {
- for (size_t i = 0; i < 2; ++i) {
- puglPostRedisplay(app.cubes[i].view);
- }
- } else {
- puglPollEvents(app.world, -1);
- }
-
- puglDispatchEvents(app.world);
+ puglUpdate(app.world, app.continuous ? 0.0 : -1.0);
++framesDrawn;
if (app.continuous) {