Author: acumiskey
Date: Mon Oct 20 03:57:29 2008
New Revision: 706226

URL: http://svn.apache.org/viewvc?rev=706226&view=rev
Log:
* SVG circle drawing improvements in AFPGraphics2D.
* GenericGraphics2DImagePainter becomes a top level class.
* AFPGraphics2DImagePainter implementation to correctly adjust y-axis for AFP.

Added:
    
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/image/loader/batik/GenericGraphics2DImagePainter.java
   (with props)
    
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPImageConverterSVG2G2D.java
   (with props)
Modified:
    
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/image/loader/batik/ImageConverterSVG2G2D.java
    
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPDataObjectFactory.java
    
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPGraphics2D.java
    
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPImageGraphics2DFactory.java
    
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPInfo.java
    
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPSVGHandler.java
    
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPTextHandler.java
    
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/goca/GraphicsSetProcessColor.java
    
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/goca/GraphicsString.java

Added: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/image/loader/batik/GenericGraphics2DImagePainter.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/image/loader/batik/GenericGraphics2DImagePainter.java?rev=706226&view=auto
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/image/loader/batik/GenericGraphics2DImagePainter.java
 (added)
+++ 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/image/loader/batik/GenericGraphics2DImagePainter.java
 Mon Oct 20 03:57:29 2008
@@ -0,0 +1,95 @@
+package org.apache.fop.image.loader.batik;
+
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+import java.awt.geom.Rectangle2D;
+
+import org.apache.batik.bridge.BridgeContext;
+import org.apache.batik.gvt.GraphicsNode;
+import org.apache.xmlgraphics.image.loader.impl.ImageXMLDOM;
+import org.apache.xmlgraphics.java2d.Graphics2DImagePainter;
+
+/**
+ * A generic graphics 2D image painter implementation
+ */
+public class GenericGraphics2DImagePainter implements Graphics2DImagePainter {
+
+    protected final ImageXMLDOM svg;
+    protected final BridgeContext ctx;
+    protected final GraphicsNode root;
+
+    /**
+     * Constructor
+     *
+     * @param svg the svg image dom
+     * @param ctx the bridge context
+     * @param root the graphics node root
+     */
+    public GenericGraphics2DImagePainter(ImageXMLDOM svg, BridgeContext ctx, 
GraphicsNode root) {
+        this.svg = svg;
+        this.ctx = ctx;
+        this.root = root;
+    }
+
+    /**
+     * Initialises the graphics 2d
+     *
+     * @param g2d the graphics 2d
+     * @param area the rectangle drawing area
+     */
+    protected void init(Graphics2D g2d, Rectangle2D area) {
+        // If no viewbox is defined in the svg file, a viewbox of 100x100 is
+        // assumed, as defined in SVGUserAgent.getViewportSize()
+        double tx = area.getX();
+        double ty = area.getY();
+        if (tx != 0 || ty != 0) {
+            g2d.translate(tx, ty);
+        }
+
+        float iw = (float) ctx.getDocumentSize().getWidth();
+        float ih = (float) ctx.getDocumentSize().getHeight();
+        float w = (float) area.getWidth();
+        float h = (float) area.getHeight();
+        float sx = w / iw;
+        float sy = h / ih;
+        if (sx != 1.0 || sy != 1.0) {
+            g2d.scale(sx, sy);
+        }
+    }
+
+    /** [EMAIL PROTECTED] */
+    public void paint(Graphics2D g2d, Rectangle2D area) {
+        init(g2d, area);
+        root.paint(g2d);
+    }
+
+    /** [EMAIL PROTECTED] */
+    public Dimension getImageSize() {
+        return new Dimension(svg.getSize().getWidthMpt(), 
svg.getSize().getHeightMpt());
+    }
+
+    /**
+     * Returns the svg image dom
+     * @return the svg image dom
+     */
+    public ImageXMLDOM getImageXMLDOM() {
+        return svg;
+    }
+
+    /**
+     * Returns the bridge context
+     * @return the bridge context
+     */
+    public BridgeContext getBridgeContext() {
+        return ctx;
+    }
+
+    /**
+     * Returns the graphics root node
+     * @return the graphics root node
+     */
+    public GraphicsNode getRoot() {
+        return root;
+    }
+
+}
\ No newline at end of file

