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