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 2001/02/09 21:13:00 UTC

cvs commit: xml-batik/sources/org/apache/batik/gvt GraphicsNode.java AbstractGraphicsNode.java CompositeGraphicsNode.java

vhardy      01/02/09 12:13:00

  Modified:    sources/org/apache/batik/gvt GraphicsNode.java
                        AbstractGraphicsNode.java
                        CompositeGraphicsNode.java
  Log:
  a. Added a getInverseTransform to GraphicsNode (for event handling).
  b. Modified contains and nodeHitAt in CompositeGrahicsNode so that fewer
     objects are created.
  
  Revision  Changes    Path
  1.22      +6 -1      xml-batik/sources/org/apache/batik/gvt/GraphicsNode.java
  
  Index: GraphicsNode.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/gvt/GraphicsNode.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- GraphicsNode.java	2001/02/08 20:44:16	1.21
  +++ GraphicsNode.java	2001/02/09 20:12:59	1.22
  @@ -33,7 +33,7 @@
    *
    * @author <a href="mailto:Thierry.Kormann@sophia.inria.fr">Thierry Kormann</a>
    * @author <a href="mailto:etissandier@ilog.fr">Emmanuel Tissandier</a>
  - * @version $Id: GraphicsNode.java,v 1.21 2001/02/08 20:44:16 vhardy Exp $
  + * @version $Id: GraphicsNode.java,v 1.22 2001/02/09 20:12:59 vhardy Exp $
    */
   public interface GraphicsNode {
   
  @@ -56,6 +56,11 @@
        * Returns the transform of this node.
        */
       AffineTransform getTransform();
  +
  +    /**
  +     * Returns the inverse transform for this node.
  +     */
  +    AffineTransform getInverseTransform();
   
       /**
        * Returns the concatenated transform of this node. i.e., this
  
  
  
  1.12      +27 -1     xml-batik/sources/org/apache/batik/gvt/AbstractGraphicsNode.java
  
  Index: AbstractGraphicsNode.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/gvt/AbstractGraphicsNode.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- AbstractGraphicsNode.java	2001/02/08 20:44:12	1.11
  +++ AbstractGraphicsNode.java	2001/02/09 20:12:59	1.12
  @@ -48,7 +48,7 @@
    * @author <a href="mailto:Thierry.Kormann@sophia.inria.fr">Thierry Kormann</a>
    * @author <a href="mailto:etissandier@ilog.fr">Emmanuel Tissandier</a>
    * @author <a href="mailto:Thomas.DeWeeese@Kodak.com">Thomas DeWeese</a>
  - * @version $Id: AbstractGraphicsNode.java,v 1.11 2001/02/08 20:44:12 vhardy Exp $
  + * @version $Id: AbstractGraphicsNode.java,v 1.12 2001/02/09 20:12:59 vhardy Exp $
    */
   public abstract class AbstractGraphicsNode implements GraphicsNode, Cloneable {
   
  @@ -68,6 +68,12 @@
       protected AffineTransform transform;
   
       /**
  +     * The inverse transform for this node, i.e., from parent node
  +     * to this node.
  +     */
  +    protected AffineTransform inverseTransform;
  +
  +    /**
        * The compositing operation to be used when a graphics node is
        * painted on top of another one.
        */
  @@ -135,6 +141,19 @@
       public void setTransform(AffineTransform newTransform) {
           invalidateGeometryCache();
           this.transform = newTransform;
  +        if(transform.getDeterminant() != 0){
  +            try{
  +                inverseTransform = transform.createInverse();
  +            }catch(NoninvertibleTransformException e){
  +                // Should never happen.
  +                throw new Error();
  +            }
  +        }
  +        else{
  +            // The transform is not invertible. Use the same
  +            // transform.
  +            inverseTransform = transform;
  +        }
       }
   
       /**
  @@ -142,6 +161,13 @@
        */
       public AffineTransform getTransform() {
           return transform;
  +    }
  +
  +    /**
  +     * Returns the inverse transform of this node
  +     */
  +    public AffineTransform getInverseTransform(){
  +        return inverseTransform;
       }
   
       /**
  
  
  
  1.13      +22 -21    xml-batik/sources/org/apache/batik/gvt/CompositeGraphicsNode.java
  
  Index: CompositeGraphicsNode.java
  ===================================================================
  RCS file: /home/cvs/xml-batik/sources/org/apache/batik/gvt/CompositeGraphicsNode.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- CompositeGraphicsNode.java	2001/02/08 20:44:19	1.12
  +++ CompositeGraphicsNode.java	2001/02/09 20:12:59	1.13
  @@ -32,7 +32,7 @@
    * A CompositeGraphicsNode is a graphics node that can contain graphics nodes.
    *
    * @author <a href="mailto:Thierry.Kormann@sophia.inria.fr">Thierry Kormann</a>
  - * @version $Id: CompositeGraphicsNode.java,v 1.12 2001/02/08 20:44:19 vhardy Exp $
  + * @version $Id: CompositeGraphicsNode.java,v 1.13 2001/02/09 20:12:59 vhardy Exp $
    */
   public class CompositeGraphicsNode extends AbstractGraphicsNode
           implements List {
  @@ -215,18 +215,19 @@
   
       public boolean contains(Point2D p, GraphicsNodeRenderContext rc) {
           if (count > 0 && getBounds(rc).contains(p)) {
  +            Point2D pt = null;
  +            Point2D cp = null; // Propagated to children
               for (int i=0; i < count; ++i) {
  -                AffineTransform t = children[i].getTransform();
  -                if (t == null) {
  -                    t = IDENTITY;
  -                } else {
  -                    // put the coordinates to children space
  -                    try {
  -                        t = t.createInverse();
  -                    } catch (NoninvertibleTransformException ex) {}
  +                AffineTransform t = children[i].getInverseTransform();
  +                if(t != null){
  +                    pt = t.transform(p, pt);
  +                    cp = pt;
                   }
  -                Point2D pt = t.transform(p, null);
  -                if (children[i].contains(pt, rc)) {
  +                else{
  +                    cp = p;
  +                }
  +
  +                if (children[i].contains(cp, rc)) {
                       return true;
                   }
               }
  @@ -239,18 +240,18 @@
               //
               // Go backward because the children are in rendering order
               //
  +            Point2D pt = null;
  +            Point2D cp = null; // Propagated to children
               for (int i=count-1; i >= 0; --i) {
  -                AffineTransform t = children[i].getTransform();
  -                if (t == null) {
  -                    t = IDENTITY;
  -                } else {
  -                    // put the coordinates to children space
  -                    try {
  -                        t = t.createInverse();
  -                    } catch (NoninvertibleTransformException ex) {}
  +                AffineTransform t = children[i].getInverseTransform();
  +                if(t != null){
  +                    pt = t.transform(p, pt);
  +                    cp = pt;
  +                }
  +                else{
  +                    cp = p;
                   }
  -                Point2D pt = t.transform(p, null);
  -                GraphicsNode node = children[i].nodeHitAt(pt, rc);
  +                GraphicsNode node = children[i].nodeHitAt(cp, rc);
                   if (node != null) {
                       return node;
                   }