Propchange: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/image/loader/batik/GenericGraphics2DImagePainter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/image/loader/batik/GenericGraphics2DImagePainter.java
------------------------------------------------------------------------------
    svn:keywords = Revision Id

Modified: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/image/loader/batik/ImageConverterSVG2G2D.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/image/loader/batik/ImageConverterSVG2G2D.java?rev=706226&r1=706225&r2=706226&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/image/loader/batik/ImageConverterSVG2G2D.java
 (original)
+++ 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/image/loader/batik/ImageConverterSVG2G2D.java
 Mon Oct 20 03:57:29 2008
@@ -19,10 +19,7 @@
 
 package org.apache.fop.image.loader.batik;
 
-import java.awt.Dimension;
-import java.awt.Graphics2D;
 import java.awt.geom.AffineTransform;
-import java.awt.geom.Rectangle2D;
 import java.util.Map;
 
 import org.apache.batik.bridge.BridgeContext;
@@ -110,59 +107,6 @@
     }
 
     /**
-     * A generic graphics 2D image painter implementation
-     */
-    protected class GenericGraphics2DImagePainter implements 
Graphics2DImagePainter {
-
-        private final ImageXMLDOM svg;
-        private final BridgeContext ctx;
-        private final GraphicsNode root;
-
-        /**
-         * Constructor
-         *
-         * @param svg the svg image dom
-         * @param ctx the bridge context
-         * @param root the graphics node root
-         */
-        public GenericGraphics2DImagePainter(ImageXMLDOM svg, BridgeContext 
ctx, GraphicsNode root) {
-            this.svg = svg;
-            this.ctx = ctx;
-            this.root = root;
-        }
-
-        protected void init(Graphics2D g2d, Rectangle2D area) {
-            // If no viewbox is defined in the svg file, a viewbox of 100x100 
is
-            // assumed, as defined in SVGUserAgent.getViewportSize()
-            double tx = area.getX();
-            double ty = area.getY();
-            if (tx != 0 || ty != 0) {
-                g2d.translate(tx, ty);
-            }
-
-            float iw = (float) ctx.getDocumentSize().getWidth();
-            float ih = (float) ctx.getDocumentSize().getHeight();
-            float w = (float) area.getWidth();
-            float h = (float) area.getHeight();
-            float sx = w / iw;
-            float sy = h / ih;
-            if (sx != 1.0 || sy != 1.0) {
-                g2d.scale(sx, sy);
-            }
-        }
-
-        public void paint(Graphics2D g2d, Rectangle2D area) {
-            init(g2d, area);
-            root.paint(g2d);
-        }
-
-        public Dimension getImageSize() {
-            return new Dimension(svg.getSize().getWidthMpt(), 
svg.getSize().getHeightMpt());
-        }
-
-    }
-
-    /**
      * Creates a Graphics 2D image painter
      *
      * @param svg the svg image dom

Modified: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPDataObjectFactory.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPDataObjectFactory.java?rev=706226&r1=706225&r2=706226&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPDataObjectFactory.java
 (original)
+++ 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPDataObjectFactory.java
 Mon Oct 20 03:57:29 2008
@@ -123,12 +123,17 @@
      * @return a new graphics object
      */
     public GraphicsObject createGraphic(AFPGraphicsObjectInfo 
graphicsObjectInfo) {
+        // set newly created graphics object in g2d
         GraphicsObject graphicsObj = factory.createGraphicsObject();
         AFPGraphics2D g2d = graphicsObjectInfo.getGraphics2D();
         g2d.setGraphicsObject(graphicsObj);
+
+        // paint to graphics object
         Graphics2DImagePainter painter = graphicsObjectInfo.getPainter();
         Rectangle2D area = graphicsObjectInfo.getArea();
         painter.paint(g2d, area);
+
+        // return painted graphics object
         return graphicsObj;
     }
 
