All pastes #880080 Raw Edit

Miscellany

public text v1 · immutable
#880080 ·published 2008-01-29 19:07 UTC
rendered paste body
package void SingleEvent(){ //TODO only redraw on expose?
	version(xlib){
		XEvent event;
		XNextEvent(conn, &event);
		switch(event.type){
			case MotionNotify:
				//todo limit
				windows[event.xany.window].motion(event.xmotion.x, event.xmotion.y, event.xbutton.state, event.xbutton.button);
				break;
			case Expose: //TODO
				static bool collapse = false;
				if(!collapse){
					collapse = true;
					checkEvents();
					
					if(nested == 0)
						foreach(w; windows)
							w.display();
					collapse = false;
				}
				break;
			case KeyPress:
				windows[event.xany.window].keyPress(event.xkey.x, event.xkey.y, event.xkey.state, event.xkey.keycode);
				break;
			case KeyRelease:
				windows[event.xany.window].keyRelease(event.xkey.x, event.xkey.y, event.xkey.state, event.xkey.keycode);
				break;
			case ButtonPress:
				windows[event.xany.window].buttonPress(event.
			case ButtonRelease:
				windows[event.xany.window].buttonRelease(event.xbutton.x, event.xbutton.y, event.xbutton.state, event.xbutton.button);
				break;
			case EnterNotify:
				windows[event.xany.window].enter();
				break;
			case LeaveNotify:
				windows[event.xany.window].leave();
				break;
			case ClientMessage:
				if(event.xclient.data.l[0] == deleteWindow)
					windows[event.xany.window].close();
				break;
			//resize
			case ConfigureNotify: //TODO
				windows[event.xany.window].internalResize(event.xconfigure.x, event.xconfigure.y, event.xconfigure.width, event.xconfigure.height);
				break;
			default:
				break;
		}
	}
}




void checkEvents(){
	version(xlib) while(XPending(conn)) SingleEvent();
}
void constantLoop(){
	while(1){
		checkEvents();
		foreach(w; windows)
			w.display();
	}
}
void sleepyLoop(){
	while(1)
		SingleEvent();
}