diff options
author | Christoph Lohmann <20h@r-36.net> | 2013-02-15 19:30:43 +0100 |
---|---|---|
committer | Christoph Lohmann <20h@r-36.net> | 2013-02-15 19:30:43 +0100 |
commit | 086cd61511aa5ca4cbef0048137bb9ae0467d283 (patch) | |
tree | 04e17ce948bac9cb69ea51356446cf710b09ed94 /st.c | |
parent | 95033753be32e93915ddce14ea41b8765b665771 (diff) | |
download | st-086cd61511aa5ca4cbef0048137bb9ae0467d283.tar.gz st-086cd61511aa5ca4cbef0048137bb9ae0467d283.zip |
Doing it like the new run() was proposed.
Diffstat (limited to 'st.c')
-rw-r--r-- | st.c | 38 |
1 files changed, 15 insertions, 23 deletions
@@ -3166,12 +3166,12 @@ void | |||
3166 | run(void) { | 3166 | run(void) { |
3167 | XEvent ev; | 3167 | XEvent ev; |
3168 | fd_set rfd; | 3168 | fd_set rfd; |
3169 | int xfd = XConnectionNumber(xw.dpy); | 3169 | int xfd = XConnectionNumber(xw.dpy), xev; |
3170 | struct timeval drawtimeout, *tv = NULL, now, last; | 3170 | struct timeval drawtimeout, *tv = NULL, now, last; |
3171 | 3171 | ||
3172 | gettimeofday(&last, NULL); | 3172 | gettimeofday(&last, NULL); |
3173 | 3173 | ||
3174 | for(;;) { | 3174 | for(xev = actionfps;;) { |
3175 | FD_ZERO(&rfd); | 3175 | FD_ZERO(&rfd); |
3176 | FD_SET(cmdfd, &rfd); | 3176 | FD_SET(cmdfd, &rfd); |
3177 | FD_SET(xfd, &rfd); | 3177 | FD_SET(xfd, &rfd); |
@@ -3184,22 +3184,16 @@ run(void) { | |||
3184 | gettimeofday(&now, NULL); | 3184 | gettimeofday(&now, NULL); |
3185 | /* usecs until (next) frame */ | 3185 | /* usecs until (next) frame */ |
3186 | drawtimeout.tv_sec = 0; | 3186 | drawtimeout.tv_sec = 0; |
3187 | drawtimeout.tv_usec = \ | 3187 | drawtimeout.tv_usec = (1000/xfps) * 1000; |
3188 | ((1000/framespersecond) - TIMEDIFF(now, last)) * 1000; | 3188 | tv = &drawtimeout; |
3189 | |||
3190 | /* Let us draw a frame. */ | ||
3191 | if(drawtimeout.tv_usec <= 0) { | ||
3192 | draw(); | ||
3193 | XFlush(xw.dpy); | ||
3194 | |||
3195 | last = now; | ||
3196 | tv = NULL; | ||
3197 | } | ||
3198 | 3189 | ||
3199 | if(FD_ISSET(cmdfd, &rfd)) | 3190 | if(FD_ISSET(cmdfd, &rfd)) |
3200 | ttyread(); | 3191 | ttyread(); |
3201 | 3192 | ||
3202 | if(FD_ISSET(xfd, &rfd)) { | 3193 | if(FD_ISSET(xfd, &rfd)) |
3194 | xev = actionfps; | ||
3195 | |||
3196 | if(TIMEDIFF(now, last) > (xev ? (1000/xfps) : (1000/actionfps))) { | ||
3203 | while(XPending(xw.dpy)) { | 3197 | while(XPending(xw.dpy)) { |
3204 | XNextEvent(xw.dpy, &ev); | 3198 | XNextEvent(xw.dpy, &ev); |
3205 | if(XFilterEvent(&ev, None)) | 3199 | if(XFilterEvent(&ev, None)) |
@@ -3208,16 +3202,14 @@ run(void) { | |||
3208 | (handler[ev.type])(&ev); | 3202 | (handler[ev.type])(&ev); |
3209 | } | 3203 | } |
3210 | 3204 | ||
3211 | if(drawtimeout.tv_usec <= 0) { | 3205 | draw(); |
3212 | draw(); | 3206 | XFlush(xw.dpy); |
3213 | XFlush(xw.dpy); | 3207 | last = now; |
3214 | } | ||
3215 | } | ||
3216 | 3208 | ||
3217 | /* There is still some time to wait until next frame. */ | 3209 | if(xev && !FD_ISSET(xfd, &rfd)) |
3218 | if(drawtimeout.tv_usec > 0) { | 3210 | xev--; |
3219 | tv = &drawtimeout; | 3211 | if(!FD_ISSET(cmdfd, &rfd) && !FD_ISSET(xfd, &rfd)) |
3220 | continue; | 3212 | tv = NULL; |
3221 | } | 3213 | } |
3222 | } | 3214 | } |
3223 | } | 3215 | } |