@@ -153,7 +158,7 @@
             // object container
             includeObj.setObjectType(IncludeObject.TYPE_OTHER);
 
-            // set mandatory object classification
+            // set mandatory object classification (type other)
             Registry.ObjectType objectType = dataObjectInfo.getObjectType();
             if (objectType != null) {
                 // set object classification

Modified: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPGraphics2D.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPGraphics2D.java?rev=706226&r1=706225&r2=706226&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPGraphics2D.java
 (original)
+++ 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPGraphics2D.java
 Mon Oct 20 03:57:29 2008
@@ -70,6 +70,19 @@
 
     private static final Log log = LogFactory.getLog(AFPGraphics2D.class);
 
+    private static final int X = 0;
+
+    private static final int Y = 1;
+
+    private static final int X1 = 0;
+
+    private static final int Y1 = 1;
+
+    private static final int X2 = 2;
+
+    private static final int Y2 = 3;
+
+
     /** graphics object */
     private GraphicsObject graphicsObj = null;
 
@@ -204,12 +217,14 @@
         if (!fill) {
             graphicsObj.newSegment();
         }
-        Color col = getColor();
-        if (state.setColor(col)) {
-            graphicsObj.setColor(col);
+
+        Color color = getColor();
+        if (state.setColor(color)) {
+            graphicsObj.setColor(color);
         }
 
-        applyStroke(getStroke());
+        Stroke stroke = getStroke();
+        applyStroke(stroke);
 
         if (fill) {
             graphicsObj.beginArea();
@@ -217,47 +232,47 @@
         AffineTransform trans = super.getTransform();
 
         PathIterator iter = shape.getPathIterator(trans);
-        double[] vals = new double[6];
+        double[] dstPts = new double[6];
         int[] coords = null;
         if (shape instanceof Line2D) {
-            iter.currentSegment(vals);
+            iter.currentSegment(dstPts);
             coords = new int[4];
-            coords[0] = (int) Math.round(vals[0]); //x1
-            coords[1] = (int) Math.round(vals[1]); //y1
+            coords[X1] = (int) Math.round(dstPts[X]);
+            coords[Y1] = (int) Math.round(dstPts[Y]);
             iter.next();
-            iter.currentSegment(vals);
-            coords[2] = (int) Math.round(vals[0]); //x2
-            coords[3] = (int) Math.round(vals[1]); //y2
+            iter.currentSegment(dstPts);
+            coords[X2] = (int) Math.round(dstPts[X]);
+            coords[Y2] = (int) Math.round(dstPts[Y]);
             graphicsObj.addLine(coords);
         } else if (shape instanceof Rectangle2D) {
-            iter.currentSegment(vals);
+            iter.currentSegment(dstPts);
             coords = new int[4];
-            coords[2] = (int) Math.round(vals[0]); //x1
-            coords[3] = (int) Math.round(vals[1]); //y1
+            coords[X2] = (int) Math.round(dstPts[X]);
+            coords[Y2] = (int) Math.round(dstPts[Y]);
             iter.next();
             iter.next();
-            iter.currentSegment(vals);
-            coords[0] = (int) Math.round(vals[0]); //x2
-            coords[1] = (int) Math.round(vals[1]); //y2
+            iter.currentSegment(dstPts);
+            coords[X1] = (int) Math.round(dstPts[X]);
+            coords[Y1] = (int) Math.round(dstPts[Y]);
             graphicsObj.addBox(coords);
         } else if (shape instanceof Ellipse2D) {
             Ellipse2D elip = (Ellipse2D) shape;
-            int resolution = info.getResolution();
-            final double factor =  resolution / 100f;
+            double scale = trans.getScaleX();
+            double radiusWidth = elip.getWidth() / 2;
+            double radiusHeight = elip.getHeight() / 2;
             graphicsObj.setArcParams(
-                    (int)Math.round(elip.getWidth() * factor),
-                    (int)Math.round(elip.getHeight() * factor),
+                    (int)Math.round(radiusWidth * scale),
+                    (int)Math.round(radiusHeight * scale),
                     0,
                     0
             );
-            trans.transform(
-                    new double[] {elip.getCenterX(), elip.getCenterY()}, 0,
-                    vals, 0, 1);
+            double[] srcPts = new double[] {elip.getCenterX(), 
elip.getCenterY()};
+            trans.transform(srcPts, 0, dstPts, 0, 1);
             final int mh = 1;
             final int mhr = 0;
             graphicsObj.addFullArc(
-                    (int)Math.round(vals[0]),
-                    (int)Math.round(vals[1]),
+                    (int)Math.round(dstPts[X]),
+                    (int)Math.round(dstPts[Y]),
                     mh,
                     mhr
             );
@@ -268,10 +283,10 @@
                 !iter.isDone(); iter.next()) {
                 // round the coordinate values and combine with current 
position
                 // coordinates
-                int type = iter.currentSegment(vals);
+                int type = iter.currentSegment(dstPts);
                 if (type == PathIterator.SEG_MOVETO) {
-                    openingCoords[0] = currCoords[0] = 
(int)Math.round(vals[0]);
-                    openingCoords[1] = currCoords[1] = 
(int)Math.round(vals[1]);
+                    openingCoords[X] = currCoords[X] = 
(int)Math.round(dstPts[X]);
+                    openingCoords[Y] = currCoords[Y] = 
(int)Math.round(dstPts[Y]);
                 } else {
                     int numCoords;
                     if (type == PathIterator.SEG_LINETO) {
@@ -284,10 +299,10 @@
                         // close of the graphics segment
                         if (type == PathIterator.SEG_CLOSE) {
                             coords = new int[] {
-                                    coords[coords.length - 2],
-                                    coords[coords.length - 1],
-                                    openingCoords[0],
-                                    openingCoords[1]
+                                    coords[coords.length - 2], //prev X
+                                    coords[coords.length - 1], //prev Y
+                                    openingCoords[X],
+                                    openingCoords[Y]
                             };
                             graphicsObj.addLine(coords);
                         } else {
@@ -299,10 +314,10 @@
                     // combine current position coordinates with new graphics
                     // segment coordinates
                     coords = new int[numCoords + 2];
-                    coords[0] = currCoords[0];
-                    coords[1] = currCoords[1];
+                    coords[X] = currCoords[X];
+                    coords[Y] = currCoords[Y];
                     for (int i = 0; i < numCoords; i++) {
-                        coords[i + 2] = (int) Math.round(vals[i]);
+                        coords[i + 2] = (int) Math.round(dstPts[i]);
                     }
                     if (type == PathIterator.SEG_LINETO) {
                         graphicsObj.addLine(coords);
@@ -311,8 +326,8 @@
                         graphicsObj.addFillet(coords);
                     }
                     // update current position coordinates
-                    currCoords[0] = coords[coords.length - 2];
-                    currCoords[1] = coords[coords.length - 1];
+                    currCoords[X] = coords[coords.length - 2];
+                    currCoords[Y] = coords[coords.length - 1];
                 }
             }
         }
@@ -346,12 +361,12 @@
     }
 
     /** [EMAIL PROTECTED] */
-    public void drawString(String s, float x, float y) {
+    public void drawString(String str, float x, float y) {
         try {
             if (customTextHandler != null && !textAsShapes) {
-                customTextHandler.drawString(s, x, y);
+                customTextHandler.drawString(str, x, y);
             } else {
-                fallbackTextHandler.drawString(s, x, y);
+                fallbackTextHandler.drawString(str, x, y);
             }
         } catch (IOException ioe) {
             handleIOException(ioe);
@@ -388,10 +403,6 @@
                                  BufferedImage.TYPE_INT_ARGB);
     }
 
-    private static final int X = 0;
-
-    private static final int Y = 1;
-
     private AFPImageObjectInfo getImageObjectInfo(
             RenderedImage img, int x, int y, int width, int height) throws 
IOException {
         ImageInfo imageInfo = new ImageInfo(null, "image/unknown");
@@ -568,4 +579,4 @@
         this.state = state;
     }
 
-}
\ No newline at end of file
+}

Added: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPImageConverterSVG2G2D.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPImageConverterSVG2G2D.java?rev=706226&view=auto
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPImageConverterSVG2G2D.java
 (added)
+++ 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPImageConverterSVG2G2D.java
 Mon Oct 20 03:57:29 2008
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.render.afp;
+
+import java.awt.Graphics2D;
+import java.awt.geom.Rectangle2D;
+
+import org.apache.batik.bridge.BridgeContext;
+import org.apache.batik.gvt.GraphicsNode;
+import org.apache.fop.image.loader.batik.GenericGraphics2DImagePainter;
+import org.apache.fop.image.loader.batik.ImageConverterSVG2G2D;
+import org.apache.xmlgraphics.image.loader.impl.ImageXMLDOM;
+import org.apache.xmlgraphics.java2d.Graphics2DImagePainter;
+
+public class AFPImageConverterSVG2G2D extends ImageConverterSVG2G2D {
+
+    /** [EMAIL PROTECTED] */
+    protected Graphics2DImagePainter createPainter(
+            final ImageXMLDOM svg, final BridgeContext ctx, final GraphicsNode 
root) {
+        return new AFPGraphics2DImagePainter(svg, ctx, root);
+    }
+
+    private class AFPGraphics2DImagePainter extends 
GenericGraphics2DImagePainter {
+        /**
+         * Constructor
+         *
+         * @param svg the svg image dom
+         * @param ctx the bridge context
+         * @param root the graphics node root
+         */
+        public AFPGraphics2DImagePainter(ImageXMLDOM svg, BridgeContext ctx,
+                GraphicsNode root) {
+            super(svg, ctx, root);
+        }
+
+        /** [EMAIL PROTECTED] */
+        protected void init(Graphics2D g2d, Rectangle2D area) {
+            float iw = (float) ctx.getDocumentSize().getWidth();
+            float ih = (float) ctx.getDocumentSize().getHeight();
+            float w = (float) area.getWidth();
+            float h = (float) area.getHeight();
+            float sx = w / iw;
+            float sy = -(h / ih);
+            if (sx != 1.0 || sy != 1.0) {
+                g2d.scale(sx, sy);
+            }
+
+            double tx = area.getX();
+            double ty = area.getY() - area.getHeight();
+            if (tx != 0 || ty != 0) {
+                g2d.translate(tx, ty);
+            }
+        }
+
+    }
+
+}

Propchange: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPImageConverterSVG2G2D.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPImageConverterSVG2G2D.java
------------------------------------------------------------------------------
    svn:keywords = Revision Id

Modified: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPImageGraphics2DFactory.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPImageGraphics2DFactory.java?rev=706226&r1=706225&r2=706226&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPImageGraphics2DFactory.java
 (original)
+++ 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPImageGraphics2DFactory.java
 Mon Oct 20 03:57:29 2008
@@ -19,11 +19,16 @@
 
 package org.apache.fop.render.afp;
 
+import java.awt.Graphics2D;
 import java.awt.Rectangle;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Rectangle2D;
 import java.io.IOException;
 
+import org.apache.batik.bridge.BridgeContext;
+import org.apache.fop.image.loader.batik.GenericGraphics2DImagePainter;
+import org.apache.fop.svg.SVGUserAgent;
 import org.apache.xmlgraphics.image.loader.impl.ImageGraphics2D;
-import org.apache.xmlgraphics.java2d.Graphics2DImagePainter;
 import org.apache.xmlgraphics.util.MimeConstants;
 
 
@@ -57,15 +62,41 @@
         // set graphics 2d
         AFPGraphics2DAdapter g2dAdapter = afpImageInfo.g2dAdapter;
         AFPGraphics2D g2d = g2dAdapter.getGraphics2D();
+        graphicsObjectInfo.setGraphics2D(g2d);
+
+        // set afp info
         AFPInfo afpInfo = 
AFPSVGHandler.getAFPInfo(afpImageInfo.rendererContext);
         g2d.setAFPInfo(afpInfo);
+
+        // set to default graphic context
         g2d.setGraphicContext(new 
org.apache.xmlgraphics.java2d.GraphicContext());
+
+        // translate to current location
+        AffineTransform at = state.getData().getTransform();
+        g2d.translate(at.getTranslateX(), at.getTranslateY());
+
+        // set afp state
         g2d.setState(state);
-        graphicsObjectInfo.setGraphics2D(g2d);
+
+        // controls whether text painted by Batik is generated using text or 
path operations
+        SVGUserAgent svgUserAgent
+            = new SVGUserAgent(afpImageInfo.rendererContext.getUserAgent(), 
new AffineTransform());
+        BridgeContext ctx = new BridgeContext(svgUserAgent);
+        if (!afpInfo.strokeText()) {
+            AFPTextHandler textHandler = new AFPTextHandler(g2d);
+            g2d.setCustomTextHandler(textHandler);
+            AFPTextPainter textPainter = new AFPTextPainter(textHandler);
+            ctx.setTextPainter(textPainter);
+            AFPTextElementBridge textElementBridge = new 
AFPTextElementBridge(textPainter);
+            ctx.putBridge(textElementBridge);
+        }
 
         // set painter
         ImageGraphics2D imageG2D = (ImageGraphics2D)afpImageInfo.img;
-        Graphics2DImagePainter painter = imageG2D.getGraphics2DImagePainter();
+        GenericGraphics2DImagePainter painter
+            = 
(GenericGraphics2DImagePainter)imageG2D.getGraphics2DImagePainter();
+        painter = new AFPGraphics2DImagePainter(painter);
+        imageG2D.setGraphics2DImagePainter(painter);
         graphicsObjectInfo.setPainter(painter);
 
         // set object area
@@ -76,4 +107,35 @@
         return graphicsObjectInfo;
     }
 
+    private class AFPGraphics2DImagePainter extends 
GenericGraphics2DImagePainter {
+        /**
+         * Copy constructor
+         *
+         * @param painter a graphics 2D image painter
+         */
+        public AFPGraphics2DImagePainter(GenericGraphics2DImagePainter 
painter) {
+            super(painter.getImageXMLDOM(), painter.getBridgeContext(), 
painter.getRoot());
+        }
+
+        /** [EMAIL PROTECTED] */
+        protected void init(Graphics2D g2d, Rectangle2D area) {
+            double tx = area.getX();
+            double ty = area.getHeight() - area.getY();
+            if (tx != 0 || ty != 0) {
+                g2d.translate(tx, ty);
+            }
+
+            float iw = (float) ctx.getDocumentSize().getWidth();
+            float ih = (float) ctx.getDocumentSize().getHeight();
+            float w = (float) area.getWidth();
+            float h = (float) area.getHeight();
+            float sx = w / iw;
+            float sy = -(h / ih);
+            if (sx != 1.0 || sy != 1.0) {
+                g2d.scale(sx, sy);
+            }
+        }
+
+    }
+
 }

