gmazza 2003/10/26 11:29:14
Modified: src/java/org/apache/fop/layoutmgr TraitSetter.java
src/java/org/apache/fop/render/pdf PDFRenderer.java
Log:
1. TraitSetter modified to provide padding properties for regions.
2. PDFRenderer modified to take into account region borders and region padding
when rendering text. (Possibly temporary solution--may need to move code
to base AbstractRenderer in future.) Work incomplete--will need to also reduce
line length accordingly to account for region borders and padding.
Revision Changes Path
1.3 +20 -0 xml-fop/src/java/org/apache/fop/layoutmgr/TraitSetter.java
Index: TraitSetter.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/TraitSetter.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- TraitSetter.java 12 Aug 2003 18:02:45 -0000 1.2
+++ TraitSetter.java 26 Oct 2003 19:29:14 -0000 1.3
@@ -148,6 +148,26 @@
if (bps.width != 0) {
curBlock.addTrait(Trait.BORDER_END, bps);
}
+
+ int padding = bordProps.getPadding(CommonBorderAndPadding.START, false);
+ if (padding != 0) {
+ curBlock.addTrait(Trait.PADDING_START, new java.lang.Integer(padding));
+ }
+
+ padding = bordProps.getPadding(CommonBorderAndPadding.END, false);
+ if (padding != 0) {
+ curBlock.addTrait(Trait.PADDING_END, new java.lang.Integer(padding));
+ }
+
+ padding = bordProps.getPadding(CommonBorderAndPadding.BEFORE, false);
+ if (padding != 0) {
+ curBlock.addTrait(Trait.PADDING_BEFORE, new java.lang.Integer(padding));
+ }
+
+ padding = bordProps.getPadding(CommonBorderAndPadding.AFTER, false);
+ if (padding != 0) {
+ curBlock.addTrait(Trait.PADDING_AFTER, new java.lang.Integer(padding));
+ }
}
private static BorderProps getBorderProps(CommonBorderAndPadding bordProps, int
side) {
1.19 +63 -20 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.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- PDFRenderer.java 21 Sep 2003 20:56:24 -0000 1.18
+++ PDFRenderer.java 26 Oct 2003 19:29:14 -0000 1.19
@@ -227,6 +227,16 @@
private StringBuffer wordAreaPDF = new StringBuffer();
/**
+ * Offset for rendering text, taking into account borders and padding
+ */
+ protected int BPMarginOffset = 0;
+
+ /**
+ * Offset for rendering text, taking into account borders and padding
+ */
+ protected int IPMarginOffset = 0;
+
+ /**
* create the PDF renderer
*/
public PDFRenderer() {
@@ -467,7 +477,6 @@
this.pdfDoc.output(ostream);
}
-
/**
* @see org.apache.fop.render.AbstractRenderer#startVParea(CTM)
*/
@@ -494,6 +503,21 @@
}
/**
+ * Handle block traits.
+ * The block could be any sort of block with any positioning
+ * so this should render the traits such as border and background
+ * in its position.
+ *
+ * @param block the block to render the traits
+ */
+ protected void handleBlockTraits(Block block) {
+ float startx = currentIPPosition / 1000f;
+ float starty = currentBPPosition / 1000f;
+ drawBackAndBorders(block, startx, starty,
+ block.getWidth() / 1000f, block.getHeight() / 1000f);
+ }
+
+ /**
* 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.)
@@ -510,22 +534,35 @@
Trait.Background back;
back = (Trait.Background)region.getTrait(Trait.BACKGROUND);
*/
- drawBackAndBorders(region, startx, starty, width, height);
- }
- /**
- * Handle block traits.
- * The block could be any sort of block with any positioning
- * so this should render the traits such as border and background
- * in its position.
- *
- * @param block the block to render the traits
- */
- protected void handleBlockTraits(Block block) {
- float startx = currentIPPosition / 1000f;
- float starty = currentBPPosition / 1000f;
- drawBackAndBorders(block, startx, starty,
- block.getWidth() / 1000f, block.getHeight() / 1000f);
+ if (region.getRegion().getRegionClass() ==
org.apache.fop.fo.pagination.Region.BODY_CODE)
+ {
+ // need to collect vertical and horizontal offsets
+ // for body-region (for rendering of text)
+ BorderProps bps = (BorderProps) region.getTrait(Trait.BORDER_BEFORE);
+ if (bps != null) {
+ BPMarginOffset = bps.width;
+ }
+
+ bps = (BorderProps) region.getTrait(Trait.BORDER_START);
+ if (bps != null) {
+ IPMarginOffset = bps.width;
+ }
+
+ java.lang.Integer padWidth = (java.lang.Integer)
+ region.getTrait(Trait.PADDING_BEFORE);
+ if (padWidth != null) {
+ BPMarginOffset += padWidth.intValue();
+ }
+
+ padWidth = (java.lang.Integer)
+ region.getTrait(Trait.PADDING_START);
+ if (padWidth != null) {
+ IPMarginOffset += padWidth.intValue();
+ }
+ }
+
+ drawBackAndBorders(region, startx, starty, width, height);
}
/**
@@ -848,7 +885,6 @@
* @see org.apache.fop.render.Renderer#renderCharacter(Character)
*/
public void renderCharacter(Character ch) {
-
super.renderCharacter(ch);
}
@@ -875,9 +911,16 @@
updateColor(ct, true, pdf);
}
- int rx = currentBlockIPPosition;
- // int bl = pageHeight - currentBPPosition;
- int bl = currentBPPosition + word.getOffset();
+ // word.getOffset() = only height of text itself
+ // currentBlockIPPosition: 0 for beginning of line; nonzero
+ // where previous line area failed to take up entire allocated space
+ int rx = currentBlockIPPosition + IPMarginOffset;
+ int bl = currentBPPosition + BPMarginOffset + word.getOffset();
+
+/* System.out.println("BlockIP Position: " + currentBlockIPPosition +
+ "; currentBPPosition: " + currentBPPosition +
+ "; offset: " + word.getOffset() +
+ "; Word = " + word.getWord()); */
// Set letterSpacing
//float ls = fs.getLetterSpacing() / this.currentFontSize;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]