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;
}