]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
added support for background-color
authorjtauber <jtauber@unknown>
Sat, 27 Nov 1999 10:11:39 +0000 (10:11 +0000)
committerjtauber <jtauber@unknown>
Sat, 27 Nov 1999 10:11:39 +0000 (10:11 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@193248 13f79535-47bb-0310-9956-ffa450edef68

13 files changed:
STATUS
src/codegen/properties.xml
src/org/apache/fop/datatypes/ColorType.java
src/org/apache/fop/fo/PropertyListBuilder.java
src/org/apache/fop/fo/flow/Block.java
src/org/apache/fop/fo/flow/DisplayGraphic.java
src/org/apache/fop/fo/flow/DisplayRule.java
src/org/apache/fop/fo/flow/Table.java
src/org/apache/fop/fo/flow/TableBody.java
src/org/apache/fop/fo/flow/TableCell.java
src/org/apache/fop/fo/flow/TableRow.java
src/org/apache/fop/layout/Area.java
src/org/apache/fop/render/pdf/PDFRenderer.java

diff --git a/STATUS b/STATUS
index 5499d011c1979f399d9e0abcfe7dd8fea1d347f2..83dad3a0d69fbc8d7557c4f3029221e0d6f9e882 100644 (file)
--- a/STATUS
+++ b/STATUS
@@ -12,7 +12,8 @@ Get images working
 [DONE]Incorporate Eric Schaeffer's fix to tables in static-content
 [DONE] Incorporate Kelly Campell's fixes to GifJpegImage
 [PARTIAL] Incorporate Eric Schaeffer's further table fixes
-Incorporate Eric Schaeffer's background colour implementation
+[DONE] Incorporate Eric Schaeffer's background colour implementation
+       (actually used different approach with background colour as trait)
 
 Other Bugs to fix:
 
index 3c18505c0ad7ca60b3b8abef01373eee873d397c..647adf33b0dd9024535c0af47c9b7f5fb4f3e438 100644 (file)
     </datatype>
     <default>false</default>
   </property>
+  <property>
+    <name>background-color</name>
+    <class-name>BackgroundColor</class-name>
+    <inherited>false</inherited>
+    <datatype>ColorType</datatype>
+    <default>transparent</default>
+  </property>
 </property-list>
 
index 2049a8f7c4f1e3cb2c845ca21f58fd2eb70d587c..5c99d044a260f5bc694c0fe23e48d35dabb5d6e2 100644 (file)
@@ -22,7 +22,7 @@
     Alternately, this  acknowledgment may  appear in the software itself,  if
     and wherever such third-party acknowledgments normally appear.
  
- 4. The names "Fop" and  "Apache Software Foundation"  must not be used to
+ 4. The names "FOP" and  "Apache Software Foundation"  must not be used to
     endorse  or promote  products derived  from this  software without  prior
     written permission. For written permission, please contact
     apache@apache.org.
@@ -64,6 +64,9 @@ public class ColorType {
     /** the blue component */
     protected float blue;
 
+    /** the alpha component */
+    protected float alpha = 0;
+
     /**
      * set the colour given a particular String specifying either a
      * colour name or #RGB or #RRGGBB 
@@ -163,6 +166,11 @@ public class ColorType {
                this.red = 0.7f;
                this.green = 0.5f;
                this.blue = 0;
+           } else if (value.toLowerCase().equals("transparent")) {
+               this.red = 0;
+               this.green = 0;
+               this.blue = 0;
+               this.alpha = 1;
            } else {
                this.red = 0;
                this.green = 0;
@@ -183,4 +191,8 @@ public class ColorType {
     public float red() {
        return this.red;
     }
+
+    public float alpha() {
+       return this.alpha;
+    }
 }
index df31a17672318bd849793cb7aab4f36e4464ffc7..1bd425ce785bbbf9e1b610a2ec991c5bf25e4adc 100644 (file)
@@ -104,6 +104,7 @@ public class PropertyListBuilder {
        propertyTable.put("href",HRef.maker());
        propertyTable.put("column-width",ColumnWidth.maker());
        propertyTable.put("keep-with-next",KeepWithNext.maker());
+       propertyTable.put("background-color",BackgroundColor.maker());
 
        propertyTable.put("height",SVGLength.maker());
        propertyTable.put("width",SVGLength.maker());
index 6b22f17a7fbcb6a20e64bfdc7b59aec3baedc3cd..8742b8fcf0ca67a1ffaf39341020e308c4cb8a19 100644 (file)
@@ -55,6 +55,7 @@ package org.apache.fop.fo.flow;
 import org.apache.fop.fo.*;
 import org.apache.fop.fo.properties.*;
 import org.apache.fop.layout.*;
+import org.apache.fop.datatypes.*;
 import org.apache.fop.apps.FOPException;
 
 public class Block extends FObjMixed {
@@ -82,6 +83,7 @@ public class Block extends FObjMixed {
     int spaceAfter;
     int textIndent;
     int keepWithNext;
+    ColorType backgroundColor;
 
     BlockArea blockArea;
 
@@ -133,6 +135,8 @@ public class Block extends FObjMixed {
                this.properties.get("text-indent").getLength().mvalue(); 
            this.keepWithNext = 
                this.properties.get("keep-with-next").getEnum();
+           this.backgroundColor =
+               this.properties.get("background-color").getColorType();
 
            if (area instanceof BlockArea) {
                area.end();
@@ -150,8 +154,8 @@ public class Block extends FObjMixed {
 
            if (this.isInTableCell) {
                startIndent += forcedStartOffset;
-               endIndent = area.getAllocationWidth() - startIndent -
-                   forcedWidth;
+               endIndent = area.getAllocationWidth() - forcedWidth -
+                   forcedStartOffset;
            }
 
            this.marker = 0;
@@ -182,6 +186,7 @@ public class Block extends FObjMixed {
                          area.spaceLeft(), startIndent, endIndent,
                          textIndent, align, alignLast, lineHeight);
        blockArea.setPage(area.getPage());
+       blockArea.setBackgroundColor(backgroundColor);
        blockArea.start();
 
        int numChildren = this.children.size();
index 921eb99b3fc17e7c5ae442000db373856d08789c..0cacbfff3f0be8a44868f31d8ee3e49cb237da60 100644 (file)
@@ -144,8 +144,8 @@ public class DisplayGraphic extends FObj {
 
            if (this.isInTableCell) {
                startIndent += forcedStartOffset;
-               endIndent = area.getAllocationWidth() - startIndent -
-                   forcedWidth;
+               endIndent = area.getAllocationWidth() - forcedWidth -
+                   forcedStartOffset;
            }
 
            this.marker = 0;
index fb8467b3ce82beb4114d1c98bec2a501840ca4fc..383aed2238f1ad87d9b0fd0e1efa8f4dee45fb4a 100644 (file)
@@ -115,6 +115,23 @@ public class DisplayRule extends FObj {
            area.addDisplaySpace(spaceBefore);
        }
 
+       if (this.isInLabel) {
+           startIndent += bodyIndent;
+           endIndent += (area.getAllocationWidth() -
+                         distanceBetweenStarts - startIndent) +
+               labelSeparation;
+       }
+
+       if (this.isInListBody) {
+           startIndent += bodyIndent + distanceBetweenStarts;
+       }
+
+       if (this.isInTableCell) {
+           startIndent += forcedStartOffset;
+           endIndent += area.getAllocationWidth() - forcedWidth -
+               forcedStartOffset;
+       }
+
        RuleArea ruleArea = new RuleArea(fs,
                                         area.getAllocationWidth(),
                                         area.spaceLeft(),
index 7853ea71610631e18fb7b7436f11b60b26641ac1..cca3e44d21eeb146b24d13c69a703d92813ff98e 100644 (file)
@@ -55,6 +55,7 @@ package org.apache.fop.fo.flow;
 import org.apache.fop.fo.*;
 import org.apache.fop.fo.properties.*;
 import org.apache.fop.layout.*;
+import org.apache.fop.datatypes.*;
 import org.apache.fop.apps.FOPException;
 
 // Java
@@ -80,6 +81,7 @@ public class Table extends FObj {
     int endIndent;
     int spaceBefore;
     int spaceAfter;
+    ColorType backgroundColor;
 
     Vector columns = new Vector();
     int currentColumnNumber = 0;
@@ -120,6 +122,9 @@ public class Table extends FObj {
                this.properties.get("space-before.optimum").getLength().mvalue();  
            this.spaceAfter =
                this.properties.get("space-after.optimum").getLength().mvalue(); 
+           this.backgroundColor =
+               this.properties.get("background-color").getColorType();
+
            if (area instanceof BlockArea) {
                area.end();
            }
@@ -152,6 +157,7 @@ public class Table extends FObj {
                          area.spaceLeft(), startIndent, endIndent, 0,
                          0, 0, 0);
        blockArea.setPage(area.getPage());
+       blockArea.setBackgroundColor(backgroundColor);
        blockArea.start();
 
        // added by Eric Schaeffer
index 82d72f3c732f43f88fa92ff98df11d13834d0a99..f7d64f8fe6b8e06a511bc5754c188243f6682b54 100644 (file)
@@ -54,6 +54,7 @@ package org.apache.fop.fo.flow;
 // FOP
 import org.apache.fop.fo.*;
 import org.apache.fop.fo.properties.*;
+import org.apache.fop.datatypes.*;
 import org.apache.fop.layout.*;
 import org.apache.fop.apps.FOPException;
 
@@ -78,6 +79,7 @@ public class TableBody extends FObj {
     int endIndent;
     int spaceBefore;
     int spaceAfter;
+    ColorType backgroundColor;
 
     Vector columns;
 
@@ -117,6 +119,9 @@ public class TableBody extends FObj {
                this.properties.get("space-before.optimum").getLength().mvalue();  
            this.spaceAfter =
                this.properties.get("space-after.optimum").getLength().mvalue(); 
+           this.backgroundColor =
+               this.properties.get("background-color").getColorType();
+
            if (area instanceof BlockArea) {
                area.end();
            }
@@ -138,6 +143,7 @@ public class TableBody extends FObj {
                          area.spaceLeft(), startIndent, endIndent, 0,
                          0, 0, 0);
        blockArea.setPage(area.getPage());
+       blockArea.setBackgroundColor(backgroundColor);
        blockArea.start();
 
        int numChildren = this.children.size();
index 0a5f69b252d56c45e531fe6ccc528bd5cebb2bda..d40e2e92bbc0e697c15d36c55415f0a62aaa0319 100644 (file)
@@ -55,6 +55,7 @@ import org.apache.fop.fo.*;
 import org.apache.fop.fo.properties.*;
 import org.apache.fop.layout.*;
 import org.apache.fop.apps.FOPException;
+import org.apache.fop.datatypes.*;
 
 public class TableCell extends FObj {
 
@@ -74,6 +75,7 @@ public class TableCell extends FObj {
     int endIndent;
     int spaceBefore;
     int spaceAfter;
+    ColorType backgroundColor;
 
     protected int startOffset;
     protected int width;
@@ -119,6 +121,9 @@ public class TableCell extends FObj {
                this.properties.get("space-before.optimum").getLength().mvalue();  
            this.spaceAfter =
                this.properties.get("space-after.optimum").getLength().mvalue(); 
+           this.backgroundColor =
+               this.properties.get("background-color").getColorType();
+
            if (area instanceof BlockArea) {
                area.end();
            }
@@ -140,6 +145,7 @@ public class TableCell extends FObj {
                          area.spaceLeft(), startIndent, endIndent, 0,
                          0, 0, 0);
        blockArea.setPage(area.getPage());
+       blockArea.setBackgroundColor(backgroundColor);
        blockArea.start();
 
        // added by Eric Schaeffer
index bd015378ce6786b1749fc989e6eb20cc30af491e..3c8b53ce64c6db374bcd6596046507cc8ba4ff1e 100644 (file)
@@ -54,6 +54,7 @@ package org.apache.fop.fo.flow;
 // FOP
 import org.apache.fop.fo.*;
 import org.apache.fop.fo.properties.*;
+import org.apache.fop.datatypes.*;
 import org.apache.fop.layout.*;
 import org.apache.fop.apps.FOPException;
 
@@ -78,6 +79,7 @@ public class TableRow extends FObj {
     int endIndent;
     int spaceBefore;
     int spaceAfter;
+    ColorType backgroundColor;
 
     int widthOfCellsSoFar = 0;
     int largestCellHeight = 0;
@@ -120,6 +122,9 @@ public class TableRow extends FObj {
                this.properties.get("space-before.optimum").getLength().mvalue();  
            this.spaceAfter =
                this.properties.get("space-after.optimum").getLength().mvalue(); 
+           this.backgroundColor =
+               this.properties.get("background-color").getColorType();
+
            if (area instanceof BlockArea) {
                area.end();
            }
@@ -141,6 +146,7 @@ public class TableRow extends FObj {
                          area.spaceLeft(), startIndent, endIndent, 0,
                          0, 0, 0);
        blockArea.setPage(area.getPage());
+       blockArea.setBackgroundColor(backgroundColor);
        blockArea.start();
 
        int numChildren = this.children.size();
index d76045a4217dbb08a656f41564d50790444a46bf..dff0fb5e7bfac10f51bf02c8318cf750bb3fb862 100644 (file)
@@ -51,6 +51,9 @@
 
 package org.apache.fop.layout;
 
+// FOP
+import org.apache.fop.datatypes.*;
+
 // Java
 import java.util.Vector;
 
@@ -77,6 +80,8 @@ abstract public class Area extends Box {
     /* the page this area is on */
     protected Page page;
 
+    protected ColorType backgroundColor;
+
     public Area (FontState fontState) {
        this.fontState = fontState;
     }
@@ -137,6 +142,10 @@ abstract public class Area extends Box {
        return this.page;
     }
 
+    public ColorType getBackgroundColor() {
+       return this.backgroundColor;
+    }
+
     public void increaseHeight(int amount) {
        this.currentHeight += amount;
     }
@@ -154,6 +163,10 @@ abstract public class Area extends Box {
        this.page = page;
     }
 
+    public void setBackgroundColor(ColorType bgColor) {
+       this.backgroundColor = bgColor;
+    }
+
     public int spaceLeft() {
        return maxHeight - currentHeight;
     }
index b6976fba3fc5cd91cbfad4eb93bc648e621ec324..e9ef2b6c84415e3cf37edb0faa72b0d219355765 100644 (file)
@@ -22,7 +22,7 @@
     Alternately, this  acknowledgment may  appear in the software itself,  if
     and wherever such third-party acknowledgments normally appear.
  
- 4. The names "Fop" and  "Apache Software Foundation"  must not be used to
+ 4. The names "FOP" and  "Apache Software Foundation"  must not be used to
     endorse  or promote  products derived  from this  software without  prior
     written permission. For written permission, please contact
     apache@apache.org.
@@ -48,6 +48,7 @@
  Software Foundation, please see <http://www.apache.org/>.
  
  */
+
 package org.apache.fop.render.pdf;
 
 // FOP
@@ -55,6 +56,7 @@ import org.apache.fop.render.Renderer;
 import org.apache.fop.image.ImageArea;
 import org.apache.fop.image.FopImage;
 import org.apache.fop.layout.*;
+import org.apache.fop.datatypes.*;
 import org.apache.fop.svg.*;
 import org.apache.fop.pdf.*;
 
@@ -123,7 +125,8 @@ public class PDFRenderer implements Renderer {
      * @param areaTree the laid-out area tree
      * @param writer the PrintWriter to write the PDF with
      */
-    public void render(AreaTree areaTree, PrintWriter writer) throws IOException {
+    public void render(AreaTree areaTree, PrintWriter writer)
+       throws IOException {
        System.err.println("rendering areas to PDF");
        this.pdfResources = this.pdfDoc.getResources();
        Enumeration e = areaTree.getPages().elements();
@@ -233,6 +236,12 @@ public class PDFRenderer implements Renderer {
        int ry = this.currentYPosition;
        int w = area.getContentWidth();
        int h = area.getHeight();
+       ColorType bg = area.getBackgroundColor();
+       if (bg.alpha() == 0) {
+           this.addRect(rx, ry, w, -h,
+                        bg.red(), bg.green(), bg.blue(),
+                        bg.red(), bg.green(), bg.blue());
+       }
        Enumeration e = area.getChildren().elements();
        while (e.hasMoreElements()) {
            Box b = (Box) e.nextElement();