Modified: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPInfo.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPInfo.java?rev=706226&r1=706225&r2=706226&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPInfo.java
 (original)
+++ 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPInfo.java
 Mon Oct 20 03:57:29 2008
@@ -245,6 +245,19 @@
     }
 
     /**
+     * Returns true if text should be stroked when painted
+     *
+     * @return true if text should be stroked when painted
+     */
+    public boolean strokeText() {
+        boolean strokeText = false;
+        if (handlerConfiguration != null) {
+            strokeText = handlerConfiguration.getChild("stroke-text", 
true).getValueAsBoolean(strokeText);
+        }
+        return strokeText;
+    }
+
+    /**
      * Sets the resource information
      *
      * @param resourceInfo the resource information

Modified: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPSVGHandler.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPSVGHandler.java?rev=706226&r1=706225&r2=706226&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPSVGHandler.java
 (original)
+++ 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPSVGHandler.java
 Mon Oct 20 03:57:29 2008
@@ -167,20 +167,12 @@
         AFPBatikGraphicsObjectPainter painter = new 
AFPBatikGraphicsObjectPainter(g2d);
         (graphicsObjectInfo).setPainter(painter);
 
-        boolean strokeText = false;
-        Configuration cfg = afpInfo.getHandlerConfiguration();
-        if (cfg != null) {
-            strokeText = cfg.getChild("stroke-text", 
true).getValueAsBoolean(strokeText);
-        }
+        // Controls whether text painted by Batik is generated using text or 
path operations
         SVGUserAgent svgUserAgent
             = new SVGUserAgent(context.getUserAgent(), new AffineTransform());
-
         BridgeContext ctx = new BridgeContext(svgUserAgent);
-        AFPTextHandler afpTextHandler = null;
-
-        //Controls whether text painted by Batik is generated using text or 
path operations
-        if (!strokeText) {
-            afpTextHandler = new AFPTextHandler(g2d);
+        if (!afpInfo.strokeText()) {
+            AFPTextHandler afpTextHandler = new AFPTextHandler(g2d);
             g2d.setCustomTextHandler(afpTextHandler);
             AFPTextPainter textPainter = new AFPTextPainter(afpTextHandler);
             ctx.setTextPainter(textPainter);

Modified: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPTextHandler.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPTextHandler.java?rev=706226&r1=706225&r2=706226&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPTextHandler.java
 (original)
+++ 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/AFPTextHandler.java
 Mon Oct 20 03:57:29 2008
@@ -28,7 +28,6 @@
 import org.apache.fop.fonts.FontInfo;
 import org.apache.fop.render.afp.fonts.AFPFont;
 import org.apache.fop.render.afp.modca.GraphicsObject;
-
 import org.apache.xmlgraphics.java2d.TextHandler;
 
 /**
@@ -41,12 +40,12 @@
     private static Log log = LogFactory.getLog(AFPTextHandler.class);
 
     private AFPGraphics2D g2d = null;
-        
+
     /** Overriding FontState */
     protected Font overrideFont = null;
 
     /** current state */
