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]