You are viewing a plain text version of this content. The canonical link for it is here.
Posted to batik-dev@xmlgraphics.apache.org by Cameron McCormack <ca...@aka.mcc.id.au> on 2005/03/19 08:53:29 UTC

Resizing a JSVGComponent

Say I have a simple program that puts a JSVGComponent in a frame and
loads up the following document:

  <svg xmlns="http://www.w3.org/2000/svg">
    <script>
      function f() {
        var svg = document.documentElement;
        System.out.println('' + svg.width.baseVal.value 
                           ',' + svg.height.baseVal.value);
      }
    </script>
    <rect width="100%" height="100%"
          fill="yellow" stroke="black" stroke-width="10" onclick="f()"/>
  </svg>

Since there is no viewBox, the dimensions of the viewport will be used
as the area of interest for display in the component.  When the frame is
resized, and the mouse is clicked on the rect, the correct (updated)
dimensions are printed, but the displayed image does not change.

Should the rect (whose width and height are 100%) be repainted to fit
the new size of the component?  If so, I'm not sure exactly where I
would need to make a change to effect this.

Cameron

-- 
  e-mail : cam (at) mcc.id.au    	icq : 26955922
     web : http://mcc.id.au/	        msn : cam-msn (at) aka.mcc.id.au
  office : +61399055779		     jabber : heycam (at) jabber.org

---------------------------------------------------------------------
To unsubscribe, e-mail: batik-dev-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: batik-dev-help@xmlgraphics.apache.org


Re: Resizing a JSVGComponent

Posted by Thomas DeWeese <Th...@Kodak.com>.
Hi Cameron,

Cameron McCormack wrote:
> Say I have a simple program that puts a JSVGComponent in a frame and
> loads up the following document:
> 
>   <svg xmlns="http://www.w3.org/2000/svg">
>     <script>
>       function f() {
>         var svg = document.documentElement;
>         System.out.println('' + svg.width.baseVal.value 
>                            ',' + svg.height.baseVal.value);
>       }
>     </script>
>     <rect width="100%" height="100%"
>           fill="yellow" stroke="black" stroke-width="10" onclick="f()"/>
>   </svg>
> 
> Since there is no viewBox, the dimensions of the viewport will be used
> as the area of interest for display in the component.  When the frame is
> resized, and the mouse is clicked on the rect, the correct (updated)
> dimensions are printed, but the displayed image does not change.

    Uhh, yah.  So you can know about the resize with a componentResized
listener (there is already one in the JGVTComponent).  The problem
is that the way we handle changes in SVG element's size is extremely
expensive.  The whole tree under the SVG element is rebuilt so that
percentage units are recalculated. This is just one place where we
could really use a good dependency tracking system, so we would
only rebuild the elements that really needed rebuilding...

> Should the rect (whose width and height are 100%) be repainted to fit
> the new size of the component?  If so, I'm not sure exactly where I
> would need to make a change to effect this.

    The answer is probably, I don't think the spec really talks about
this.  However my concern is that every time the window is resized
the entire document's GVT tree will be rebuilt even though I think
a small number of documents actually have percentage units.

    At the very least it might be nice to have a boolean that is
set by the unitParser so you at least know that someone used
percentage units before you rebuild the entire document.

    Anyway the place to make the change would be in the ComponentListener
in JGVTComponent (I would add a new method that is called in response
to resize events that the JSVGCanvas can override to do it's extra
stuff).  If you look at the SVGSVGElementBridge class you can
see where the code that handles changes in Width/Height are.


---------------------------------------------------------------------
To unsubscribe, e-mail: batik-dev-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: batik-dev-help@xmlgraphics.apache.org