-    private AFPState afpState = null;
+    private AFPState state = null;
 
     /**
      * Main constructor.
@@ -54,9 +53,9 @@
      */
     public AFPTextHandler(AFPGraphics2D g2d) {
         this.g2d = g2d;
-        this.afpState = g2d.getAFPInfo().getState();
+        this.state = g2d.getAFPInfo().getState();
     }
-    
+
     /**
      * Return the font information associated with this object
      * @return the FontInfo object
@@ -64,25 +63,25 @@
     public FontInfo getFontInfo() {
         return g2d.getAFPInfo().getFontInfo();
     }
-    
+
     /**
      * Add a text string to the current data object of the AFP datastream.
      * The text is painted using text operations.
-     * [EMAIL PROTECTED] 
+     * [EMAIL PROTECTED]
      */
     public void drawString(String str, float x, float y) throws IOException {
         log.debug("drawString() str=" + str + ", x=" + x + ", y=" + y);
         GraphicsObject graphicsObj = g2d.getGraphicsObject();
         Color col = g2d.getColor();
-        if (afpState.setColor(col)) {
+        if (state.setColor(col)) {
             graphicsObj.setColor(col);
         }
         if (overrideFont != null) {
             FontInfo fontInfo = getFontInfo();
-            AFPPageFonts pageFonts = afpState.getPageFonts();
+            AFPPageFonts pageFonts = state.getPageFonts();
             String internalFontName = overrideFont.getFontName();
             int fontSize = overrideFont.getFontSize();
-            if (afpState.setFontName(internalFontName) || 
afpState.setFontSize(fontSize)) {
+            if (state.setFontName(internalFontName) || 
state.setFontSize(fontSize)) {
                 AFPFont font = 
(AFPFont)fontInfo.getFonts().get(internalFontName);
                 AFPFontAttributes afpFontAttributes = pageFonts.registerFont(
                         internalFontName,
@@ -90,17 +89,17 @@
                         fontSize
                 );
                 int fontReference = afpFontAttributes.getFontReference();
-                graphicsObj.setCharacterSet(fontReference);                
+                graphicsObj.setCharacterSet(fontReference);
             }
         }
-        graphicsObj.addString(str, (int)Math.round(x), (int)Math.round(y));
+        graphicsObj.addString(str, Math.round(x), Math.round(y));
     }
-    
+
     /**
      * Sets the overriding font.
      * @param overrideFont Overriding Font to set
      */
     public void setOverrideFont(Font overrideFont) {
-        this.overrideFont = overrideFont;       
-    }    
+        this.overrideFont = overrideFont;
+    }
 }

