vhardy 01/09/18 03:47:57 Modified: sources/org/apache/batik/apps/svgbrowser JSVGViewerFrame.java sources/org/apache/batik/svggen SVGEllipse.java SVGGraphics2D.java SVGRectangle.java Log: Fixed bugs #929 and #1574. Revision Changes Path 1.49 +4 -3 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.48 retrieving revision 1.49 diff -u -r1.48 -r1.49 --- JSVGViewerFrame.java 2001/09/10 15:23:33 1.48 +++ JSVGViewerFrame.java 2001/09/18 10:47:57 1.49 @@ -138,7 +138,7 @@ * This class represents a SVG viewer swing frame. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: JSVGViewerFrame.java,v 1.48 2001/09/10 15:23:33 tkormann Exp $ + * @version $Id: JSVGViewerFrame.java,v 1.49 2001/09/18 10:47:57 vhardy Exp $ */ public class JSVGViewerFrame extends JFrame @@ -812,7 +812,8 @@ public PrintAction() {} public void actionPerformed(ActionEvent e) { if (svgDocument != null) { - final SVGDocument doc = svgDocument; + // final SVGDocument doc = svgDocument; + final String docURI = svgCanvas.getURI(); new Thread() { public void run(){ // @@ -837,7 +838,7 @@ // // Do transcoding now // - pt.transcode(new TranscoderInput(doc), null); + pt.transcode(new TranscoderInput(docURI), null); // // Print 1.6 +42 -15 xml-batik/sources/org/apache/batik/svggen/SVGEllipse.java Index: SVGEllipse.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/svggen/SVGEllipse.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- SVGEllipse.java 2001/03/21 14:35:59 1.5 +++ SVGEllipse.java 2001/09/18 10:47:57 1.6 @@ -19,20 +19,31 @@ * a corresponding SVG element, i.e., a circle or an ellipse. * * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Hardy</a> - * @version $Id: SVGEllipse.java,v 1.5 2001/03/21 14:35:59 cjolif Exp $ + * @version $Id: SVGEllipse.java,v 1.6 2001/09/18 10:47:57 vhardy Exp $ */ public class SVGEllipse extends SVGGraphicObjectConverter { /** + * Line converter used for degenerate cases + */ + private SVGLine svgLine; + + /** * @param generatorContext used to build Elements */ public SVGEllipse(SVGGeneratorContext generatorContext) { super(generatorContext); + + svgLine = new SVGLine(generatorContext); } /** * @param ellipse the Ellipse2D object to be converted */ public Element toSVG(Ellipse2D ellipse) { + if(ellipse.getWidth() < 0 || ellipse.getHeight() < 0){ + return null; + } + if(ellipse.getWidth() == ellipse.getHeight()) return toSVGCircle(ellipse); else @@ -61,19 +72,35 @@ * @param ellipse the Ellipse2D object to be converted to an ellipse */ private Element toSVGEllipse(Ellipse2D ellipse){ - Element svgCircle = - generatorContext.domFactory.createElementNS(SVG_NAMESPACE_URI, - SVG_ELLIPSE_TAG); - svgCircle.setAttributeNS(null, SVG_CX_ATTRIBUTE, - doubleString(ellipse.getX() + - ellipse.getWidth()/2)); - svgCircle.setAttributeNS(null, SVG_CY_ATTRIBUTE, - doubleString(ellipse.getY() + - ellipse.getHeight()/2)); - svgCircle.setAttributeNS(null, SVG_RX_ATTRIBUTE, - doubleString(ellipse.getWidth()/2)); - svgCircle.setAttributeNS(null, SVG_RY_ATTRIBUTE, - doubleString(ellipse.getHeight()/2)); - return svgCircle; + if(ellipse.getWidth() > 0 && ellipse.getHeight() > 0){ + Element svgCircle = + generatorContext.domFactory.createElementNS(SVG_NAMESPACE_URI, + SVG_ELLIPSE_TAG); + svgCircle.setAttributeNS(null, SVG_CX_ATTRIBUTE, + doubleString(ellipse.getX() + + ellipse.getWidth()/2)); + svgCircle.setAttributeNS(null, SVG_CY_ATTRIBUTE, + doubleString(ellipse.getY() + + ellipse.getHeight()/2)); + svgCircle.setAttributeNS(null, SVG_RX_ATTRIBUTE, + doubleString(ellipse.getWidth()/2)); + svgCircle.setAttributeNS(null, SVG_RY_ATTRIBUTE, + doubleString(ellipse.getHeight()/2)); + return svgCircle; + } + else if(ellipse.getWidth() == 0 && ellipse.getHeight() > 0){ + // Degenerate to a line + Line2D line = new Line2D.Double(ellipse.getX(), ellipse.getY(), ellipse.getX(), + ellipse.getY() + ellipse.getHeight()); + return svgLine.toSVG(line); + } + else if(ellipse.getWidth() > 0 && ellipse.getHeight() == 0){ + // Degenerate to a line + Line2D line = new Line2D.Double(ellipse.getX(), ellipse.getY(), + ellipse.getX() + ellipse.getWidth(), + ellipse.getY()); + return svgLine.toSVG(line); + } + return null; } } 1.22 +3 -8 xml-batik/sources/org/apache/batik/svggen/SVGGraphics2D.java Index: SVGGraphics2D.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/svggen/SVGGraphics2D.java,v retrieving revision 1.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- SVGGraphics2D.java 2001/08/29 12:47:08 1.21 +++ SVGGraphics2D.java 2001/09/18 10:47:57 1.22 @@ -44,7 +44,7 @@ * * * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Hardy</a> - * @version $Id: SVGGraphics2D.java,v 1.21 2001/08/29 12:47:08 cjolif Exp $ + * @version $Id: SVGGraphics2D.java,v 1.22 2001/09/18 10:47:57 vhardy Exp $ * @see org.apache.batik.ext.awt.g2d.GraphicContext * @see org.apache.batik.svggen.DOMTreeManager * @see org.apache.batik.svggen.DOMGroupManager @@ -103,8 +103,7 @@ /** * SVG Canvas size */ - private Dimension svgCanvasSize = - new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE); + private Dimension svgCanvasSize; /** * Used to create proper font metrics @@ -126,13 +125,9 @@ } /** - * @param SVG Canvas size + * @param SVG Canvas size. May be null (equivalent to 100%, 100%) */ public final void setSVGCanvasSize(Dimension svgCanvasSize) { - if (svgCanvasSize == null) - generatorCtx.errorHandler. - handleError(new SVGGraphics2DRuntimeException(ERR_CANVAS_SIZE_NULL)); - this.svgCanvasSize = new Dimension(svgCanvasSize); } 1.7 +47 -16 xml-batik/sources/org/apache/batik/svggen/SVGRectangle.java Index: SVGRectangle.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/svggen/SVGRectangle.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- SVGRectangle.java 2001/03/21 14:36:20 1.6 +++ SVGRectangle.java 2001/09/18 10:47:57 1.7 @@ -19,14 +19,20 @@ * object into an SVG element. * * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Hardy</a> - * @version $Id: SVGRectangle.java,v 1.6 2001/03/21 14:36:20 cjolif Exp $ + * @version $Id: SVGRectangle.java,v 1.7 2001/09/18 10:47:57 vhardy Exp $ */ public class SVGRectangle extends SVGGraphicObjectConverter { /** + * Line converter used for degenerate cases + */ + private SVGLine svgLine; + + /** * @param generatorContext used to build Elements */ public SVGRectangle(SVGGeneratorContext generatorContext) { super(generatorContext); + svgLine = new SVGLine(generatorContext); } /** @@ -38,14 +44,20 @@ /** + * In the Java 2D API, arc width/height are used + * as absolute values. + * * @param rect rectangle object to convert to SVG */ public Element toSVG(RoundRectangle2D rect) { Element svgRect = toSVG((RectangularShape)rect); - svgRect.setAttributeNS(null, SVG_RX_ATTRIBUTE, - doubleString(rect.getArcWidth()/2)); - svgRect.setAttributeNS(null, SVG_RY_ATTRIBUTE, - doubleString(rect.getArcHeight()/2)); + if(svgRect != null && svgRect.getTagName() == SVG_RECT_TAG){ + svgRect.setAttributeNS(null, SVG_RX_ATTRIBUTE, + doubleString(Math.abs(rect.getArcWidth()/2))); + svgRect.setAttributeNS(null, SVG_RY_ATTRIBUTE, + doubleString(Math.abs(rect.getArcHeight()/2))); + } + return svgRect; } @@ -54,16 +66,35 @@ * @param rect rectangle object to convert to SVG */ private Element toSVG(RectangularShape rect) { - Element svgRect = - generatorContext.domFactory.createElementNS(SVG_NAMESPACE_URI, - SVG_RECT_TAG); - svgRect.setAttributeNS(null, SVG_X_ATTRIBUTE, doubleString(rect.getX())); - svgRect.setAttributeNS(null, SVG_Y_ATTRIBUTE, doubleString(rect.getY())); - svgRect.setAttributeNS(null, SVG_WIDTH_ATTRIBUTE, - doubleString(rect.getWidth())); - svgRect.setAttributeNS(null, SVG_HEIGHT_ATTRIBUTE, - doubleString(rect.getHeight())); - - return svgRect; + if(rect.getWidth() > 0 && rect.getHeight() > 0){ + Element svgRect = + generatorContext.domFactory.createElementNS(SVG_NAMESPACE_URI, + SVG_RECT_TAG); + svgRect.setAttributeNS(null, SVG_X_ATTRIBUTE, doubleString(rect.getX())); + svgRect.setAttributeNS(null, SVG_Y_ATTRIBUTE, doubleString(rect.getY())); + svgRect.setAttributeNS(null, SVG_WIDTH_ATTRIBUTE, + doubleString(rect.getWidth())); + svgRect.setAttributeNS(null, SVG_HEIGHT_ATTRIBUTE, + doubleString(rect.getHeight())); + + return svgRect; + } + else{ + // Handle degenerate cases + if(rect.getWidth() == 0 && rect.getHeight() > 0){ + // Degenerate to a line + Line2D line = new Line2D.Double(rect.getX(), rect.getY(), rect.getX(), + rect.getY() + rect.getHeight()); + return svgLine.toSVG(line); + } + else if(rect.getWidth() > 0 && rect.getHeight() == 0){ + // Degenerate to a line + Line2D line = new Line2D.Double(rect.getX(), rect.getY(), + rect.getX() + rect.getWidth(), + rect.getY()); + return svgLine.toSVG(line); + } + return null; + } } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]