/* * Copyright (C) 2002-@year@ by University of Maryland, College Park, MD 20742, USA * All rights reserved. * * Piccolo was written at the Human-Computer Interaction Laboratory * www.cs.umd.edu/hcil by Jesse Grosjean under the supervision of Ben Bederson. * The Piccolo website is www.cs.umd.edu/hcil/piccolo */ package edu.umd.cs.piccolox.swt; import java.awt.event.ActionListener; import javax.swing.Timer; import org.eclipse.swt.widgets.Composite; import edu.umd.cs.piccolo.PRoot; /** * <b>PSWTRoot</b> is a subclass of PRoot that is designed to work in the SWT * environment. In particular it uses SWTTimers and the SWT event dispatch * thread. With the current setup only a single PSWTCanvas is expected to be * connected to a root. * <P> * @version 1.1 * @author Jesse Grosjean */ public class PSWTRoot extends PRoot { private Composite composite; public PSWTRoot(Composite composite) { this.composite = composite; } public Timer createTimer(int delay, ActionListener listener) { return new SWTTimer(composite.getDisplay(),delay,listener); } public void scheduleProcessInputsIfNeeded() { if (!Thread.currentThread().equals(composite.getDisplay().getThread())) { return; } if (!processInputsScheduled && !processingInputs && (getFullBoundsInvalid() || getChildBoundsInvalid() || getPaintInvalid() || getChildPaintInvalid())) { processInputsScheduled = true; composite.getDisplay().asyncExec(new Runnable() { public void run() { processInputs(); processInputsScheduled = false; } }); } } }