Thomas, Thanks again - I feel we're nearly there now...
I added the following code to our JSVGCanvas derived object: public void setMySize(Dimension sz) { setSize(sz); setPreferredSize(sz); } I now get the SVG drawn at (I guess) its natural size in a window that is bigger than the physical window within the JSVGScrollPane. However I get no scroll bars until I do something to pan the SVG or resize the window. Is there a nice method I can call that will refresh the JSVGScrollPane given the JSVGCanvas is now bigger than the 'viewport' on the JSVGScrollPane such that the scroll bars will be displayed? Thanks again, Rob -----Original Message----- From: Thomas DeWeese [mailto:[EMAIL PROTECTED] Sent: 22 January 2004 13:16 To: [EMAIL PROTECTED] Subject: Re: Displaying Java objects on top of JSVGCanvas objects Wilkins, Rob wrote: > Thomas, > > I'm now using Batik 1.5.1rc2. I've placed out JSVGCanvas derived object into > a JSVGScrollPane object. This appears to all work and provides a much nicer > interface for the user to the panning etc. (as you suggested). > > I have one minor problem in that I need really need to control the initial > resolution that the SVG is displayed at (so that I can ensure that the > overlaid objects always load from the backend server and get displayed in > the correct place relative to the SVG). > When I was placing the JSVGCanvas object in a JScrollPane I could do this > through an implementation of the Scrollable interface. When I move to > JSVGScrollPane the methods of this interface in my object are no longer > called. As a result the SVG just gets rendered to fill the opening size of > the JSVGCanvas window. The JSVGCanvas calls a method 'setMySize(Dimension sz)' when a document is loaded to request the desired size. You should be able to override this method to do what ever you want to setup the document. > Is there away that I can enforce the size of the JSVGCanvas window before > the SVG is loaded (so that it is rendered to a size I control)? If I could > do this then I think all my current problems will be resolved. I think the above does this. > > Thanks, > > Rob > > -----Original Message----- > From: Thomas DeWeese [mailto:[EMAIL PROTECTED] > Sent: 20 January 2004 14:19 > To: [EMAIL PROTECTED] > Subject: Re: Displaying Java objects on top of JSVGCanvas objects > > Hi Rob, > > Wilkins, Rob wrote: > > >>I spent the last two days re-working our code that overlays objects on the >>SVG. Using your suggestion of overriding setRenderingTransform() method. >> >>The good news is I have got almost all of the shape updates (in response > > to > >>changes in the SVG rendering transform) working. It also allowed me to >>remove many lines of the existing code and utilise the features of the >>JSVGCanvas component in the correct manner. > > > Great! > > >> I should point out that I have also dispensed with the scrolled panel >>that I was using in favour of the panning support built in to the >>JSVGCanvas component. > > > This is fine if you like the 'built in' panning. However I > strong suspect that the way you are doing things the JSVGScrollPane > from the 1.5.1rc2 release will just work (all it does it set and > listen to the rendering transform). > > >>However I have hit the following problem. If I resize the window that > > holds > >>the JSVGCanvas component I do not get a call to setRenderingTransform(). > > So > >>I get no chance to scale the overlaid components. > > > This is handled in updateRenderingTransform, this is called when > the canvas changes size. The reason this is 'different' is that when > the canvas changes size the normal behavior is to 'refit' the > SVG document's viewBox to the Canvas - thus it is not the Canvas's > transform that changes but the SVG's 'viewing' transform that > changes (this distinction is important to implement the SVG 'getCTM' > method correctly). > > If you are working with the 1.5.1rc2 release you > can avoid this behavior by calling 'setRecenterOnResize(false)'. > In this case the viewing transform will never change once the > document is loaded. > > >>The strange thing is that the SVG is clearly re-rendered as the >>GVTTreeRendererAdapter::gvtRenderingStarted()/gvtRenderingCompleted() are >>called. Calls to getRenderingTransform() in these methods return the >>identity transform. >> >>What method should I override in order to get hold of the transform that > > is > >>applied once the window has been resized thus allowing me to scale my >>overlaid components and align them with the scaled SVG in the resized >>window? > > > The combined rendering and viewbox transform is available from > the JSVGCanvas.getViewBoxTransform(). It is my belief that this can > only change in the updateRenderingTransform call so overriding that > and using the getViewBoxTransform method should let you deal with > this issue. > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > **************************************************************************** ******* > This email, its content and any attachments is PRIVATE AND > CONFIDENTIAL to TANDBERG Television. If received in error please > notify the sender and destroy the original message and attachments. > > www.tandbergtv.com > **************************************************************************** ******* > > > --------------------------------------------------------------------- > 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]