Browse Source

Only render and resize once per cycle

pull/83/head
falkTX 5 years ago
parent
commit
285b6b8b79
1 changed files with 14 additions and 6 deletions
  1. +14
    -6
      dgl/src/pugl/pugl_x11.c

+ 14
- 6
dgl/src/pugl/pugl_x11.c View File

@@ -206,8 +206,10 @@ puglCreateWindow(PuglView* view, const char* title)
return 1;
}

puglUpdateGeometryConstraints(view, view->min_width, view->min_height, view->min_width != view->width);
XResizeWindow(view->impl->display, view->impl->win, view->width, view->height);
if (view->width > 1 || view->height > 1) {
puglUpdateGeometryConstraints(view, view->min_width, view->min_height, view->min_width != view->width);
XResizeWindow(view->impl->display, view->impl->win, view->width, view->height);
}

if (title) {
XStoreName(impl->display, impl->win, title);
@@ -419,6 +421,9 @@ send_event:
PuglStatus
puglProcessEvents(PuglView* view)
{
int conf_width = -1;
int conf_height = -1;

XEvent event;
while (XPending(view->impl->display) > 0) {
XNextEvent(view->impl->display, &event);
@@ -464,16 +469,15 @@ puglProcessEvents(PuglView* view)
case ConfigureNotify:
if ((event.xconfigure.width != view->width) ||
(event.xconfigure.height != view->height)) {
puglReshape(view,
event.xconfigure.width,
event.xconfigure.height);
conf_width = event.xconfigure.width;
conf_height = event.xconfigure.height;
}
break;
case Expose:
if (event.xexpose.count != 0) {
break;
}
puglDisplay(view);
view->redisplay = true;
break;
case MotionNotify:
setModifiers(view, event.xmotion.state, event.xmotion.time);
@@ -549,6 +553,10 @@ puglProcessEvents(PuglView* view)
}
}

if (conf_width != -1) {
puglReshape(view, conf_width, conf_height);
}

if (view->pending_resize) {
puglResize(view);
}


Loading…
Cancel
Save