>   In the AbstractJSVGComponent it overrides updateRenderingTransform
to
> implement what you are talking about.

Yes, this is what happens.  In order to "see" the changes, I have to
call setDocument on the JSVGCanvas class though.  Is this correct?
Otherwise the parent frame/window just resizes without any changes to
the JSVGCanvas.  I attached a ComponentListener to my JSVGCanvas:

public void componentResized(ComponentEvent componentEvent) {
   jsvgCanvas.setDocument(currentDocument);
}

> I suspect that you probably want the default behavior of the
> canvas when recenterOnResize is set to true (it's just that
> the scrollPane turns this off).

Yes.  If the scrollbars are NOT visible, I want the default behavior of
the canvas.  If the scrollbars ARE visible, I want the default behavior
of the JSVGScrollPane.  I think I need extend the JSVGScrollPane class
to accommodate this as you said.  I only want the scrollbars to appear
when I apply a zoom to the canvas.

Michael Bishop

-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] 
Sent: Sunday, December 31, 2006 8:15 PM
To: batik-users@xmlgraphics.apache.org
Cc: batik-users@xmlgraphics.apache.org
Subject: RE: Resizing a JSVGCanvas...


Hi Michael, 

"Bishop, Michael W. CONTR J9C880" <[EMAIL PROTECTED]> wrote on
12/22/2006 11:10:43 AM:

> > If you want the canvas to change scale or pan position then
> > the rendering transform needs to change.  The built in 
> > updateRenderingTransform function does this in some cases but I 
> > don't think you can all of what you want by adjusting component
sizes.
> 
> OK, can we talk through the simplest case?  Assume I have a JSVGCanvas
> WITHOUT a JSVGScrollPane.  I'm going to eliminate the scroll bars so I
> can tackle one problem at a time.
> 
> My JSVGCanvas is viewing an entire document and is sized at 400x400.
> 
> I reduce the size of my window so it's now 75% of its original size.
> 
> At this point, the JSVGCanvas should be 300x300, but should also be
> displaying the entire document.
> 
> To me, that sounds like I need to:
> 
> - Change the size of the component to 300x300.
> - Apply something like a JSVGCanvas.ZoomAction to make the document
fit
> inside the JSVGCanvas.

   What happens in this case is that when the window is resized 
a Swing 'componentResized' event is generated which is trapped 
by the AbstractJGVTComponent.  This looks like: 

                public void componentResized(ComponentEvent e) { 
                    if (updateRenderingTransform()) 
                        scheduleGVTRendering(); 
                } 

   In the AbstractJSVGComponent it overrides updateRenderingTransform 
to implement what you are talking about.  The first thing it does 
is recalculate the viewing transform (which is what fits the SVG 
viewBox to the components width/height). This takes care of fitting 
the image to the new component size.  The second part of the 
function (after 'if (!recenterOnResize)') is trying to keep 
what was the center of the view as the center of the view (this 
is tricky in the presence of rotation etc...). 

> (This is how I would want it to work with a JSVGScrollPane if the
> scrollbars are NOT visible. 

   I suspect that you probably want the default behavior of the 
canvas when recenterOnResize is set to true (it's just that 
the scrollPane turns this off). 

> I think when I reintroduce the JSVGScrollPane, I have to 
> extend the class as you've said.)

> I'm going to do some experimenting, but I wanted to share my thoughts
> and get feedback from the list in case I get stuck.
> 
> Michael Bishop
> 
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] 
> Sent: Thursday, December 21, 2006 7:48 PM
> To: batik-users@xmlgraphics.apache.org
> Cc: batik-users@xmlgraphics.apache.org
> Subject: RE: Resizing a JSVGCanvas...
> 
> 
> Hi Michael, 
> 
> "Bishop, Michael W. CONTR J9C880" <[EMAIL PROTECTED]> wrote
on
> 12/19/2006 10:24:32 AM:
> 
> >      Yeah, that's what I was afraid of.  I was hoping for some
> guidance
> > on doing it fairly simply, if there is such a way:
> > 
> > - If the scroll bars of the JSVGScrollPane aren't visible, then just
> > size the JSVGCanvas according to the resize.  Is this the default
> > behavior of the JSVGCanvas?  Even inside a JSVGScrollPane?
> 
>    Hmm, actually when it's inside a scrollPane the scroll pane 
> sets 'recenterOnResize' to false.  Which means that the canvas 
> keeps the upper left the upper left and just changes size ( 
> showing more content on the right/bottom for example). 
> 
> > - If the scroll bars of the JSVGScrollPane are visible, then just
size
> > the JSVGScrollPane's viewable area.
> > 
> > Any hints on where to start? 
> 
>    You might consider subclassing/replacing/modifying the
JSVGScrollPane
> 
> so it only sets recenterOnResize to false when the scrollbars are
> showing... 
> 
> > Would I even need to touch rendering transforms or would setting 
> > the size on these components be sufficient? 
> 
>    If you want the canvas to change scale or pan position then 
> the rendering transform needs to change.  The built in 
> updateRenderingTransform function does this in some cases but I 
> don't think you can all of what you want by adjusting component sizes.

> 
> > I know it needs experimentation; I'm just trying to narrow down the
> > variables I need to play with.
> > 
> > Michael Bishop
> > 
> > -----Original Message-----
> > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] 
> > Sent: Friday, December 15, 2006 6:53 AM
> > To: batik-users@xmlgraphics.apache.org
> > Cc: batik-users@xmlgraphics.apache.org
> > Subject: Re: Resizing a JSVGCanvas...
> > 
> > 
> > Hi Michael, 
> > 
> > "Bishop, Michael W. CONTR J9C880" <[EMAIL PROTECTED]>
wrote
> on
> > 12/14/2006 09:12:44 AM:
> > 
> > > so there are a bunch of transforms associated with the 
> > > JSVGCanvas.  Plus you define a viewBox attribute in your SVG 
> > > document.  What I'd like to do is have the JSVGCanvas resize when
I 
> > > resize my main Window/Frame.  If the user has zoomed in or out, I 
> > > want to preserve that.  Basically I want to take what the user 
> > > currently sees and resize it accordingly. 
> > 
> >    I was under the impression that this was more or less the 
> > default behavior of the Canvas.  Anyway the code that handles 
> > this is the 'updateRenderingTransform' method on the JSVGCanvas 
> > (the default implementation is in AbstractJSVGComponent). 
> > 
> > > If the user's looking at an entire document and they resize the
> window
> > 
> > > smaller, I want the entire document shown (smaller) in the smaller

> > > JSVGCanvas.  If the user is zoomed in and has scrolled to an area
of
> 
> > > the document (I have a JSVGScrollPane), I want that viewing area
to 
> > > be the same when they resize.  In short, I want to preserve what
the
> 
> > > user sees, just size it according to the window size.  Can I get
> some 
> > > pointers on how to achieve this? 
> > 
> >    You can override the default implementation and do what ever you 
> > want, however I warn you it's tricker than it seems... ;) 
> > 
> >
---------------------------------------------------------------------
> > 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