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/09/01 03:28:51 UTC
cvs commit: xml-fop/src/java/org/apache/fop/rtf/renderer RTFHandler.java
gmazza 2003/08/31 18:28:51
Modified: src/java/org/apache/fop/area CachedRenderPagesModel.java
src/java/org/apache/fop/datatypes ColorType.java
src/java/org/apache/fop/fo PropertyManager.java
src/java/org/apache/fop/render AbstractRenderer.java
src/java/org/apache/fop/render/awt AWTRenderer.java
src/java/org/apache/fop/render/pdf PDFRenderer.java
src/java/org/apache/fop/render/ps PSRenderer.java
src/java/org/apache/fop/rtf/renderer RTFHandler.java
Log:
1. Partial implementation of fo:region-xxx and background-color property
in AWTRenderer.
2. ColorType has a new getAWTColor() method, also alpha() function renamed
to getAlpha(). Definition of Alpha values switched to make consistent with
java.awt.Color (i.e., 0 is transparent and 1 is opaque).
3. AbstractRenderer's handleViewportTraits() renamed to handleRegionTraits()
to lesson confusion (FOP has three types of viewports--
Page, Region, and Block--handleViewportTraits() was only good for Region.)
Revision Changes Path
1.2 +1 -1 xml-fop/src/java/org/apache/fop/area/CachedRenderPagesModel.java
Index: CachedRenderPagesModel.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/area/CachedRenderPagesModel.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- CachedRenderPagesModel.java 11 Mar 2003 13:05:27 -0000 1.1
+++ CachedRenderPagesModel.java 1 Sep 2003 01:28:51 -0000 1.2
@@ -68,7 +68,7 @@
* A simple cached render pages model.
* If the page is prepared for later rendering then this saves
* the page contents to a file and once the page is resolved
- * the contents a reloaded.
+ * the contents are reloaded.
*/
public class CachedRenderPagesModel extends RenderPagesModel {
private Map pageMap = new HashMap();
1.3 +20 -9 xml-fop/src/java/org/apache/fop/datatypes/ColorType.java
Index: ColorType.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/datatypes/ColorType.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ColorType.java 5 Jul 2003 03:23:23 -0000 1.2
+++ ColorType.java 1 Sep 2003 01:28:51 -0000 1.3
@@ -50,6 +50,7 @@
*/
package org.apache.fop.datatypes;
+import java.awt.Color;
import java.io.Serializable;
import java.util.StringTokenizer;
@@ -61,22 +62,24 @@
/**
* the red component
*/
- protected float red;
+ protected float red = 0f;
/**
* the green component
*/
- protected float green;
+ protected float green = 0f;
/**
* the blue component
*/
- protected float blue;
+ protected float blue = 0f;
/**
- * the alpha component
+ * the alpha component (indicator of opaque-ness)
+ * 0.0 - 1.0; 0.0 is completely transparent; 1.0 is completely opaque
+ * see definition at http://java.sun.com/j2se/1.3/docs/api/java/awt/Color.html
*/
- protected float alpha = 0;
+ protected float alpha = 1f;
/**
* Main constructor
@@ -177,7 +180,7 @@
this.red = 0;
this.green = 0;
this.blue = 0;
- this.alpha = 1;
+ this.alpha = 0;
} else {
boolean found = false;
for (int count = 0; count < NAMES.length; count++) {
@@ -225,11 +228,19 @@
}
/**
- * Returns the alpha (transparency) component of the color.
- * @return float a value between 0.0 and 1.0
+ * Returns the alpha (degree of opaque-ness) component of the color.
+ * @return float a value between 0.0 (fully transparent) and 1.0 (fully opaque)
*/
- public float alpha() {
+ public float getAlpha() {
return this.alpha;
+ }
+
+ /**
+ * Returns an AWT instance of this color
+ * @return float the AWT color represented by this ColorType instance
+ */
+ public Color getAWTColor() {
+ return new Color(this.red, this.green, this.blue, this.alpha);
}
/**
1.12 +1 -1 xml-fop/src/java/org/apache/fop/fo/PropertyManager.java
Index: PropertyManager.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/PropertyManager.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- PropertyManager.java 24 Aug 2003 17:46:10 -0000 1.11
+++ PropertyManager.java 1 Sep 2003 01:28:51 -0000 1.12
@@ -337,7 +337,7 @@
CommonBackground bp = new CommonBackground();
bp.backAttachment = properties.get("background-attachment").getEnum();
bp.backColor = properties.get("background-color").getColorType();
- if (bp.backColor.alpha() == 1) {
+ if (bp.backColor.getAlpha() == 0) {
bp.backColor = null;
}
1.11 +6 -7 xml-fop/src/java/org/apache/fop/render/AbstractRenderer.java
Index: AbstractRenderer.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/render/AbstractRenderer.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- AbstractRenderer.java 28 Aug 2003 17:27:42 -0000 1.10
+++ AbstractRenderer.java 1 Sep 2003 01:28:51 -0000 1.11
@@ -311,7 +311,7 @@
startVParea(region.getCTM());
// do after starting viewport area
- handleViewportTraits(port);
+ handleRegionTraits(port);
if (region.getRegionClass() == Region.BODY_CODE) {
renderBodyRegion((BodyRegion) region);
} else {
@@ -329,13 +329,12 @@
protected void startVParea(CTM ctm) { }
/**
- * Handle viewport traits.
- * This should be overridden to draw border and background
- * traits for the viewport area.
- *
- * @param rv the region viewport area
+ * Handle the traits for a region
+ * This is used to draw the traits for the given page region
+ * (see Sect. 6.4.1.2 of XSL-FO spec.)
+ * @param rv the RegionViewport whose region is to be drawn
*/
- protected void handleViewportTraits(RegionViewport rv) {
+ protected void handleRegionTraits(RegionViewport rv) {
// draw border and background
}
1.10 +129 -8 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.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- AWTRenderer.java 30 Aug 2003 21:14:52 -0000 1.9
+++ AWTRenderer.java 1 Sep 2003 01:28:51 -0000 1.10
@@ -86,9 +86,15 @@
import org.apache.fop.area.Page;
import org.apache.fop.area.PageViewport;
import org.apache.fop.area.RegionViewport;
+import org.apache.fop.area.Trait;
+import org.apache.fop.datatypes.ColorType;
import org.apache.fop.fo.FOTreeControl;
+import org.apache.fop.fo.properties.BackgroundRepeat;
import org.apache.fop.fonts.Font;
+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.viewer.PreviewDialog;
import org.apache.fop.viewer.Translator;
@@ -100,6 +106,8 @@
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;
/** Font configuration */
protected Document fontInfo;
@@ -186,6 +194,7 @@
throws IOException {
// empty pageViewportList, in case of a reload from PreviewDialog
pageViewportList.removeAllElements();
+ pageList.removeAllElements();
}
public void stopRenderer()
@@ -242,6 +251,7 @@
*/
public void renderPage(PageViewport pageViewport) throws IOException, FOPException {
pageViewportList.add(pageViewport);
+ pageList.add(pageViewport.getPage().clone());
}
/** Generates a desired page from the renderer's page viewport vector.
@@ -256,18 +266,23 @@
+ " page(s) available.");
}
PageViewport pageViewport = (PageViewport) pageViewportList.get(pageNum);
- Page page = pageViewport.getPage();
+ Page page = (Page) pageList.get(pageNum);
Rectangle2D bounds = pageViewport.getViewArea();
int pageWidth = (int)((float) bounds.getWidth() / 1000f + .5);
int pageHeight = (int)((float) bounds.getHeight() / 1000f + .5);
-
- BufferedImage pageImage =
+/*
+ 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 = pageImage.createGraphics();
+ Graphics2D graphics = currentPageImage.createGraphics();
graphics.setRenderingHint (RenderingHints.KEY_FRACTIONALMETRICS,
RenderingHints.VALUE_FRACTIONALMETRICS_ON);
@@ -286,10 +301,116 @@
graphics.drawLine(0, pageHeight + 2, pageWidth + 2, pageHeight + 2);
graphics.drawLine(1, pageHeight + 3, pageWidth + 3, pageHeight + 3);
- this.currentFontName = "";
- this.currentFontSize = 0;
-// renderPageAreas(page);
- return pageImage;
+ currentFontName = "";
+ currentFontSize = 0;
+ renderPageAreas(page);
+ return currentPageImage;
}
+ /**
+ * Handle the traits for a region
+ * This is used to draw the traits for the given page region
+ * (see Sect. 6.4.1.2 of XSL-FO spec.)
+ * @param region the RegionViewport whose region is to be drawn
+ */
+ protected void handleRegionTraits(RegionViewport region) {
+ currentFontName = "";
+ currentFontSize = 0;
+ Rectangle2D viewArea = region.getViewArea();
+/*
+ if (region.getRegion() != null) {
+ System.out.print("Region type = " + region.getRegion().getRegionClass());
+ }
+ System.out.println(" X, Y, Width, Height: " + viewArea.getX()
+ + " " + viewArea.getY()
+ + " " + viewArea.getWidth()
+ + " " + viewArea.getHeight());
+*/
+ int startX = (int)(((float) viewArea.getX() / 1000f + .5)
+ * (scaleFactor / 100f));
+ int startY = (int)(((float) viewArea.getY() / 1000f + .5)
+ * (scaleFactor / 100f));
+ int width = (int)(((float) viewArea.getWidth() / 1000f + .5)
+ * (scaleFactor / 100f));
+ int height = (int)(((float) viewArea.getHeight() / 1000f + .5)
+ * (scaleFactor / 100f));
+
+ drawBackAndBorders(region, startX, startY, width, height);
+ }
+
+ /**
+ * Draw the background and borders.
+ * This draws the background and border traits for an area given
+ * the position.
+ *
+ * @param block the area to get the traits from
+ * @param startx the start x position
+ * @param starty the start y position
+ * @param width the width of the area
+ * @param height the height of the area
+ */
+ protected void drawBackAndBorders(Area block,
+ int startx, int starty,
+ int width, int height) {
+
+ // draw background then border
+ Graphics2D graphics = currentPageImage.createGraphics();
+ Trait.Background back;
+ back = (Trait.Background) block.getTrait(Trait.BACKGROUND);
+ if (back != null) {
+
+ if (back.getColor() != null) {
+ graphics.setColor(back.getColor().getAWTColor());
+ graphics.fillRect(startx, starty, width, height);
+ }
+ if (back.getURL() != null) { // TODO: implement
+ ImageFactory fact = ImageFactory.getInstance();
+ FopImage fopimage = fact.getImage(back.getURL(), userAgent);
+ if (fopimage != null && fopimage.load(FopImage.DIMENSIONS, userAgent)) {
+ if (back.getRepeat() == BackgroundRepeat.REPEAT) {
+ // create a pattern for the image
+ } else {
+ // place once
+ Rectangle2D pos;
+ pos = new Rectangle2D.Float((startx + back.getHoriz()) * 1000,
+ (starty + back.getVertical()) * 1000,
+ fopimage.getWidth() * 1000,
+ fopimage.getHeight() * 1000);
+// putImage(back.getURL(), pos);
+ }
+ }
+ }
+ }
+
+ BorderProps bps = (BorderProps) block.getTrait(Trait.BORDER_BEFORE);
+ if (bps != null) {
+ int endx = startx + width;
+ int bwidth = bps.width;
+ graphics.setColor(bps.color.getAWTColor());
+ graphics.drawLine(startx, starty + bwidth / 2, endx, starty + bwidth / 2);
+ }
+ bps = (BorderProps) block.getTrait(Trait.BORDER_START);
+ if (bps != null) {
+ int endy = starty + height;
+ int bwidth = bps.width;
+ graphics.setColor(bps.color.getAWTColor());
+ graphics.drawLine(startx + bwidth / 2, starty, startx + bwidth / 2, endy);
+ }
+ bps = (BorderProps) block.getTrait(Trait.BORDER_AFTER);
+ if (bps != null) {
+ int sy = starty + height;
+ int endx = startx + width;
+ int bwidth = bps.width;
+ graphics.setColor(bps.color.getAWTColor());
+ graphics.drawLine(startx, sy - bwidth / 2, endx, sy - bwidth / 2);
+ }
+ bps = (BorderProps) block.getTrait(Trait.BORDER_END);
+ if (bps != null) {
+ int sx = startx + width;
+ int endy = starty + height;
+ int bwidth = bps.width;
+ graphics.setColor(bps.color.getAWTColor());
+ graphics.drawLine(sx - bwidth / 2, starty, sx - bwidth / 2, endy);
+ }
+ }
}
1.15 +40 -41 xml-fop/src/java/org/apache/fop/render/pdf/PDFRenderer.java
Index: PDFRenderer.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/render/pdf/PDFRenderer.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- PDFRenderer.java 28 Aug 2003 17:27:42 -0000 1.14
+++ PDFRenderer.java 1 Sep 2003 01:28:51 -0000 1.15
@@ -67,46 +67,21 @@
import org.apache.avalon.framework.configuration.ConfigurationException;
// FOP
-import org.apache.fop.render.PrintRenderer;
-import org.apache.fop.render.RendererContext;
-import org.apache.fop.apps.FOUserAgent;
-import org.apache.fop.image.FopImage;
-import org.apache.fop.image.XMLImage;
-import org.apache.fop.image.ImageFactory;
import org.apache.fop.apps.FOPException;
+import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.apps.Version;
-import org.apache.fop.fo.properties.RuleStyle;
-import org.apache.fop.fo.properties.BackgroundRepeat;
-import org.apache.fop.fonts.Typeface;
-import org.apache.fop.fonts.FontMetrics;
-import org.apache.fop.pdf.PDFEncryptionManager;
-import org.apache.fop.pdf.PDFFilterList;
-import org.apache.fop.pdf.PDFStream;
-import org.apache.fop.pdf.PDFDocument;
-import org.apache.fop.pdf.PDFInfo;
-import org.apache.fop.pdf.PDFResources;
-import org.apache.fop.pdf.PDFResourceContext;
-import org.apache.fop.pdf.PDFText;
-import org.apache.fop.pdf.PDFXObject;
-import org.apache.fop.pdf.PDFPage;
-import org.apache.fop.pdf.PDFState;
-import org.apache.fop.pdf.PDFLink;
-import org.apache.fop.pdf.PDFOutline;
-import org.apache.fop.pdf.PDFAnnotList;
-import org.apache.fop.pdf.PDFColor;
-import org.apache.fop.area.extensions.BookmarkData;
-
-import org.apache.fop.area.Trait;
-import org.apache.fop.area.TreeExt;
-import org.apache.fop.area.CTM;
-import org.apache.fop.area.Title;
-import org.apache.fop.area.PageViewport;
-import org.apache.fop.area.Page;
-import org.apache.fop.area.RegionViewport;
import org.apache.fop.area.Area;
import org.apache.fop.area.Block;
import org.apache.fop.area.BlockViewport;
+import org.apache.fop.area.CTM;
import org.apache.fop.area.LineArea;
+import org.apache.fop.area.Page;
+import org.apache.fop.area.PageViewport;
+import org.apache.fop.area.RegionViewport;
+import org.apache.fop.area.Title;
+import org.apache.fop.area.Trait;
+import org.apache.fop.area.TreeExt;
+import org.apache.fop.area.extensions.BookmarkData;
import org.apache.fop.area.inline.Character;
import org.apache.fop.area.inline.Word;
import org.apache.fop.area.inline.Viewport;
@@ -114,10 +89,34 @@
import org.apache.fop.area.inline.Image;
import org.apache.fop.area.inline.Leader;
import org.apache.fop.area.inline.InlineParent;
+import org.apache.fop.datatypes.ColorType;
+import org.apache.fop.fo.properties.BackgroundRepeat;
+import org.apache.fop.fo.properties.RuleStyle;
+import org.apache.fop.fonts.Typeface;
import org.apache.fop.fonts.Font;
+import org.apache.fop.fonts.FontMetrics;
+import org.apache.fop.image.FopImage;
+import org.apache.fop.image.ImageFactory;
+import org.apache.fop.image.XMLImage;
+import org.apache.fop.pdf.PDFAnnotList;
+import org.apache.fop.pdf.PDFColor;
+import org.apache.fop.pdf.PDFDocument;
+import org.apache.fop.pdf.PDFEncryptionManager;
+import org.apache.fop.pdf.PDFFilterList;
+import org.apache.fop.pdf.PDFInfo;
+import org.apache.fop.pdf.PDFLink;
+import org.apache.fop.pdf.PDFOutline;
+import org.apache.fop.pdf.PDFPage;
+import org.apache.fop.pdf.PDFResourceContext;
+import org.apache.fop.pdf.PDFResources;
+import org.apache.fop.pdf.PDFState;
+import org.apache.fop.pdf.PDFStream;
+import org.apache.fop.pdf.PDFText;
+import org.apache.fop.pdf.PDFXObject;
+import org.apache.fop.render.PrintRenderer;
+import org.apache.fop.render.RendererContext;
import org.apache.fop.traits.BorderProps;
-import org.apache.fop.datatypes.ColorType;
-import org.apache.fop.apps.*;
+
/*
todo:
@@ -494,12 +493,12 @@
}
/**
- * Handle the viewport traits.
- * This is used to draw the traits for a viewport.
- *
- * @param region the viewport region to handle
+ * Handle the traits for a region
+ * This is used to draw the traits for the given page region
+ * (see Sect. 6.4.1.2 of XSL-FO spec.)
+ * @param region the RegionViewport whose region is to be drawn
*/
- protected void handleViewportTraits(RegionViewport region) {
+ protected void handleRegionTraits(RegionViewport region) {
currentFontName = "";
float startx = 0;
float starty = 0;
1.14 +5 -5 xml-fop/src/java/org/apache/fop/render/ps/PSRenderer.java
Index: PSRenderer.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/render/ps/PSRenderer.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- PSRenderer.java 28 Aug 2003 17:27:42 -0000 1.13
+++ PSRenderer.java 1 Sep 2003 01:28:51 -0000 1.14
@@ -652,12 +652,12 @@
}
/**
- * Handle the viewport traits.
- * This is used to draw the traits for a viewport.
- *
- * @param region the viewport region to handle
+ * Handle the traits for a region
+ * This is used to draw the traits for the given page region
+ * (see Sect. 6.4.1.2 of XSL-FO spec.)
+ * @param region the RegionViewport whose region is to be drawn
*/
- protected void handleViewportTraits(RegionViewport region) {
+ protected void handleRegionTraits(RegionViewport region) {
currentFontName = "";
float startx = 0;
float starty = 0;
1.16 +1 -1 xml-fop/src/java/org/apache/fop/rtf/renderer/RTFHandler.java
Index: RTFHandler.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/rtf/renderer/RTFHandler.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- RTFHandler.java 20 Aug 2003 18:09:46 -0000 1.15
+++ RTFHandler.java 1 Sep 2003 01:28:51 -0000 1.16
@@ -433,7 +433,7 @@
PDF output, so we will look for the default here & change it to
white. */
if ((fopValue.getRed() == 0) && (fopValue.getGreen() == 0)
- && (fopValue.getBlue() == 0) && (fopValue.alpha() == 1)) {
+ && (fopValue.getBlue() == 0) && (fopValue.getAlpha() == 0)) {
rtfColor = RtfColorTable.getInstance().getColorNumber("white");
} else {
rtfColor = convertFOPColorToRTF(fopValue);
---------------------------------------------------------------------
To unsubscribe, e-mail: fop-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: fop-cvs-help@xml.apache.org