hi, michael --

i'm not sure about the exception you are getting, but it may have to do with the multithreaded machinery of Batik. do you call setRenderingTransform() in your GVTTreeRendererAdapter.gvtRenderingCompleted() method? JSVGComponent (superclass of JSVGCanvas) also has a GVTTreeRendererListener, and its gvtRenderingCompleted() method does some important cleanup stuff. If your listener gets called first, maybe that's the problem....

underneath the hood of JSVGCanvas, the rendering transform ultimately gets reset by a call to JSVGComponent.setGraphicsNode(), which is invoked after the GVT tree build phase is done, and immediately before scheduling the render phase. This happens in JSVGComponent.SVGListener.gvtBuildCompleted():
  JSVGComponent.this.setGraphicsNode(...)
  scheduleGVTRendering() ==> calls renderGVTTree().

if it is not too difficult, and if the batik experts out there think it is a reasonable solution, you might try subclassing JSVGCanvas like so:

class MyCanvas extends JSVGCanvas {
  AffineTransform preservedRenderXfm = null;
  boolean usePreservedRenderXfm = false;
  ....
  public void refreshCanvas( SVGDocument theCurrentSVGDoc )
  {
      preservedRenderXfm = new AffineTransform( getRenderingTransform() );
      usePreservedRenderXfm = true;
      setSVGDocument( theCurrentSVGDoc );
  }
  ....
  protected void renderGVTTree()
  {
      if( usePreservedRenderXfm )
     {
         usePreservedRenderXfm = false;
         setRenderingTransform( preservedRenderXfm, false );
      }
      super.renderGVTTree();
  }
}

This is simplified because there are multithreading issues to worry about (what if the user clicks "Refresh" button in rapid succession?). I do something like this in my Batik-based app, and it works for me. Doing it this way avoids having to go through two render phases, by the way.

good luck!

scott
--
Scott A. Ruffner, Scientific Programmer/Analyst
Lisberger Lab
W.M. Keck Foundation Center for Integrative Neuroscience
University of California -- San Francisco
513 Parnassus Avenue, Box 0444, S871
San Francisco, CA  94143-0444
415-502-7897

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to