Doing it like the new run() was proposed.
This commit is contained in:
		
							parent
							
								
									95033753be
								
							
						
					
					
						commit
						086cd61511
					
				
					 2 changed files with 17 additions and 24 deletions
				
			
		| 
						 | 
				
			
			@ -14,7 +14,8 @@ static unsigned int doubleclicktimeout = 300;
 | 
			
		|||
static unsigned int tripleclicktimeout = 600;
 | 
			
		||||
 | 
			
		||||
/* frames per second st should at maximum draw to the screen */
 | 
			
		||||
static unsigned int framespersecond = 60;
 | 
			
		||||
static unsigned int xfps = 30;
 | 
			
		||||
static unsigned int actionfps = 5;
 | 
			
		||||
 | 
			
		||||
/* TERM value */
 | 
			
		||||
static char termname[] = "st-256color";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										38
									
								
								st.c
									
										
									
									
									
								
							
							
						
						
									
										38
									
								
								st.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -3166,12 +3166,12 @@ void
 | 
			
		|||
run(void) {
 | 
			
		||||
	XEvent ev;
 | 
			
		||||
	fd_set rfd;
 | 
			
		||||
	int xfd = XConnectionNumber(xw.dpy);
 | 
			
		||||
	int xfd = XConnectionNumber(xw.dpy), xev;
 | 
			
		||||
	struct timeval drawtimeout, *tv = NULL, now, last;
 | 
			
		||||
 | 
			
		||||
	gettimeofday(&last, NULL);
 | 
			
		||||
 | 
			
		||||
	for(;;) {
 | 
			
		||||
	for(xev = actionfps;;) {
 | 
			
		||||
		FD_ZERO(&rfd);
 | 
			
		||||
		FD_SET(cmdfd, &rfd);
 | 
			
		||||
		FD_SET(xfd, &rfd);
 | 
			
		||||
| 
						 | 
				
			
			@ -3184,22 +3184,16 @@ run(void) {
 | 
			
		|||
		gettimeofday(&now, NULL);
 | 
			
		||||
		/* usecs until (next) frame */
 | 
			
		||||
		drawtimeout.tv_sec = 0;
 | 
			
		||||
		drawtimeout.tv_usec = \
 | 
			
		||||
			((1000/framespersecond) - TIMEDIFF(now, last)) * 1000;
 | 
			
		||||
 | 
			
		||||
		/* Let us draw a frame. */
 | 
			
		||||
		if(drawtimeout.tv_usec <= 0) {
 | 
			
		||||
			draw();
 | 
			
		||||
			XFlush(xw.dpy);
 | 
			
		||||
 | 
			
		||||
			last = now;
 | 
			
		||||
			tv = NULL;
 | 
			
		||||
		}
 | 
			
		||||
		drawtimeout.tv_usec = (1000/xfps) * 1000;
 | 
			
		||||
		tv = &drawtimeout;
 | 
			
		||||
 | 
			
		||||
		if(FD_ISSET(cmdfd, &rfd))
 | 
			
		||||
			ttyread();
 | 
			
		||||
 | 
			
		||||
		if(FD_ISSET(xfd, &rfd)) {
 | 
			
		||||
		if(FD_ISSET(xfd, &rfd))
 | 
			
		||||
			xev = actionfps;
 | 
			
		||||
 | 
			
		||||
		if(TIMEDIFF(now, last) > (xev ? (1000/xfps) : (1000/actionfps))) {
 | 
			
		||||
			while(XPending(xw.dpy)) {
 | 
			
		||||
				XNextEvent(xw.dpy, &ev);
 | 
			
		||||
				if(XFilterEvent(&ev, None))
 | 
			
		||||
| 
						 | 
				
			
			@ -3208,16 +3202,14 @@ run(void) {
 | 
			
		|||
					(handler[ev.type])(&ev);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if(drawtimeout.tv_usec <= 0) {
 | 
			
		||||
				draw();
 | 
			
		||||
				XFlush(xw.dpy);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
			draw();
 | 
			
		||||
			XFlush(xw.dpy);
 | 
			
		||||
			last = now;
 | 
			
		||||
 | 
			
		||||
		/* There is still some time to wait until next frame. */
 | 
			
		||||
		if(drawtimeout.tv_usec > 0) {
 | 
			
		||||
			tv = &drawtimeout;
 | 
			
		||||
			continue;
 | 
			
		||||
			if(xev && !FD_ISSET(xfd, &rfd))
 | 
			
		||||
				xev--;
 | 
			
		||||
			if(!FD_ISSET(cmdfd, &rfd) && !FD_ISSET(xfd, &rfd))
 | 
			
		||||
				tv = NULL;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue