You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by gm...@apache.org on 2003/10/02 02:32:02 UTC

cvs commit: xml-fop/src/java/org/apache/fop/render/awt AWTRenderer.java

gmazza      2003/10/01 17:32:02

  Modified:    src/java/org/apache/fop/area BodyRegion.java
               src/java/org/apache/fop/render/awt AWTRenderer.java
  Log:
  1.  BodyRegion's clone() now including child areas (makes it a bona fide clone()
  function, also AWTRenderer() needs it.)
  2.  Starting implementation of RenderWord() in AWTRenderer; also looking at an
  alternate implementation (storing a series of BufferedImages instead of the area
  tree elements); temporarily storing both strategies in this commit.
  
  Revision  Changes    Path
  1.3       +3 -2      xml-fop/src/java/org/apache/fop/area/BodyRegion.java
  
  Index: BodyRegion.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/area/BodyRegion.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- BodyRegion.java	27 Aug 2003 18:14:45 -0000	1.2
  +++ BodyRegion.java	2 Oct 2003 00:32:02 -0000	1.3
  @@ -159,8 +159,6 @@
   
       /**
        * Clone this object.
  -     * This is only used to clone the current object, the child areas
  -     * are assumed to be null and are not cloned.
        *
        * @return a shallow copy of this object
        */
  @@ -170,6 +168,9 @@
           br.setIPD(getIPD());
           br.columnGap = columnGap;
           br.columnCount = columnCount;
  +        br.beforeFloat = beforeFloat;
  +        br.mainReference = mainReference;
  +        br.footnote = footnote;
           return br;
       }
   }
  
  
  
  1.15      +117 -38   xml-fop/src/java/org/apache/fop/render/awt/AWTRenderer.java
  
  Index: AWTRenderer.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/render/awt/AWTRenderer.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- AWTRenderer.java	21 Sep 2003 20:56:23 -0000	1.14
  +++ AWTRenderer.java	2 Oct 2003 00:32:02 -0000	1.15
  @@ -85,12 +85,17 @@
   import org.apache.fop.area.PageViewport;
   import org.apache.fop.area.RegionViewport;
   import org.apache.fop.area.Trait;
  +import org.apache.fop.area.inline.Word;
  +import org.apache.fop.datatypes.ColorType;
   import org.apache.fop.fo.FOTreeControl;
   import org.apache.fop.fo.properties.BackgroundRepeat;
  +import org.apache.fop.fonts.Typeface;
  +import org.apache.fop.fonts.FontMetrics;
   import org.apache.fop.image.FopImage;
   import org.apache.fop.image.ImageFactory;
   import org.apache.fop.render.AbstractRenderer;
   import org.apache.fop.traits.BorderProps;
  +import org.apache.fop.render.awt.FontMetricsMapper;
   import org.apache.fop.render.awt.viewer.PreviewDialog;
   import org.apache.fop.render.awt.viewer.Translator;
   
  @@ -101,10 +106,13 @@
   
       protected double scaleFactor = 100.0;
       protected int pageNumber = 0;
  -    protected Vector pageViewportList = new java.util.Vector();
  -    protected Vector pageList = new java.util.Vector();
  -    protected BufferedImage currentPageImage = null;
  -
  +    private int pageWidth = 0;
  +    private int pageHeight = 0;
  +    private Vector pageViewportList = new java.util.Vector();
  +    private Vector pageList = new java.util.Vector();
  +    private Vector bufferedImageList = new java.util.Vector();
  +    private BufferedImage currentPageImage = null;
  +    
       /** Font configuration */
       protected Document fontInfo;
   
  @@ -112,33 +120,16 @@
           The InputHandler associated with this Renderer.
           Sent to the PreviewDialog for document reloading.
       */
  -    protected InputHandler inputHandler;
  +    private InputHandler inputHandler;
   
       /**
        * The resource bundle used for AWT messages.
        */
       protected Translator translator = null;
   
  -    protected Map fontNames = new java.util.Hashtable();
  -    protected Map fontStyles = new java.util.Hashtable();
  -    protected Color saveColor = null;
  -
  -    /**
  -     * The current (internal) font name
  -    */
  -    protected String currentFontName;
  -
  -    /**
  -     * The current font size in millipoints
  -     */
  -    protected int currentFontSize;
  -
  -    /**
  -     * The current colour's red, green and blue component
  -     */
  -    protected float currentRed = 0;
  -    protected float currentGreen = 0;
  -    protected float currentBlue = 0;
  +    private Map fontNames = new java.util.Hashtable();
  +    private Map fontStyles = new java.util.Hashtable();
  +    private Color saveColor = null;
   
       /**
        * The preview dialog frame used for display of the documents.
  @@ -158,6 +149,13 @@
           createPreviewDialog(null);
       }
   
  +    /**
  +     * @see org.apache.fop.render.Renderer
  +     */
  +    public boolean supportsOutOfOrder() {
  +        return false;
  +    }
  +
       public Translator getTranslator() {
           return translator;
       }
  @@ -191,6 +189,7 @@
           // empty pageViewportList, in case of a reload from PreviewDialog
           pageViewportList.removeAllElements();
           pageList.removeAllElements();
  +        bufferedImageList.removeAllElements();
           System.out.println("\nRegion Types: 0-Before/Top, 1-Start/Left, 2-Body, 3-End/Right, 4-After/Bottom");
       }
   
  @@ -249,6 +248,11 @@
       public void renderPage(PageViewport pageViewport)  throws IOException, FOPException {
           pageViewportList.add(pageViewport);
           pageList.add(pageViewport.getPage().clone());
  +        bufferedImageList.add(getPageImage(pageViewport));
  +    }
  +
  +    public BufferedImage getBufferedPageImage(int pageNum) throws FOPException {
  +        return (BufferedImage) bufferedImageList.get(pageNum);
       }
   
       /** Generates a desired page from the renderer's page viewport vector.
  @@ -256,6 +260,51 @@
        *  @return the <code>java.awt.image.BufferedImage</code> corresponding to the page
        *  @throws FOPException in case of an out-of-range page number requested
       */
  +    public BufferedImage getPageImage(PageViewport pageViewport) throws FOPException {
  +        Page page = pageViewport.getPage();
  +
  +        Rectangle2D bounds = pageViewport.getViewArea();
  +        pageWidth = (int) Math.round(bounds.getWidth() / 1000f );
  +        pageHeight = (int) Math.round(bounds.getHeight() / 1000f );
  +/*
  +        System.out.println("(Page) X, Y, Width, Height: " + bounds.getX()
  +            + " " + bounds.getY()
  +            + " " + bounds.getWidth()
  +            + " " + bounds.getHeight());
  +*/
  +        currentPageImage =
  +            new BufferedImage((int)((pageWidth * (int)scaleFactor) / 100),
  +                              (int)((pageHeight * (int)scaleFactor) / 100),
  +                              BufferedImage.TYPE_INT_RGB);
  +
  +        Graphics2D graphics = currentPageImage.createGraphics();
  +        graphics.setRenderingHint (RenderingHints.KEY_FRACTIONALMETRICS,
  +                                   RenderingHints.VALUE_FRACTIONALMETRICS_ON);
  +
  +        // transform page based on scale factor supplied
  +        AffineTransform at = graphics.getTransform();
  +        at.scale(scaleFactor / 100.0, scaleFactor / 100.0);
  +        graphics.setTransform(at);
  +
  +        // draw page frame
  +        graphics.setColor(Color.white);
  +        graphics.fillRect(0, 0, pageWidth, pageHeight);
  +        graphics.setColor(Color.black);
  +        graphics.drawRect(-1, -1, pageWidth + 2, pageHeight + 2);
  +        graphics.drawLine(pageWidth + 2, 0, pageWidth + 2, pageHeight + 2);
  +        graphics.drawLine(pageWidth + 3, 1, pageWidth + 3, pageHeight + 3);
  +        graphics.drawLine(0, pageHeight + 2, pageWidth + 2, pageHeight + 2);
  +        graphics.drawLine(1, pageHeight + 3, pageWidth + 3, pageHeight + 3);
  +
  +        renderPageAreas(page);
  +        return currentPageImage;
  +    }
  +
  +        /** Generates a desired page from the renderer's page viewport vector.
  +     * @param pageNum the 0-based page number to generate
  +     *  @return the <code>java.awt.image.BufferedImage</code> corresponding to the page
  +     *  @throws FOPException in case of an out-of-range page number requested
  +    */
       public BufferedImage getPageImage(int pageNum) throws FOPException {
           if (pageNum < 0 || pageNum >= pageViewportList.size()) {
               throw new FOPException("out-of-range page number (" + pageNum
  @@ -266,8 +315,8 @@
           Page page = (Page) pageList.get(pageNum);
   
           Rectangle2D bounds = pageViewport.getViewArea();
  -        int pageWidth = (int) Math.round(bounds.getWidth() / 1000f );
  -        int pageHeight = (int) Math.round(bounds.getHeight() / 1000f );
  +        pageWidth = (int) Math.round(bounds.getWidth() / 1000f );
  +        pageHeight = (int) Math.round(bounds.getHeight() / 1000f );
   /*
           System.out.println("(Page) X, Y, Width, Height: " + bounds.getX()
               + " " + bounds.getY()
  @@ -298,8 +347,6 @@
           graphics.drawLine(0, pageHeight + 2, pageWidth + 2, pageHeight + 2);
           graphics.drawLine(1, pageHeight + 3, pageWidth + 3, pageHeight + 3);
   
  -        currentFontName = "";
  -        currentFontSize = 0;
           renderPageAreas(page);
           return currentPageImage;
       }
  @@ -311,8 +358,6 @@
        * @param region the RegionViewport whose region is to be drawn
        */
       protected void handleRegionTraits(RegionViewport region) {
  -        currentFontName = "";
  -        currentFontSize = 0;
           Rectangle2D viewArea = region.getViewArea();
   
           int startX = (int) Math.round((viewArea.getX() / 1000f)
  @@ -329,11 +374,7 @@
           if (region.getRegion() != null) {
               System.out.print("\nRegion type = " + region.getRegion().getRegionClass());
           }
  -/*        System.out.println("\nView  X, Width, Y, Height: " + viewArea.getX()
  -            + " " + viewArea.getWidth()
  -            + " " + viewArea.getY()
  -            + " " + viewArea.getHeight()
  -            ); */
  +
           System.out.println("  X, Width, Y, Height: " + startX
               + " " + width
               + " " + startY
  @@ -391,8 +432,6 @@
           if (bps != null) {
               int borderWidth = (int) Math.round((bps.width / 1000f) * (scaleFactor / 100f));
               graphics.setColor(bps.color.getAWTColor());
  -//          System.out.println("Border at (" + startx + "," + (starty + height - borderWidth) + 
  -//              ") width, height: (" + (width) + "," + (borderWidth) + ")");
               graphics.fillRect(startx, starty, width, borderWidth);
           }
           bps = (BorderProps) block.getTrait(Trait.BORDER_AFTER);
  @@ -417,5 +456,45 @@
               graphics.fillRect(startx + width - borderWidth, starty, 
                   borderWidth, height);
           }
  +        
  +    }
  +    
  +    /**
  +     * @see org.apache.fop.render.Renderer#renderWord(Word)
  +     */
  +    public void renderWord(Word word) {
  +        System.out.println("In render word: " + word.getWord());
  +
  +        Graphics2D graphics = currentPageImage.createGraphics();
  +        String fontName = (String) word.getTrait(Trait.FONT_NAME);
  +        int size = ((Integer) word.getTrait(Trait.FONT_SIZE)).intValue();
  +//      Typeface f = (Typeface) fontInfo.getFonts().get(fontName);
  +        ColorType ct = (ColorType) word.getTrait(Trait.COLOR);
  +
  +        FontMetricsMapper mapper = (FontMetricsMapper) 
  +            fontInfo.getMetricsFor(fontName);
  +        if (mapper == null) {
  +            mapper = new FontMetricsMapper("MonoSpaced", java.awt.Font.PLAIN,
  +                graphics);
  +        }
  +
  +//      graphics.setColor(ct.getAWTColor());
  +//      graphics.setFont(mapper.getFont(size));
  +        graphics.setColor(java.awt.Color.black);
  +        graphics.setFont(new java.awt.Font("monospaced", java.awt.Font.PLAIN,
  +            10));
  +        
  +        int rx = currentBlockIPPosition;
  +        int bl = currentBPPosition + word.getOffset();
  +
  +        int newx = (int) (rx + 500) / 1000;
  +        int newy = (int) (pageHeight - (bl + 500) / 1000);
  +                
  +        String s = word.getWord();
  +//      graphics.drawString(s, newx, newy);
  +        graphics.drawString(s, 220, 200);
  +
  +        // TODO: render text decorations
  +        currentBlockIPPosition += word.getWidth();
       }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: fop-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: fop-cvs-help@xml.apache.org