aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pugl/detail/implementation.c14
-rw-r--r--pugl/detail/implementation.h3
-rw-r--r--pugl/detail/mac.m12
-rw-r--r--pugl/detail/win.c3
-rw-r--r--pugl/detail/x11.c3
5 files changed, 21 insertions, 14 deletions
diff --git a/pugl/detail/implementation.c b/pugl/detail/implementation.c
index 7d7a54f..17cc6fd 100644
--- a/pugl/detail/implementation.c
+++ b/pugl/detail/implementation.c
@@ -21,6 +21,7 @@
#include "pugl/detail/implementation.h"
#include "pugl/pugl.h"
+#include <assert.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
@@ -203,8 +204,7 @@ puglNewView(PuglWorld* const world)
void
puglFreeView(PuglView* view)
{
- const PuglEvent destroyEvent = {{PUGL_DESTROY, 0}};
- puglDispatchEvent(view, &destroyEvent);
+ puglDispatchSimpleEvent(view, PUGL_DESTROY);
// Remove from world view list
PuglWorld* world = view->world;
@@ -366,6 +366,16 @@ puglMustConfigure(PuglView* view, const PuglEventConfigure* configure)
}
void
+puglDispatchSimpleEvent(PuglView* view, const PuglEventType type)
+{
+ assert(type == PUGL_CREATE || type == PUGL_DESTROY || type == PUGL_MAP ||
+ type == PUGL_UNMAP || type == PUGL_CLOSE);
+
+ const PuglEvent event = {{type, 0}};
+ puglDispatchEvent(view, &event);
+}
+
+void
puglDispatchEvent(PuglView* view, const PuglEvent* event)
{
switch (event->type) {
diff --git a/pugl/detail/implementation.h b/pugl/detail/implementation.h
index e368cbc..f363a30 100644
--- a/pugl/detail/implementation.h
+++ b/pugl/detail/implementation.h
@@ -50,6 +50,9 @@ void puglFreeViewInternals(PuglView* view);
/** Return the Unicode code point for `buf` or the replacement character. */
uint32_t puglDecodeUTF8(const uint8_t* buf);
+/** Dispatch an event with a simple `type` to `view`. */
+void puglDispatchSimpleEvent(PuglView* view, PuglEventType type);
+
/** Dispatch `event` to `view`, entering graphics context if necessary. */
void puglDispatchEvent(PuglView* view, const PuglEvent* event);
diff --git a/pugl/detail/mac.m b/pugl/detail/mac.m
index b4c52f0..2920675 100644
--- a/pugl/detail/mac.m
+++ b/pugl/detail/mac.m
@@ -101,11 +101,9 @@ updateViewRect(PuglView* view)
- (void) setIsVisible:(BOOL)flag
{
if (flag && !puglview->visible) {
- const PuglEvent map = {{PUGL_MAP, 0}};
- puglview->eventFunc(puglview, &map);
+ puglDispatchSimpleEvent(puglview, PUGL_MAP);
} else if (!flag && puglview->visible) {
- const PuglEvent unmap = {{PUGL_UNMAP, 0}};
- puglview->eventFunc(puglview, &unmap);
+ puglDispatchSimpleEvent(puglview, PUGL_UNMAP);
}
puglview->visible = flag;
@@ -659,8 +657,7 @@ handleCrossing(PuglWrapperView* view, NSEvent* event, const PuglEventType type)
{
(void)sender;
- const PuglEvent ev = {{PUGL_CLOSE, 0}};
- puglDispatchEvent(window->puglview, &ev);
+ puglDispatchSimpleEvent(window->puglview, PUGL_CLOSE);
return YES;
}
@@ -824,8 +821,7 @@ puglCreateWindow(PuglView* view, const char* title)
[impl->wrapperView updateTrackingAreas];
- const PuglEvent createEvent = {{PUGL_CREATE, 0}};
- puglDispatchEvent(view, &createEvent);
+ puglDispatchSimpleEvent(view, PUGL_CREATE);
const PuglEventConfigure ev = {
PUGL_CONFIGURE,
diff --git a/pugl/detail/win.c b/pugl/detail/win.c
index e8d1214..290a658 100644
--- a/pugl/detail/win.c
+++ b/pugl/detail/win.c
@@ -193,8 +193,7 @@ puglCreateWindow(PuglView* view, const char* title)
puglSetFrame(view, view->frame);
SetWindowLongPtr(impl->hwnd, GWLP_USERDATA, (LONG_PTR)view);
- const PuglEvent createEvent = {{PUGL_CREATE, 0}};
- view->eventFunc(view, &createEvent);
+ puglDispatchSimpleEvent(view, PUGL_CREATE);
return PUGL_SUCCESS;
}
diff --git a/pugl/detail/x11.c b/pugl/detail/x11.c
index 6fbe36a..10ae0bb 100644
--- a/pugl/detail/x11.c
+++ b/pugl/detail/x11.c
@@ -253,8 +253,7 @@ puglCreateWindow(PuglView* view, const char* title)
"XCreateID failed\n");
}
- const PuglEvent createEvent = {{PUGL_CREATE, 0}};
- puglDispatchEvent(view, &createEvent);
+ puglDispatchSimpleEvent(view, PUGL_CREATE);
return PUGL_SUCCESS;
}