Modified: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/goca/GraphicsSetProcessColor.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/goca/GraphicsSetProcessColor.java?rev=706226&r1=706225&r2=706226&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/goca/GraphicsSetProcessColor.java
 (original)
+++ 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/goca/GraphicsSetProcessColor.java
 Mon Oct 20 03:57:29 2008
@@ -23,22 +23,21 @@
 import java.awt.color.ColorSpace;
 
 import org.apache.fop.render.afp.modca.AbstractPreparedAFPObject;
-import org.apache.fop.render.afp.modca.GraphicsObject;
 
 /**
  * Sets the current processing color for the following GOCA structured fields
  */
 public class GraphicsSetProcessColor extends AbstractPreparedAFPObject {
     /** the color to set */
-    private final Color col;
+    private final Color color;
 
     /**
      * Main constructor
      *
-     * @param col the color to set
+     * @param color the color to set
      */
-    public GraphicsSetProcessColor(Color col) {
-        this.col = col;
+    public GraphicsSetProcessColor(Color color) {
+        this.color = color;
         prepareData();
     }
 
@@ -46,18 +45,18 @@
     protected void prepareData() {
         // COLSPCE
         byte colspace;
-        int colSpaceType = col.getColorSpace().getType();
+        int colSpaceType = color.getColorSpace().getType();
         if (colSpaceType == ColorSpace.TYPE_CMYK) {
             colspace = 0x04;
         } else if (colSpaceType == ColorSpace.TYPE_RGB) {
             colspace = 0x01;
         } else {
-            GraphicsObject.log.error("unsupported colorspace " + colSpaceType);
+            log.error("unsupported colorspace " + colSpaceType);
             colspace = 0x01;
         }
 
         // COLSIZE(S)
-        float[] colcomp = col.getColorComponents(null);
+        float[] colcomp = color.getColorComponents(null);
         byte[] colsizes = new byte[] {0x00, 0x00, 0x00, 0x00};
         for (int i = 0; i < colcomp.length; i++) {
             colsizes[i] = (byte)8;
@@ -85,6 +84,6 @@
 
     /** [EMAIL PROTECTED] */
     public String toString() {
-        return "GraphicsSetProcessColor(col=" + col + ")";
+        return "GraphicsSetProcessColor(col=" + color + ")";
     }
 }
\ No newline at end of file

Modified: 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/goca/GraphicsString.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/goca/GraphicsString.java?rev=706226&r1=706225&r2=706226&view=diff
==============================================================================
--- 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/goca/GraphicsString.java
 (original)
+++ 
xmlgraphics/fop/branches/Temp_AFPGOCAResources/src/java/org/apache/fop/render/afp/goca/GraphicsString.java
 Mon Oct 20 03:57:29 2008
@@ -23,7 +23,6 @@
 
 import org.apache.fop.render.afp.AFPConstants;
 import org.apache.fop.render.afp.modca.AbstractPreparedAFPObject;
-import org.apache.fop.render.afp.modca.GraphicsObject;
 import org.apache.fop.render.afp.tools.BinaryUtils;
 
 /**
@@ -81,7 +80,7 @@
         try {
             strData = str.getBytes(AFPConstants.EBCIDIC_ENCODING);
         } catch (UnsupportedEncodingException ex) {
-            GraphicsObject.log.error("unsupported encoding: " + 
ex.getMessage());
+            log.error("unsupported encoding: " + ex.getMessage());
         }
         int len = strData.length;
         if (fromCurrentPosition) {



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to