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 vh...@apache.org on 2002/06/21 16:20:40 UTC

cvs commit: xml-batik/samples/tests/spec/scripting use.svg

vhardy      2002/06/21 07:20:40

  Modified:    test-resources/org/apache/batik/test samplesRendering.xml
               sources/org/apache/batik/bridge SVGUseElementBridge.java
  Added:       samples/tests/spec/scripting use.svg
  Log:
  Fixed bug #10066, transform issue. Implemented x/y update on <use>. Added <use> test: samples/tests/spec/scripting/use.svg
  
  Revision  Changes    Path
  1.78      +2 -1      xml-batik/test-resources/org/apache/batik/test/samplesRendering.xml
  
  Index: samplesRendering.xml
  ===================================================================
  RCS file: /home/cvs/xml-batik/test-resources/org/apache/batik/test/samplesRendering.xml,v
  retrieving revision 1.77
  retrieving revision 1.78
  diff -u -r1.77 -r1.78
  --- samplesRendering.xml	20 Jun 2002 21:35:09 -0000	1.77
  +++ samplesRendering.xml	21 Jun 2002 14:20:40 -0000	1.78
  @@ -321,6 +321,7 @@
           <test id="samples/tests/spec/scripting/maskClipUpdate.svg" />
           <test id="samples/tests/spec/scripting/markerUpdate.svg" />
           <test id="samples/tests/spec/scripting/filterPatternUpdate.svg" />
  +        <test id="samples/tests/spec/scripting/use.svg" />
       </testGroup>
   
   </testSuite>
  
  
  
  1.25      +32 -18    xml-batik/sources/org/apache/batik/bridge/SVGUseElementBridge.java
  
  Index: SVGUseElementBridge.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGUseElementBridge.java,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- SVGUseElementBridge.java	20 Mar 2002 16:34:43 -0000	1.24
  +++ SVGUseElementBridge.java	21 Jun 2002 14:20:40 -0000	1.25
  @@ -149,12 +149,31 @@
           CompositeGraphicsNode gn = new CompositeGraphicsNode();
           gn.getChildren().add(refNode);
   
  +        gn.setTransform(computeTransform(e));
  +
  +        // set an affine transform to take into account the (x, y)
  +        // coordinates of the <use> element
  +
  +        // 'visibility'
  +        gn.setVisible(CSSUtilities.convertVisibility(e));
  +
  +        // 'enable-background'
  +        Rectangle2D r = CSSUtilities.convertEnableBackground(e);
  +        if (r != null) {
  +            gn.setBackgroundEnable(r);
  +        }
  +        return gn;
  +    }
  +
  +    /**
  +     * Computes the AffineTransform for the node
  +     */
  +    protected AffineTransform computeTransform(Element e) {
           UnitProcessor.Context uctx = UnitProcessor.createContext(ctx, e);
  -        String s;
   
           // 'x' attribute - default is 0
           float x = 0;
  -        s = e.getAttributeNS(null, SVG_X_ATTRIBUTE);
  +        String s = e.getAttributeNS(null, SVG_X_ATTRIBUTE);
           if (s.length() != 0) {
               x = UnitProcessor.svgHorizontalCoordinateToUserSpace
                   (s, SVG_X_ATTRIBUTE, uctx);
  @@ -178,21 +197,9 @@
               at.preConcatenate
                   (SVGUtilities.convertTransform(e, SVG_TRANSFORM_ATTRIBUTE, s));
           }
  -        gn.setTransform(at);
  -
  -        // set an affine transform to take into account the (x, y)
  -        // coordinates of the <use> element
   
  -        // 'visibility'
  -        gn.setVisible(CSSUtilities.convertVisibility(e));
  -
  -        // 'enable-background'
  -        Rectangle2D r = CSSUtilities.convertEnableBackground(e);
  -        if (r != null) {
  -            gn.setBackgroundEnable(r);
  -        }
  -        return gn;
  -    }
  +        return at;
  +     }
   
       /**
        * Creates the GraphicsNode depending on the GraphicsNodeBridge
  @@ -215,6 +222,13 @@
        * Invoked when an MutationEvent of type 'DOMAttrModified' is fired.
        */
       public void handleDOMAttrModifiedEvent(MutationEvent evt) {
  -        super.handleDOMAttrModifiedEvent(evt);
  +        String attrName = evt.getAttrName();
  +        if (attrName.equals(SVG_X_ATTRIBUTE) ||
  +            attrName.equals(SVG_Y_ATTRIBUTE) ||
  +            attrName.equals(SVG_TRANSFORM_ATTRIBUTE)) {
  +            String s = evt.getNewValue();
  +            node.setTransform(computeTransform(e));
  +            handleGeometryChanged();
  +        }
       }
   }
  
  
  
  1.1                  xml-batik/samples/tests/spec/scripting/use.svg
  
  Index: use.svg
  ===================================================================
  <?xml version="1.0" standalone="no"?>
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
  "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
  
  <!-- ========================================================================= -->
  <!-- Copyright (C) The Apache Software Foundation. All rights reserved.        -->
  <!--                                                                           -->
  <!-- This software is published under the terms of the Apache Software License -->
  <!-- version 1.1, a copy of which has been included with this distribution in  -->
  <!-- the LICENSE file.                                                         -->
  <!-- ========================================================================= -->
  
  <!-- ========================================================================= -->
  <!-- Dynamic update for use                                                    -->
  <!--                                                                           -->
  <!-- @author vincent.hardy@sun.com                                             -->
  <!-- @version $Id: use.svg,v 1.1 2002/06/21 14:20:40 vhardy Exp $     -->
  <!-- ========================================================================= -->
  <?xml-stylesheet type="text/css" href="../../resources/style/test.css" ?>  
  
  <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body" width="450" height="500" viewBox="0 0 450 500">
  <title>Update on &lt;use&gt;</title>
  
      <text x="50%" y="45" class="title">x/y/transform update on &lt;use&gt;</text>
  
      <script type="text/ecmascript"> <![CDATA[
  
      function runTest(){
          document.getElementById('x').setAttributeNS(null, 'x', '20');
          document.getElementById('y').setAttributeNS(null, 'y', '15');
          document.getElementById('transform').setAttributeNS(null, 'transform', 'rotate(20)');
      }
  
      ]]> </script>
  
  
      <defs>    
          <rect id="symbol" x="-10" y="-10" width="20" height="20" />
  
          <rect id="titleCell" x="-60" y="-15" width="120" height="20" />
          <rect id="tableCell" x="-60" y="-20" width="120" height="40" />
          <rect id="button" x="-30" y="-15" width="60" height="20" />
  
      </defs>
  
      <style type="text/css"><![CDATA[
          use.tableHeader  {
              fill: #eeeeee;
              stroke: black;
          }
  
          text.tableHeader {
              text-anchor: middle;
              stroke: none;
              fill: black;
          }
  
          use.tableCell {
              fill: white;
              stroke: black;
          }
  
          text.tableCell {
              text-anchor: middle;
              stroke: none;
              fill: black;
          }
  
          use.button {
              fill: #eeeeee;
              stroke: black;
          }
  
          text.button {
              fill: black;
              stroke: none;
              text-anchor: middle;
          }
  
          .reference {
              fill: none;
              stroke: black;
          }
  
          .symbol {
              fill: gold;
              stroke: crimson;
              stroke-width: 4;
          }
          
      ]]></style>
  
      <g transform="translate(165, 160)">
          <g id="tableHeader" class="tableHeader">
              <g>
                  <use class="tableHeader" xlink:href="#titleCell" />
                  <text class="tableHeader">Attribute</text>
              </g>
  
              <g transform="translate(120,0)">
                  <use class="tableHeader" xlink:href="#titleCell" />
                  <text class="tableHeader">&lt;use&gt; and ref</text>
              </g>
  
          </g>
  
          <g id="xRow" transform="translate(0,25)">
              <g>
                  <use class="tableCell" xlink:href="#tableCell" />
                  <text class="tableCell">x</text>
              </g>
  
              <g transform="translate(120,0)" >
                  <use class="tableCell" xlink:href="#tableCell" />
                  <use id="x" x="10" y="5" class="symbol" xlink:href="#symbol"/>
                  <use        x="20" y="5"  class="reference" xlink:href="#symbol"/>
              </g>
  
          </g>
  
          <g id="yRow" transform="translate(0,65)">
              <g>
                  <use class="tableCell" xlink:href="#tableCell" />
                  <text class="tableCell">y</text>
              </g>
  
              <g transform="translate(120,0)" >
                  <use class="tableCell" xlink:href="#tableCell" />
                  <use id="y" x="10" y="0" class="symbol" xlink:href="#symbol"/>
                  <use        x="10" y="15" class="reference" xlink:href="#symbol"/>
              </g>
  
          </g>
  
          <g id="transformRow" transform="translate(0,105)">
              <g>
                  <use class="tableCell" xlink:href="#tableCell" />
                  <text class="tableCell">transform</text>
              </g>
  
              <g transform="translate(120,0)" >
                  <use class="tableCell" xlink:href="#tableCell" />
                  <use id="transform" 
                       x="10" y="5"  class="symbol" xlink:href="#symbol"/>
                  <use x="10" y="5"  transform="rotate(20)" class="reference" xlink:href="#symbol"/>
              </g>
  
          </g>
  
          <a onclick="runTest()">
              <use class="button" xlink:href="#button" x="60" y="200" />
              <text class="button" x="60" y="200">Run Test</text>
          </a>
      </g>
   
  <!--
    <use id="use" xlink:href="#Rect" x="20" y="40" width="100" height="80"
         transform="scale(1.2)" onclick="scale('use')" />
  
    <a onclick="removeChangeAdd('use')">
          <text x="80" y="35" text-anchor="middle">Remove, modify, add</text>
    </a>
  
    <a onclick="removeChangeAdd('rect')" transform="translate(160,0)">
          <text x="80" y="35" text-anchor="middle">Remove, modify, add</text>
    </a>
  
    <rect id="rect" x="150" y="40" width="100" height="80" transform="scale(1.2)"
          style="fill:green; stroke:yellow" onclick="scale('rect')" />
  
  
    <text x="175" y="190" style="font-size:20pt; text-anchor:middle">
      Transform problem.
    </text>
  -->
  </svg>
  
  
  
  

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