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 de...@apache.org on 2003/10/23 03:01:55 UTC
cvs commit: xml-batik/sources/org/apache/batik/gvt CompositeShapePainter.java FillShapePainter.java MarkerShapePainter.java ShapeNode.java ShapePainter.java StrokeShapePainter.java
deweese 2003/10/22 18:01:55
Modified: sources/org/apache/batik/gvt CompositeShapePainter.java
FillShapePainter.java MarkerShapePainter.java
ShapeNode.java ShapePainter.java
StrokeShapePainter.java
Log:
1) No longer builds area objects for sensitive regions,
now passes hit test point to shape painters directly.
Revision Changes Path
1.19 +27 -1 xml-batik/sources/org/apache/batik/gvt/CompositeShapePainter.java
Index: CompositeShapePainter.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/gvt/CompositeShapePainter.java,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- CompositeShapePainter.java 9 Aug 2003 16:58:40 -0000 1.18
+++ CompositeShapePainter.java 23 Oct 2003 01:01:55 -0000 1.19
@@ -53,6 +53,7 @@
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.Area;
+import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
/**
@@ -192,6 +193,18 @@
return bounds;
}
+ /**
+ * Returns true if pt is in the area painted by this shape painter
+ */
+ public boolean inPaintedArea(Point2D pt){
+ if (painters == null)
+ return false;
+ for (int i=0; i < count; ++i) {
+ if (painters[i].inPaintedArea(pt))
+ return true;
+ }
+ return false;
+ }
/**
* Returns the area covered by this shape painter (even if nothing
@@ -224,6 +237,19 @@
else bounds.add(pb);
}
return bounds;
+ }
+
+ /**
+ * Returns true if pt is in the area painted by this shape painter
+ */
+ public boolean inSensitiveArea(Point2D pt){
+ if (painters == null)
+ return false;
+ for (int i=0; i < count; ++i) {
+ if (painters[i].inSensitiveArea(pt))
+ return true;
+ }
+ return false;
}
/**
1.14 +21 -1 xml-batik/sources/org/apache/batik/gvt/FillShapePainter.java
Index: FillShapePainter.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/gvt/FillShapePainter.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- FillShapePainter.java 21 Oct 2003 01:17:11 -0000 1.13
+++ FillShapePainter.java 23 Oct 2003 01:01:55 -0000 1.14
@@ -54,6 +54,7 @@
import java.awt.Paint;
import java.awt.Shape;
import java.awt.geom.Rectangle2D;
+import java.awt.geom.Point2D;
/**
* A shape painter that can be used to fill a shape.
@@ -128,6 +129,16 @@
}
/**
+ * Returns true if pt is in the area painted by this shape painter
+ */
+ public boolean inPaintedArea(Point2D pt){
+ if ((paint == null) || (shape == null))
+ return false;
+
+ return shape.contains(pt);
+ }
+
+ /**
* Returns the area covered by this shape painter (even if not painted).
*
*/
@@ -143,6 +154,15 @@
if (shape == null)
return null;
return shape.getBounds2D();
+ }
+
+ /**
+ * Returns true if pt is in the area painted by this shape painter
+ */
+ public boolean inSensitiveArea(Point2D pt){
+ if (shape == null)
+ return false;
+ return shape.contains(pt);
}
/**
1.15 +23 -7 xml-batik/sources/org/apache/batik/gvt/MarkerShapePainter.java
Index: MarkerShapePainter.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/gvt/MarkerShapePainter.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- MarkerShapePainter.java 9 Aug 2003 16:58:40 -0000 1.14
+++ MarkerShapePainter.java 23 Oct 2003 01:01:55 -0000 1.15
@@ -170,12 +170,21 @@
* Returns the bounds of the area painted by this shape painter
*/
public Rectangle2D getPaintedBounds2D(){
- Shape shape = getPaintedArea();
- if (shape != null){
- return shape.getBounds2D();
- } else {
- return null;
- }
+ if (markerGroup == null) {
+ buildMarkerGroup();
+ }
+ return markerGroup.getPrimitiveBounds();
+ }
+
+ /**
+ * Returns true if pt is in the area painted by this shape painter
+ */
+ public boolean inPaintedArea(Point2D pt){
+ if (markerGroup == null) {
+ buildMarkerGroup();
+ }
+ GraphicsNode gn = markerGroup.nodeHitAt(pt);
+ return (gn != null);
}
/**
@@ -189,6 +198,13 @@
* (even if not painted). This is always null for Markers.
*/
public Rectangle2D getSensitiveBounds2D() { return null; }
+
+ /**
+ * Returns true if pt is in the sensitive area.
+ * This is always false for Markers.
+ */
+ public boolean inSensitiveArea(Point2D pt) { return false; }
+
/**
* Sets the Shape this shape painter is associated with.
1.25 +52 -4 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.24
retrieving revision 1.25
diff -u -r1.24 -r1.25
--- ShapeNode.java 21 Oct 2003 01:17:11 -0000 1.24
+++ ShapeNode.java 23 Oct 2003 01:01:55 -0000 1.25
@@ -226,9 +226,7 @@
if (b == null || !b.contains(p))
return false;
- Shape s = getSensitiveArea();
- if (s == null) return false;
- return s.contains(p);
+ return inSensitiveArea(p);
}
case NONE:
default:
@@ -273,6 +271,56 @@
}
}
return primitiveBounds;
+ }
+
+ public boolean inSensitiveArea(Point2D pt) {
+ if (shapePainter == null)
+ return false;
+
+ // <!> NOT REALLY NICE CODE BUT NO OTHER WAY
+ ShapePainter strokeShapePainter = null;
+ ShapePainter fillShapePainter = null;
+ if (shapePainter instanceof StrokeShapePainter) {
+ strokeShapePainter = shapePainter;
+ } else if (shapePainter instanceof FillShapePainter) {
+ fillShapePainter = shapePainter;
+ } else if (shapePainter instanceof CompositeShapePainter) {
+ CompositeShapePainter cp = (CompositeShapePainter)shapePainter;
+
+ for (int i=0; i < cp.getShapePainterCount(); ++i) {
+ ShapePainter sp = cp.getShapePainter(i);
+ if (sp instanceof StrokeShapePainter) {
+ strokeShapePainter = sp;
+ } else if (sp instanceof FillShapePainter) {
+ fillShapePainter = sp;
+ }
+ }
+ } else {
+ return false; // Don't know what we have...
+ }
+
+ switch(pointerEventType) {
+ case VISIBLE_PAINTED:
+ case PAINTED:
+ return shapePainter.inPaintedArea(pt);
+ case VISIBLE:
+ case ALL:
+ return shapePainter.inSensitiveArea(pt);
+ case VISIBLE_FILL:
+ case FILL:
+ if (fillShapePainter != null)
+ return fillShapePainter.inSensitiveArea(pt);
+ break;
+ case VISIBLE_STROKE:
+ case STROKE:
+ if (strokeShapePainter != null)
+ return strokeShapePainter.inSensitiveArea(pt);
+ break;
+ case NONE:
+ default:
+ // nothing to tdo
+ }
+ return false;
}
/**
1.14 +12 -1 xml-batik/sources/org/apache/batik/gvt/ShapePainter.java
Index: ShapePainter.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/gvt/ShapePainter.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- ShapePainter.java 8 Aug 2003 11:39:14 -0000 1.13
+++ ShapePainter.java 23 Oct 2003 01:01:55 -0000 1.14
@@ -53,6 +53,7 @@
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.Rectangle2D;
+import java.awt.geom.Point2D;
/**
* Renders the shape of a <tt>ShapeNode</tt>.
@@ -80,6 +81,11 @@
Rectangle2D getPaintedBounds2D();
/**
+ * Returns true if <tt>pt</tt> is in the painted area.
+ */
+ boolean inPaintedArea(Point2D pt);
+
+ /**
* Returns the area covered by this shape painter (even if nothing
* is painted there).
*/
@@ -90,6 +96,11 @@
* (even if nothing is painted there).
*/
Rectangle2D getSensitiveBounds2D();
+
+ /**
+ * Returns true if <tt>pt</tt> is in the sensitive area.
+ */
+ boolean inSensitiveArea(Point2D pt);
/**
* Sets the Shape this shape painter is associated with.
1.14 +24 -3 xml-batik/sources/org/apache/batik/gvt/StrokeShapePainter.java
Index: StrokeShapePainter.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/gvt/StrokeShapePainter.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- StrokeShapePainter.java 8 Aug 2003 11:39:14 -0000 1.13
+++ StrokeShapePainter.java 23 Oct 2003 01:01:55 -0000 1.14
@@ -55,6 +55,7 @@
import java.awt.Shape;
import java.awt.Stroke;
import java.awt.geom.Rectangle2D;
+import java.awt.geom.Point2D;
/**
* A shape painter that can be used to draw the outline of a shape.
@@ -156,6 +157,16 @@
}
/**
+ * Returns the bounds of the area covered by this shape painter
+ */
+ public boolean inPaintedArea(Point2D pt){
+ Shape painted = getPaintedArea();
+ if (painted == null)
+ return false;
+ return painted.contains(pt);
+ }
+
+ /**
* Returns the area covered by this shape painter (even if not painted).
*/
public Shape getSensitiveArea(){
@@ -169,7 +180,7 @@
}
/**
- * Returns the bounds of the area covered by this shape painte
+ * Returns the bounds of the area covered by this shape painter
* (even if not painted).
*/
public Rectangle2D getSensitiveBounds2D() {
@@ -180,7 +191,17 @@
return sensitive.getBounds2D();
}
-
+ /**
+ * Returns the bounds of the area covered by this shape painter
+ * (even if not painted).
+ */
+ public boolean inSensitiveArea(Point2D pt){
+ Shape sensitive = getSensitiveArea();
+ if (sensitive == null)
+ return false;
+ return sensitive.contains(pt);
+ }
+
/**
* Sets the Shape this shape painter is associated with.
*
---------------------------------------------------------------------
To unsubscribe, e-mail: batik-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: batik-dev-help@xml.apache.org