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/06/17 03:37:57 UTC
cvs commit: xml-batik/sources/org/apache/batik/swing/svg JSVGComponent.java
deweese 2003/06/16 18:37:57
Modified: sources/org/apache/batik/apps/svgbrowser
JSVGViewerFrame.java
sources/org/apache/batik/bridge SVGEllipseElementBridge.java
SVGShapeElementBridge.java SVGUtilities.java
sources/org/apache/batik/gvt ShapeNode.java
sources/org/apache/batik/swing JSVGCanvas.java
sources/org/apache/batik/swing/svg JSVGComponent.java
Log:
Revision Changes Path
1.94 +16 -5 xml-batik/sources/org/apache/batik/apps/svgbrowser/JSVGViewerFrame.java
Index: JSVGViewerFrame.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/apps/svgbrowser/JSVGViewerFrame.java,v
retrieving revision 1.93
retrieving revision 1.94
diff -u -r1.93 -r1.94
--- JSVGViewerFrame.java 11 Apr 2003 13:54:36 -0000 1.93
+++ JSVGViewerFrame.java 17 Jun 2003 01:37:56 -0000 1.94
@@ -435,9 +435,10 @@
// of unnecessary large images.
//
svgCanvas = new JSVGCanvas(userAgent, true, true){
- Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+ Dimension screenSize;
{
+ screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setMaximumSize(screenSize);
}
@@ -447,7 +448,20 @@
if (s.height > screenSize.height) s.height = screenSize.height;
return s;
}
+
+ /**
+ * This method is called when the component knows the desired
+ * size of the window (based on width/height of outermost SVG
+ * element). We override it to immediately pack this frame.
+ */
+ public void setMySize(Dimension d) {
+ setPreferredSize(d);
+ invalidate();
+ if (JSVGViewerFrame.this.autoAdjust) {
+ JSVGViewerFrame.this.pack();
+ }
+ }
};
javax.swing.ActionMap map = svgCanvas.getActionMap();
@@ -1847,9 +1861,6 @@
svgCanvas.setSelectionOverlayXORMode
(application.isSelectionOverlayXORMode());
svgCanvas.requestFocus(); // request focus when load completes.
- if (autoAdjust) {
- pack();
- }
}
/**
1.12 +3 -7 xml-batik/sources/org/apache/batik/bridge/SVGEllipseElementBridge.java
Index: SVGEllipseElementBridge.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGEllipseElementBridge.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- SVGEllipseElementBridge.java 11 Apr 2003 13:54:46 -0000 1.11
+++ SVGEllipseElementBridge.java 17 Jun 2003 01:37:57 -0000 1.12
@@ -81,11 +81,6 @@
throw new BridgeException(e, ERR_ATTRIBUTE_MISSING,
new Object[] {SVG_RX_ATTRIBUTE, s});
}
- // A value of zero disables rendering of the element
- if (rx == 0) {
- shapeNode.setShape(null);
- return;
- }
// 'ry' attribute - required
s = e.getAttributeNS(null, SVG_RY_ATTRIBUTE);
@@ -97,8 +92,9 @@
throw new BridgeException(e, ERR_ATTRIBUTE_MISSING,
new Object[] {SVG_RY_ATTRIBUTE, s});
}
+
// A value of zero disables rendering of the element
- if (ry == 0) {
+ if ((rx == 0) || (ry == 0)) {
shapeNode.setShape(null);
return;
}
1.22 +2 -4 xml-batik/sources/org/apache/batik/bridge/SVGShapeElementBridge.java
Index: SVGShapeElementBridge.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGShapeElementBridge.java,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- SVGShapeElementBridge.java 30 May 2003 01:07:15 -0000 1.21
+++ SVGShapeElementBridge.java 17 Jun 2003 01:37:57 -0000 1.22
@@ -45,9 +45,7 @@
}
// delegates to subclasses the shape construction
buildShape(ctx, e, shapeNode);
- if (shapeNode.getShape() == null) {
- return null; // Disable the rendering if something bad happens
- }
+
// 'shape-rendering' and 'color-rendering'
RenderingHints hints = CSSUtilities.convertShapeRendering(e, null);
hints = CSSUtilities.convertColorRendering(e, hints);
1.25 +45 -37 xml-batik/sources/org/apache/batik/bridge/SVGUtilities.java
Index: SVGUtilities.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGUtilities.java,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -r1.24 -r1.25
--- SVGUtilities.java 28 May 2003 14:40:57 -0000 1.24
+++ SVGUtilities.java 17 Jun 2003 01:37:57 -0000 1.25
@@ -703,21 +703,25 @@
break;
case OBJECT_BOUNDING_BOX:
Rectangle2D bounds = filteredNode.getGeometryBounds();
- dx = UnitProcessor.svgHorizontalCoordinateToObjectBoundingBox
- (dxStr, BatikExtConstants.BATIK_EXT_DX_ATRIBUTE, uctx);
- dx *= bounds.getWidth();
-
- dy = UnitProcessor.svgVerticalCoordinateToObjectBoundingBox
- (dyStr, BatikExtConstants.BATIK_EXT_DY_ATRIBUTE, uctx);
- dy *= bounds.getHeight();
-
- dw = UnitProcessor.svgHorizontalCoordinateToObjectBoundingBox
- (dwStr, BatikExtConstants.BATIK_EXT_DW_ATRIBUTE, uctx);
- dw *= bounds.getWidth();
-
- dh = UnitProcessor.svgVerticalCoordinateToObjectBoundingBox
- (dhStr, BatikExtConstants.BATIK_EXT_DH_ATRIBUTE, uctx);
- dh *= bounds.getHeight();
+ if (bounds == null) {
+ dx = dy = dw = dh = 0;
+ } else {
+ dx = UnitProcessor.svgHorizontalCoordinateToObjectBoundingBox
+ (dxStr, BatikExtConstants.BATIK_EXT_DX_ATRIBUTE, uctx);
+ dx *= bounds.getWidth();
+
+ dy = UnitProcessor.svgVerticalCoordinateToObjectBoundingBox
+ (dyStr, BatikExtConstants.BATIK_EXT_DY_ATRIBUTE, uctx);
+ dy *= bounds.getHeight();
+
+ dw = UnitProcessor.svgHorizontalCoordinateToObjectBoundingBox
+ (dwStr, BatikExtConstants.BATIK_EXT_DW_ATRIBUTE, uctx);
+ dw *= bounds.getWidth();
+
+ dh = UnitProcessor.svgVerticalCoordinateToObjectBoundingBox
+ (dhStr, BatikExtConstants.BATIK_EXT_DH_ATRIBUTE, uctx);
+ dh *= bounds.getHeight();
+ }
break;
default:
throw new Error(); // can't be reached
@@ -798,25 +802,27 @@
switch (unitsType) {
case OBJECT_BOUNDING_BOX:
Rectangle2D bounds = filteredNode.getGeometryBounds();
- if (xStr.length() != 0) {
- x = UnitProcessor.svgHorizontalCoordinateToObjectBoundingBox
- (xStr, SVG_X_ATTRIBUTE, uctx);
- x = bounds.getX() + x*bounds.getWidth();
- }
- if (yStr.length() != 0) {
- y = UnitProcessor.svgVerticalCoordinateToObjectBoundingBox
- (yStr, SVG_Y_ATTRIBUTE, uctx);
- y = bounds.getY() + y*bounds.getHeight();
- }
- if (wStr.length() != 0) {
- w = UnitProcessor.svgHorizontalLengthToObjectBoundingBox
- (wStr, SVG_WIDTH_ATTRIBUTE, uctx);
- w *= bounds.getWidth();
- }
- if (hStr.length() != 0) {
- h = UnitProcessor.svgVerticalLengthToObjectBoundingBox
- (hStr, SVG_HEIGHT_ATTRIBUTE, uctx);
- h *= bounds.getHeight();
+ if (bounds != null) {
+ if (xStr.length() != 0) {
+ x = UnitProcessor.svgHorizontalCoordinateToObjectBoundingBox
+ (xStr, SVG_X_ATTRIBUTE, uctx);
+ x = bounds.getX() + x*bounds.getWidth();
+ }
+ if (yStr.length() != 0) {
+ y = UnitProcessor.svgVerticalCoordinateToObjectBoundingBox
+ (yStr, SVG_Y_ATTRIBUTE, uctx);
+ y = bounds.getY() + y*bounds.getHeight();
+ }
+ if (wStr.length() != 0) {
+ w = UnitProcessor.svgHorizontalLengthToObjectBoundingBox
+ (wStr, SVG_WIDTH_ATTRIBUTE, uctx);
+ w *= bounds.getWidth();
+ }
+ if (hStr.length() != 0) {
+ h = UnitProcessor.svgVerticalLengthToObjectBoundingBox
+ (hStr, SVG_HEIGHT_ATTRIBUTE, uctx);
+ h *= bounds.getHeight();
+ }
}
break;
case USER_SPACE_ON_USE:
@@ -1061,8 +1067,10 @@
AffineTransform Mx = new AffineTransform();
Rectangle2D bounds = node.getGeometryBounds();
- Mx.translate(bounds.getX(), bounds.getY());
- Mx.scale(bounds.getWidth(), bounds.getHeight());
+ if (bounds != null) {
+ Mx.translate(bounds.getX(), bounds.getY());
+ Mx.scale(bounds.getWidth(), bounds.getHeight());
+ }
Mx.concatenate(Tx);
return Mx;
}
1.21 +9 -3 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.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- ShapeNode.java 30 May 2003 01:07:16 -0000 1.20
+++ ShapeNode.java 17 Jun 2003 01:37:57 -0000 1.21
@@ -98,6 +98,8 @@
* @param newShapePainter the new ShapePainter to use
*/
public void setShapePainter(ShapePainter newShapePainter) {
+ if (shape == null) // Doesn't matter if we don't have a shape.
+ return;
fireGraphicsNodeChangeStarted();
invalidateGeometryCache();
this.shapePainter = newShapePainter;
@@ -252,6 +254,8 @@
public Shape getSensitiveArea() {
if (sensitiveArea != null)
return sensitiveArea;
+ if (shapePainter == null)
+ return null;
// <!> NOT REALLY NICE CODE BUT NO OTHER WAY
ShapePainter strokeShapePainter = null;
@@ -260,8 +264,9 @@
strokeShapePainter = shapePainter;
} else if (shapePainter instanceof FillShapePainter) {
fillShapePainter = shapePainter;
- } else {
+ } 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) {
@@ -270,7 +275,8 @@
fillShapePainter = sp;
}
}
- }
+ } else return null; // Don't know what we have...
+
switch(pointerEventType) {
case VISIBLE_PAINTED:
1.39 +68 -84 xml-batik/sources/org/apache/batik/swing/JSVGCanvas.java
Index: JSVGCanvas.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/swing/JSVGCanvas.java,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -r1.38 -r1.39
--- JSVGCanvas.java 11 Jun 2003 22:07:27 -0000 1.38
+++ JSVGCanvas.java 17 Jun 2003 01:37:57 -0000 1.39
@@ -511,134 +511,118 @@
}
/**
- * A swing action to zoom in the canvas.
+ * A swing action to append an affine transform to the current
+ * rendering transform. Before the rendering transform is
+ * applied the method translates the center of the display to
+ * 0,0 so scale and rotate occur around the middle of
+ * the display.
*/
- protected class ZoomInAction extends AbstractAction {
+ protected class AffineAction extends AbstractAction {
+ AffineTransform at;
+ public AffineAction(AffineTransform at) {
+ this.at = at;
+ }
+
public void actionPerformed(ActionEvent evt) {
if (gvtRoot == null) {
return;
}
- AffineTransform at = getRenderingTransform();
+ AffineTransform rat = getRenderingTransform();
if (at != null) {
Dimension dim = getSize();
int x = dim.width / 2;
int y = dim.height / 2;
AffineTransform t = AffineTransform.getTranslateInstance(x, y);
- t.scale(2, 2);
- t.translate(-x, -y);
t.concatenate(at);
+ t.translate(-x, -y);
+ t.concatenate(rat);
setRenderingTransform(t);
}
}
}
/**
- * A swing action to zoom out the canvas.
+ * A swing action to apply a zoom factor to the canvas.
+ * This can be used to zoom in (scale > 1) and out (scale <1).
*/
- protected class ZoomOutAction extends AbstractAction {
- public void actionPerformed(ActionEvent evt) {
- if (gvtRoot == null) {
- return;
- }
- AffineTransform at = getRenderingTransform();
- if (at != null) {
- Dimension dim = getSize();
- int x = dim.width / 2;
- int y = dim.height / 2;
- AffineTransform t = AffineTransform.getTranslateInstance(x, y);
- t.scale(.5, .5);
- t.translate(-x, -y);
- t.concatenate(at);
- setRenderingTransform(t);
- }
+ protected class ZoomAction extends AffineAction {
+ public ZoomAction(double scale) {
+ super(AffineTransform.getScaleInstance(scale, scale));
+ }
+ public ZoomAction(double scaleX, double scaleY) {
+ super(AffineTransform.getScaleInstance(scaleX, scaleY));
}
}
/**
- * A swing action to scroll the canvas to the right.
+ * A swing action to zoom in the canvas.
*/
- protected class ScrollRightAction extends AbstractAction {
+ protected class ZoomInAction extends ZoomAction {
+ ZoomInAction() { super(2); }
+ }
- /** The scroll increment. */
- protected int inc;
+ /**
+ * A swing action to zoom out the canvas.
+ */
+ protected class ZoomOutAction extends ZoomAction {
+ ZoomOutAction() { super(.5); }
+ }
- public ScrollRightAction(int inc) {
- this.inc = inc;
+ /**
+ * A swing action to Rotate the canvas.
+ */
+ protected class RotateAction extends AffineAction {
+ public RotateAction(double theta) {
+ super(AffineTransform.getRotateInstance(theta));
}
+ }
- public void actionPerformed(ActionEvent evt) {
- if (gvtRoot == null) {
- return;
- }
- AffineTransform at = new AffineTransform(getRenderingTransform());
- at.translate(-inc, 0);
- setRenderingTransform(at);
+ /**
+ * A swing action to Pan/scroll the canvas.
+ */
+ protected class ScrollAction extends AffineAction {
+ public ScrollAction(double tx, double ty) {
+ super(AffineTransform.getTranslateInstance(tx, ty));
}
}
/**
- * A swing action to scroll the canvas to the left.
+ * A swing action to scroll the canvas to the right,
+ * by a fixed amount
*/
- protected class ScrollLeftAction extends AbstractAction {
-
- /** The scroll increment. */
- protected int inc;
-
- public ScrollLeftAction(int inc) {
- this.inc = inc;
+ protected class ScrollRightAction extends ScrollAction {
+ public ScrollRightAction(int inc) {
+ super(-inc, 0);
}
+ }
- public void actionPerformed(ActionEvent evt) {
- if (gvtRoot == null) {
- return;
- }
- AffineTransform at = new AffineTransform(getRenderingTransform());
- at.translate(inc, 0);
- setRenderingTransform(at);
+ /**
+ * A swing action to scroll the canvas to the left,
+ * by a fixed amount
+ */
+ protected class ScrollLeftAction extends ScrollAction {
+ public ScrollLeftAction(int inc) {
+ super(inc, 0);
}
}
/**
- * A swing action to scroll the canvas up.
+ * A swing action to scroll the canvas up,
+ * by a fixed amount
*/
- protected class ScrollUpAction extends AbstractAction {
-
- /** The scroll increment. */
- protected int inc;
-
+ protected class ScrollUpAction extends ScrollAction {
public ScrollUpAction(int inc) {
- this.inc = inc;
- }
-
- public void actionPerformed(ActionEvent evt) {
- if (gvtRoot == null) {
- return;
- }
- AffineTransform at = new AffineTransform(getRenderingTransform());
- at.translate(0, inc);
- setRenderingTransform(at);
+ super(0, inc);
}
}
/**
- * A swing action to scroll the canvas down.
+ * A swing action to scroll the canvas down,
+ * by a fixed amount
*/
- protected class ScrollDownAction extends AbstractAction {
-
- /** The scroll increment. */
- protected int inc;
-
+ protected class ScrollDownAction extends ScrollAction {
public ScrollDownAction(int inc) {
- this.inc = inc;
- }
-
- public void actionPerformed(ActionEvent evt) {
- if (gvtRoot == null) {
- return;
- }
- AffineTransform at = new AffineTransform(getRenderingTransform());
- at.translate(0, -inc);
- setRenderingTransform(at);
+ super(0, -inc);
}
}
1.70 +22 -19 xml-batik/sources/org/apache/batik/swing/svg/JSVGComponent.java
Index: JSVGComponent.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/swing/svg/JSVGComponent.java,v
retrieving revision 1.69
retrieving revision 1.70
diff -u -r1.69 -r1.70
--- JSVGComponent.java 11 Jun 2003 22:07:27 -0000 1.69
+++ JSVGComponent.java 17 Jun 2003 01:37:57 -0000 1.70
@@ -894,6 +894,21 @@
"Confirm", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION;
}
+
+ /**
+ * This method is called when the component knows the desired
+ * size of the window (based on width/height of outermost SVG
+ * element).
+ * The default implementation simply calls setPreferredSize,
+ * and invalidate.
+ * However it is often useful to pack the window containing
+ * this component.
+ */
+ public void setMySize(Dimension d) {
+ setPreferredSize(d);
+ invalidate();
+ }
+
/**
* The JGVTComponentListener.
*/
@@ -1065,8 +1080,9 @@
}
Dimension2D dim = bridgeContext.getDocumentSize();
- setMySize(new Dimension((int)dim.getWidth(),
- (int)dim.getHeight()));
+ Dimension mySz = new Dimension((int)dim.getWidth(),
+ (int)dim.getHeight());
+ JSVGComponent.this.setMySize(mySz);
SVGSVGElement elt = svgDocument.getRootElement();
Dimension d = getSize();
prevComponentSize = d;
@@ -1097,20 +1113,6 @@
}
}
- public void setMySize(Dimension d) {
- setPreferredSize(d);
- invalidate();
- Container p = getParent();
- while (p != null) {
- if (p instanceof Window) {
- Window w = (Window) p;
- w.pack();
- break;
- }
- p = p.getParent();
- }
- }
-
/**
* Called when a build was cancelled.
*/
@@ -1152,8 +1154,9 @@
JSVGComponent.this.image = null;
repaint();
} else {
- setMySize(new Dimension((int)dim.getWidth(),
- (int)dim.getHeight()));
+ Dimension d= new Dimension((int)dim.getWidth(),
+ (int)dim.getHeight());
+ JSVGComponent.this.setMySize(d);
JSVGComponent.this.setGraphicsNode(gn, false);
computeRenderingTransform();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: batik-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: batik-dev-help@xml.apache.org
Re: cvs commit: xml-batik/sources/org/apache/batik/swing/svg JSVGComponent.java
Posted by Thomas DeWeese <Th...@Kodak.com>.
deweese@apache.org wrote:
>deweese 2003/06/16 18:37:57
>
> Modified: sources/org/apache/batik/apps/svgbrowser
> JSVGViewerFrame.java
> sources/org/apache/batik/bridge SVGEllipseElementBridge.java
> SVGShapeElementBridge.java SVGUtilities.java
> sources/org/apache/batik/gvt ShapeNode.java
> sources/org/apache/batik/swing JSVGCanvas.java
> sources/org/apache/batik/swing/svg JSVGComponent.java
> Log:
>
Sorry Log didn't get sent:
1) JSVGComponent no longer calls 'pack' on it's parent Window.
The 'setMySize' method moved from the inner class of JSVGComponent,
SVGListener to JSVGComponent it's self. It now calls
setPreferredSize and invalidate only.
JSVGFrame (batik.apps.svgbrowser) now subclasses the JSVGCanvas
to call pack (if autoresize is true - browser preference).
2) Zero W/H elements now generate ShapeNodes with null geometry.
I think this works for all cases, but since you got this anyway
when a script modifed the DOM after load I figure even if there are
still some problems it's better than it was.
Display still isn't implemented (it's tricker since it effects
composite graphics nodes as well).
---------------------------------------------------------------------
To unsubscribe, e-mail: batik-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: batik-dev-help@xml.apache.org