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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]