protected void processFrame() {
		if (delegator == null) return;
		if (curr == null)	{
         delegator.startTouchFrame(0);
         delegator.endTouchFrame();
         return;
      }

		delegator.startTouchFrame(curr.size());

		for (TouchEvent te : curr) {
			TouchEvent pe = getPreviousTouch(te);
			te.setPrevious(pe);

         if (pe != null && pe.hasTarget()) {
            if (pe.getTarget().isClosed()) {
               pe = null;
            }
         }

			if (pe != null) {
				te.setTarget(pe.getTarget());
				te.setTouchTime(pe.getTouchTime());
				if (te.hasTarget()) {
					te.getTarget().addTouchEvent(te);
				}
			} else {
				Touchable target = delegator.findTouchTarget(te);
				if (target != null) {
					te.setTarget(target);
					target.addTouchEvent(te);
				}
			}
		}

		delegator.endTouchFrame();
		prev = curr;

		// setting curr to null signals event thread that we can
		// accept a new frame
		this.curr = null;
	}