tkormann    02/04/29 06:20:20

  Modified:    sources/org/apache/batik/bridge BridgeEventSupport.java
                        SVGTextElementBridge.java
               sources/org/apache/batik/gvt ShapeNode.java TextNode.java
               sources/org/apache/batik/gvt/renderer
                        StrokingTextPainter.java
               test-resources/org/apache/batik/test samplesRendering.xml
  Added:       samples/tests/spec/linking anchorInsideText.svg
  Log:
  - fix a bug in containment test of TextNode
  - fix a bug in event propagation on tspan
  - add a new test for linking with tpsan and textPath
  
  BTW:
  
  1. There is a bug in the SVG1.0 DTD, the test does not validate
  2. there is a bug in the TextElementBridge (there is a missing work in my
  example) - CDATA section following textPath element
  
  Revision  Changes    Path
  1.1                  xml-batik/samples/tests/spec/linking/anchorInsideText.svg
  
  Index: anchorInsideText.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.                                      -->
  <!-- ====================================================================== -->
  
  <!-- ====================================================================== -->
  <!-- test anchor inside text                                                -->
  <!--                                                                        -->
  <!-- @author [EMAIL PROTECTED]                                               -->
  <!-- @version $Id: anchorInsideText.svg,v 1.1 2002/04/29 13:20:18 tkormann 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">
  
          <text class="title" x="50%" y="40">test anchor inside text
          <desc>Click in any of the links in the table. You should see a 
smilley.</desc></text>
  
  <g>
  
          <defs>
              <g id="smilley">
                  <g  transform="scale(.8, .8) translate(-15,-15)">
                      <circle cx="15" cy="15" r="10"/>
                      <circle cx="12" cy="12" r="1.5" fill="black"/>
                      <circle cx="17" cy="12" r="1.5" fill="black"/>
                      <path d="M 10 19 A 8 8 0 0 0 20 19" stroke="black" 
stroke-width="1"/>
                  </g>
              </g>
              <g id="successBlack" fill="#aaa">
                  <use xlink:href="#smilley" />
              </g>
              <g id="successCrimson" fill="crimson">
                  <use xlink:href="#smilley" />
              </g>
              <g id="successOrange" fill="orange">
                  <use xlink:href="#smilley" />
              </g>
              <g id="successBlue" fill="blue">
                  <use xlink:href="#smilley" />
              </g>
  
              <path id="Path1" style="fill:none; stroke:blue;" 
                    d="M140 300 C140 150 280 150 280 300"/>
  
          </defs>
  
          <g transform="translate(5, 5) scale(.2)">
              <use xlink:href="#successBlack"/>
              <a xlink:href="#svgView(viewBox(0,0,450,500))">
                  <text y="-11" font-size="2" fill="blue" text-decoration="underline" 
text-anchor="middle">Return to test</text>
              </a>
          </g>
          <g transform="translate(15, 5) scale(.2)">
              <use xlink:href="#successCrimson"/>
              <a xlink:href="#svgView(viewBox(0,0,450,500))">
                  <text y="-11" font-size="2" fill="blue" text-decoration="underline" 
text-anchor="middle">Return to test</text>
              </a>
          </g>
          <g transform="translate(25, 5) scale(.2)">
              <use xlink:href="#successOrange"/>
              <a xlink:href="#svgView(viewBox(0,0,450,500))">
                  <text y="-11" font-size="2" fill="blue" text-decoration="underline" 
text-anchor="middle">Return to test</text>
              </a>
          </g>
          <g transform="translate(35, 5) scale(.2)">
              <use xlink:href="#successBlue"/>
              <a xlink:href="#svgView(viewBox(0,0,450,500))">
                  <text y="-11" font-size="2" fill="blue" text-decoration="underline" 
text-anchor="middle">Return to test</text>
              </a>
          </g>
  
          <view id="black" viewBox="3,2.5,4,4" />
          <view id="crimson" viewBox="13,2.5,4,4" />
          <view id="orange" viewBox="23,2.5,4,4" />
          <view id="blue" viewBox="33,2.5,4,4" />
  
  <!-- ################################################## -->
  
  <a xlink:href="#black">
  <text x="50" y="100">This is simple text under the text element 
  <a xlink:href="#crimson"><tspan fill="crimson">and here is a simple tspan 
</tspan></a>
  and
  <tspan x="50" dy="1.1em" fill="orange"><a xlink:href="#orange">some more with nested 
<a xlink:href="#blue"><tspan fill="blue"> tspan </tspan></a>and more...</a></tspan>
  </text>
  </a>
  
  
  <!-- ################################################## -->
  
  <g transform="translate(0 300)" >
  <a xlink:href="#black">
  <text x="50" y="100">This is text with transform 
  <a xlink:href="#crimson"><tspan fill="crimson">and here is a simple tspan 
</tspan></a>
  and
  <tspan x="50" dy="1.1em" fill="orange"><a xlink:href="#orange">some more with nested 
<a xlink:href="#blue"><tspan fill="blue"> tspan </tspan></a> and more...</a></tspan>
  </text>
  </a>
  </g>
  
  <!-- ################################################## -->
  
  <use xlink:href="#Path1" />
  <a xlink:href="#black">
  <text x="50" y="300" fill="black">This is simple
  <textPath fill="crimson" xlink:href="#Path1" startOffset="0%"><a 
xlink:href="#crimson">text on a path
  <a xlink:href="#orange"><tspan fill="orange" dy="-10">with nested tspan</tspan></a>
  <tspan dy="10"> and dy attributes </tspan></a></textPath>
  <tspan fill="blue" dx="10"><a xlink:href="#blue">all with</a></tspan> different 
links.
  </text>
  </a>
  
  
  </g>
  
  </svg>
  
  
  
  1.34      +9 -1      
