Hello,

Has anyone tackled the situation where layout of child nodes takes too
long to do on the event thread in layoutChildren()?

I tried using a javax.swing.SwingWorker as follows

protected void layoutChildren()
{
  // layout quickly now
  layoutQuickly(childNode);

  // delay long-running layout
  new LayoutCorrectly(childNode).execute();
}

private static class LayoutCorrectly extends SwingWorker<Point2D, Object>
{
  private PNode childNode;

  private LayoutCorrectly(final PNode childNode)
  {
    this.childNode = childNode;
  }

  public Point2D doInBackground()
  {
     // calculate offset in background thread
     // ...
     return offset;
  }

  protected void done()
  {
    // set offset back in event thread
    Point2D offset = get();
    childNode.setOffset(offset.getX(), offset.getY());
}


When setOffset is called on the child node on the event thread in
SwingWorker.done(), it re-calls layoutChildren() on the parent,
leading to that soft infinite loop described in comments for
validateFullBounds() in PNode.java source.

I tried making childNode's bounds volatile without fully understanding
what that means to no effect.

   michael

-- 
Piccolo2D Developers Group: http://groups.google.com/group/piccolo2d-dev?hl=en

To unsubscribe, reply using "remove me" as the subject.

Reply via email to