diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/internal.c | 13 | ||||
-rw-r--r-- | src/mac.m | 6 | ||||
-rw-r--r-- | src/types.h | 2 | ||||
-rw-r--r-- | src/win.c | 35 | ||||
-rw-r--r-- | src/x11.c | 7 |
5 files changed, 29 insertions, 34 deletions
diff --git a/src/internal.c b/src/internal.c index ef1bcef..f1f2e65 100644 --- a/src/internal.c +++ b/src/internal.c @@ -131,7 +131,7 @@ puglPreRealize(PuglView* const view) PuglStatus puglDispatchSimpleEvent(PuglView* view, const PuglEventType type) { - assert(type == PUGL_CREATE || type == PUGL_DESTROY || type == PUGL_MAP || + assert(type == PUGL_REALIZE || type == PUGL_UNREALIZE || type == PUGL_MAP || type == PUGL_UNMAP || type == PUGL_UPDATE || type == PUGL_CLOSE || type == PUGL_LOOP_ENTER || type == PUGL_LOOP_LEAVE); @@ -183,17 +183,17 @@ puglDispatchEvent(PuglView* view, const PuglEvent* event) case PUGL_NOTHING: break; - case PUGL_CREATE: + case PUGL_REALIZE: assert(view->stage == PUGL_VIEW_STAGE_ALLOCATED); if (!(st0 = view->backend->enter(view, NULL))) { st0 = view->eventFunc(view, event); st1 = view->backend->leave(view, NULL); } - view->stage = PUGL_VIEW_STAGE_CREATED; + view->stage = PUGL_VIEW_STAGE_REALIZED; break; - case PUGL_DESTROY: - assert(view->stage >= PUGL_VIEW_STAGE_CREATED); + case PUGL_UNREALIZE: + assert(view->stage >= PUGL_VIEW_STAGE_REALIZED); if (!(st0 = view->backend->enter(view, NULL))) { st0 = view->eventFunc(view, event); st1 = view->backend->leave(view, NULL); @@ -202,14 +202,13 @@ puglDispatchEvent(PuglView* view, const PuglEvent* event) break; case PUGL_CONFIGURE: - assert(view->stage >= PUGL_VIEW_STAGE_CREATED); if (puglMustConfigure(view, &event->configure)) { if (!(st0 = view->backend->enter(view, NULL))) { st0 = puglConfigure(view, event); st1 = view->backend->leave(view, NULL); } } - if (view->stage == PUGL_VIEW_STAGE_CREATED) { + if (view->stage == PUGL_VIEW_STAGE_REALIZED) { view->stage = PUGL_VIEW_STAGE_CONFIGURED; } break; @@ -1163,9 +1163,7 @@ puglRealize(PuglView* view) [impl->wrapperView updateTrackingAreas]; - puglDispatchSimpleEvent(view, PUGL_CREATE); - - return PUGL_SUCCESS; + return puglDispatchSimpleEvent(view, PUGL_REALIZE); } PuglStatus @@ -1176,7 +1174,7 @@ puglUnrealize(PuglView* const view) return PUGL_FAILURE; } - puglDispatchSimpleEvent(view, PUGL_DESTROY); + puglDispatchSimpleEvent(view, PUGL_UNREALIZE); if (view->backend) { view->backend->destroy(view); diff --git a/src/types.h b/src/types.h index 28d8548..072d3fe 100644 --- a/src/types.h +++ b/src/types.h @@ -36,7 +36,7 @@ typedef struct { /// Stage of a view along its lifespan typedef enum { PUGL_VIEW_STAGE_ALLOCATED, - PUGL_VIEW_STAGE_CREATED, + PUGL_VIEW_STAGE_REALIZED, PUGL_VIEW_STAGE_CONFIGURED, PUGL_VIEW_STAGE_MAPPED, } PuglViewStage; @@ -209,6 +209,14 @@ puglPollWinEvents(PuglWorld* world, const double timeout) return PUGL_SUCCESS; } +static void +ensureHint(PuglView* const view, const PuglViewHint hint, const int value) +{ + if (view->hints[hint] == PUGL_DONT_CARE) { + view->hints[hint] = value; + } +} + PuglStatus puglRealize(PuglView* view) { @@ -225,19 +233,11 @@ puglRealize(PuglView* view) return st; } - // Getting depth from the display mode seems tedious, just set usual values - if (view->hints[PUGL_RED_BITS] == PUGL_DONT_CARE) { - view->hints[PUGL_RED_BITS] = 8; - } - if (view->hints[PUGL_BLUE_BITS] == PUGL_DONT_CARE) { - view->hints[PUGL_BLUE_BITS] = 8; - } - if (view->hints[PUGL_GREEN_BITS] == PUGL_DONT_CARE) { - view->hints[PUGL_GREEN_BITS] = 8; - } - if (view->hints[PUGL_ALPHA_BITS] == PUGL_DONT_CARE) { - view->hints[PUGL_ALPHA_BITS] = 8; - } + // Set default depth hints if the user hasn't specified any + ensureHint(view, PUGL_RED_BITS, 8); + ensureHint(view, PUGL_GREEN_BITS, 8); + ensureHint(view, PUGL_BLUE_BITS, 8); + ensureHint(view, PUGL_ALPHA_BITS, 8); // Get refresh rate for resize draw timer DEVMODEA devMode; @@ -250,6 +250,7 @@ puglRealize(PuglView* view) return PUGL_REGISTRATION_FAILED; } + // Configure and create window if ((st = view->backend->configure(view)) || (st = view->backend->create(view))) { return st; @@ -269,9 +270,7 @@ puglRealize(PuglView* view) puglSetFrame(view, view->frame); SetWindowLongPtr(impl->hwnd, GWLP_USERDATA, (LONG_PTR)view); - puglDispatchSimpleEvent(view, PUGL_CREATE); - - return PUGL_SUCCESS; + return puglDispatchSimpleEvent(view, PUGL_REALIZE); } PuglStatus @@ -282,7 +281,7 @@ puglUnrealize(PuglView* const view) return PUGL_FAILURE; } - puglDispatchSimpleEvent(view, PUGL_DESTROY); + puglDispatchSimpleEvent(view, PUGL_UNREALIZE); if (view->backend) { view->backend->destroy(view); @@ -972,7 +971,7 @@ puglUpdate(PuglWorld* world, double timeout) } for (size_t i = 0; i < world->numViews; ++i) { - if (world->views[i]->visible) { + if (puglGetVisible(world->views[i])) { puglDispatchSimpleEvent(world->views[i], PUGL_UPDATE); } @@ -475,7 +475,7 @@ puglRealize(PuglView* const view) (XIM)0); } - puglDispatchSimpleEvent(view, PUGL_CREATE); + st = puglDispatchSimpleEvent(view, PUGL_REALIZE); /* Flush before returning for two reasons: so that hints are available to the view's parent via the X server during embedding, and so that the X server @@ -484,8 +484,7 @@ puglRealize(PuglView* const view) increases the chances that an application will be cleanly configured once on startup with the correct position and size. */ XFlush(display); - - return PUGL_SUCCESS; + return st; } PuglStatus @@ -496,7 +495,7 @@ puglUnrealize(PuglView* const view) return PUGL_FAILURE; } - puglDispatchSimpleEvent(view, PUGL_DESTROY); + puglDispatchSimpleEvent(view, PUGL_UNREALIZE); clearX11Clipboard(&impl->clipboard); if (impl->xic) { |