xml-batik/sources/org/apache/batik/bridge/BridgeEventSupport.java
  
  Index: BridgeEventSupport.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/bridge/BridgeEventSupport.java,v
  retrieving revision 1.33
  retrieving revision 1.34
  diff -u -r1.33 -r1.34
  --- BridgeEventSupport.java   23 Apr 2002 07:18:31 -0000      1.33
  +++ BridgeEventSupport.java   29 Apr 2002 13:20:18 -0000      1.34
  @@ -11,7 +11,9 @@
   import java.awt.Point;
   
   import java.awt.geom.AffineTransform;
  +import java.awt.geom.NoninvertibleTransformException;
   import java.awt.geom.Point2D;
  +import java.awt.geom.Rectangle2D;
   
   import java.text.AttributedCharacterIterator;
   
  @@ -48,7 +50,7 @@
    * fowarding them to the DOM as regular DOM MouseEvent.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]>Thierry Kormann</a>
  - * @version $Id: BridgeEventSupport.java,v 1.33 2002/04/23 07:18:31 tkormann Exp $
  + * @version $Id: BridgeEventSupport.java,v 1.34 2002/04/29 13:20:18 tkormann Exp $
    */
   public class BridgeEventSupport implements SVGConstants {
   
  @@ -314,9 +316,15 @@
               Element target = context.getElement(node);
               // Lookup inside the text element children to see if the target
               // is a tspan or textPath
  +
               if (target != null && node instanceof TextNode) {
                TextNode textNode = (TextNode)node;
                List list = textNode.getTextRuns();
  +                // place coords in text node coordinate system
  +                try {
  +                    node.getGlobalTransform().createInverse().transform(coords, 
coords);
  +                } catch (NoninvertibleTransformException ex) {
  +                }
                for (int i = 0 ; i < list.size(); i++) {
                       StrokingTextPainter.TextRun run =
                           (StrokingTextPainter.TextRun)list.get(i);
  
  
  
  1.65      +4 -4      
xml-batik/sources/org/apache/batik/bridge/SVGTextElementBridge.java
  
  Index: SVGTextElementBridge.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGTextElementBridge.java,v
  retrieving revision 1.64
  retrieving revision 1.65
  diff -u -r1.64 -r1.65
  --- SVGTextElementBridge.java 27 Apr 2002 22:41:57 -0000      1.64
  +++ SVGTextElementBridge.java 29 Apr 2002 13:20:18 -0000      1.65
  @@ -68,7 +68,7 @@
    *
    * @author <a href="[EMAIL PROTECTED]">Stephane Hillion</a>
    * @author <a href="[EMAIL PROTECTED]">Bill Haneman</a>
  - * @version $Id: SVGTextElementBridge.java,v 1.64 2002/04/27 22:41:57 deweese Exp $
  + * @version $Id: SVGTextElementBridge.java,v 1.65 2002/04/29 13:20:18 tkormann Exp 
$
    */
   public class SVGTextElementBridge extends AbstractGraphicsNodeBridge {
   
  @@ -613,11 +613,11 @@
                n = n.getNextSibling()) {
               
               last = n.getNextSibling() == null;
  -
  +            
               int lastChar = asb.getLastChar();
               stripFirst = !preserve && first &&
                   (top || lastChar == ' ' || lastChar == -1);
  -
  +            
               switch (n.getNodeType()) {
               case Node.ELEMENT_NODE:
                   if (n.getNamespaceURI() != SVG_NAMESPACE_URI) {
  @@ -626,7 +626,7 @@
                   
                   nodeElement = (Element)n;
                   String ln = n.getLocalName();
  -
  +                
                   if (ln.equals(SVG_TSPAN_TAG) ||
                       ln.equals(SVG_ALT_GLYPH_TAG)) {
                       fillAttributedStringBuffer(ctx,
  
  
  
  1.16      +3 -1      xml-batik/sources/org/apache/batik/gvt/ShapeNode.java
  
  Index: ShapeNode.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/gvt/ShapeNode.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- ShapeNode.java    6 Feb 2002 17:52:37 -0000       1.15
  +++ ShapeNode.java    29 Apr 2002 13:20:19 -0000      1.16
  @@ -20,7 +20,7 @@
    * A graphics node that represents a shape.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Thierry Kormann</a>
  - * @version $Id: ShapeNode.java,v 1.15 2002/02/06 17:52:37 deweese Exp $
  + * @version $Id: ShapeNode.java,v 1.16 2002/04/29 13:20:19 tkormann Exp $
    */
   public class ShapeNode extends AbstractGraphicsNode {
   
  @@ -160,6 +160,8 @@
        * @param p the specified Point2D in the user space
        */
       public boolean contains(Point2D p) {
  +        // <!> FIXME: should put this code in TextPaint somewhere,
  +        // as pointer-events support
           Rectangle2D b = getBounds();
           if (b == null || !b.contains(p)) {
               return false;
  
  
  
  1.24      +59 -1     xml-batik/sources/org/apache/batik/gvt/TextNode.java
  
  Index: TextNode.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/gvt/TextNode.java,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- TextNode.java     23 Jan 2002 14:14:08 -0000      1.23
  +++ TextNode.java     29 Apr 2002 13:20:19 -0000      1.24
  @@ -30,12 +30,14 @@
   import org.apache.batik.gvt.text.AttributedCharacterSpanIterator;
   import org.apache.batik.gvt.text.GVTAttributedCharacterIterator;
   import org.apache.batik.gvt.text.Mark;
  +import org.apache.batik.gvt.text.TextHit;
  +import org.apache.batik.gvt.text.TextSpanLayout;
   
   /**
    * A graphics node that represents text.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Thierry Kormann</a>
  - * @version $Id: TextNode.java,v 1.23 2002/01/23 14:14:08 deweese Exp $
  + * @version $Id: TextNode.java,v 1.24 2002/04/29 13:20:19 tkormann Exp $
    */
   public class TextNode extends AbstractGraphicsNode implements Selectable {
   
  @@ -378,6 +380,62 @@
           }
           // Paint the text
           textPainter.paint(this, g2d);
  +    }
  +
  +    //
  +    // Geometric methods
  +    //
  +
  +    /**
  +     * Returns true if the specified Point2D is inside the boundary of this
  +     * node, false otherwise.
  +     *
  +     * @param p the specified Point2D in the user space
  +     */
  +    public boolean contains(Point2D p) {
  +        // <!> FIXME: should put this code in TextPaint somewhere,
  +        // as pointer-events support - same problem with pointer-events
  +        // and ShapeNode
  +        if (!super.contains(p)) {
  +            return false;
  +        }
  +        List list = getTextRuns();
  +        // place coords in text node coordinate system
  +        for (int i = 0 ; i < list.size(); i++) {
  +            StrokingTextPainter.TextRun run =
  +                (StrokingTextPainter.TextRun)list.get(i);
  +            AttributedCharacterIterator aci = run.getACI();
  +            TextSpanLayout layout = run.getLayout();
  +            float x = (float)p.getX();
  +            float y = (float)p.getY();
  +            TextHit textHit = layout.hitTestChar(x, y);
  +            if (textHit != null && contains(p, layout.getBounds())) {
  +                return true;
  +            }
  +        }
  +        return false;
  +    }
  +
  +    protected boolean contains(Point2D p, Rectangle2D b) {
  +        if (b == null || !b.contains(p)) {
  +            return false;
  +        }
  +        switch(pointerEventType) {
  +        case VISIBLE_PAINTED:
  +        case VISIBLE_FILL:
  +        case VISIBLE_STROKE:
  +        case VISIBLE:
  +            return isVisible;
  +        case PAINTED:
  +        case FILL:
  +        case STROKE:
  +        case ALL:
  +            return true;
  +        case NONE:
  +            return false;
  +        default:
  +            return false;
  +        }
       }
   
       /**
  
  
  
  1.33      +1 -2      
xml-batik/sources/org/apache/batik/gvt/renderer/StrokingTextPainter.java
  
  Index: StrokingTextPainter.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/gvt/renderer/StrokingTextPainter.java,v
  retrieving revision 1.32
  retrieving revision 1.33
  diff -u -r1.32 -r1.33
  --- StrokingTextPainter.java  12 Apr 2002 14:36:48 -0000      1.32
  +++ StrokingTextPainter.java  29 Apr 2002 13:20:19 -0000      1.33
  @@ -61,7 +61,7 @@
    * @see org.apache.batik.gvt.text.GVTAttributedCharacterIterator
    *
    * @author <a href="[EMAIL PROTECTED]>Bill Haneman</a>
  - * @version $Id: StrokingTextPainter.java,v 1.32 2002/04/12 14:36:48 deweese Exp $
  + * @version $Id: StrokingTextPainter.java,v 1.33 2002/04/29 13:20:19 tkormann Exp $
    */
   public class StrokingTextPainter extends BasicTextPainter {
   
  @@ -1535,7 +1535,6 @@
           }
           return highlightedShape;
       }
  -
   
   // inner classes
   
  
  
  
  1.66      +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.65
  retrieving revision 1.66
  diff -u -r1.65 -r1.66
  --- samplesRendering.xml      26 Apr 2002 08:48:53 -0000      1.65
  +++ samplesRendering.xml      29 Apr 2002 13:20:20 -0000      1.66
  @@ -8,7 +8,7 @@
   
   <!-- ========================================================================= -->
   <!-- @author [EMAIL PROTECTED]                                         -->
  -<!-- @version $Id: samplesRendering.xml,v 1.65 2002/04/26 08:48:53 vhardy Exp $ -->
  +<!-- @version $Id: samplesRendering.xml,v 1.66 2002/04/29 13:20:20 tkormann Exp $ 
-->
   <!-- ========================================================================= -->
   <testSuite id="samplesRendering" name="samples and samples/test Rendering" 
class="org.apache.batik.test.svg.SamplesRenderingTest">
   
  @@ -108,6 +108,7 @@
       </testGroup>
   
       <testGroup id="tests.spec.linking">
  +        <test id="samples/tests/spec/linking/anchorInsideText.svg" />
           <test id="samples/tests/spec/linking/anchor.svg" />
           <test id="samples/tests/spec/linking/linkingTransform.svg" />
           <test id="samples/tests/spec/linking/linkingViewBox.svg" />   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to