jeremias 2005/01/17 05:55:58 Modified: src/java/org/apache/fop/layoutmgr BlockContainerLayoutManager.java Log: Fix for auto height on absolutely positioned block-containers. Revision Changes Path 1.30 +14 -39 xml-fop/src/java/org/apache/fop/layoutmgr/BlockContainerLayoutManager.java Index: BlockContainerLayoutManager.java =================================================================== RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/layoutmgr/BlockContainerLayoutManager.java,v retrieving revision 1.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- BlockContainerLayoutManager.java 17 Jan 2005 10:38:02 -0000 1.29 +++ BlockContainerLayoutManager.java 17 Jan 2005 13:55:58 -0000 1.30 @@ -36,7 +36,7 @@ import org.apache.fop.traits.MinOptMax; /** - * LayoutManager for a block FO. + * LayoutManager for a block-container FO. */ public class BlockContainerLayoutManager extends BlockStackingLayoutManager { private BlockContainer fobj; @@ -142,6 +142,7 @@ return getAbsoluteBreakPoss(context); } + autoHeight = false; boolean rotated = (fobj.getReferenceOrientation() % 180 != 0); //vals[0] == 0.0; referenceIPD = context.getRefIPD(); int maxbpd = context.getStackLimit().opt; @@ -151,6 +152,7 @@ allocBPD += getBPIndents(); } else { allocBPD = maxbpd; + autoHeight = true; } if (width.getEnum() != EN_AUTO) { allocIPD = width.getValue(); //this is the content-width @@ -298,6 +300,7 @@ LayoutManager curLM ; // currently active LM MinOptMax stackSize = new MinOptMax(); + autoHeight = false; Point offset = getAbsOffset(); int allocBPD, allocIPD; @@ -316,6 +319,8 @@ if (abProps.bottom.getEnum() != EN_AUTO) { allocBPD -= abProps.bottom.getValue(); } + } else { + autoHeight = true; } } if (width.getEnum() != EN_AUTO) { @@ -353,8 +358,6 @@ fobj.getReferenceOrientation(), fobj.getWritingMode(), rect, relDims); - //referenceIPD = relDims.ipd + getIPIndents(); - while ((curLM = getChildLM()) != null) { // Make break positions and return blocks! @@ -379,7 +382,8 @@ // to the normal stacking breakPoss.setStackingSize(new MinOptMax(0)); - if (stackSize.opt > relDims.bpd) { + //TODO Maybe check for page overflow when autoHeight=true + if (!autoHeight & (stackSize.opt > relDims.bpd)) { log.warn("Contents overflow block-container viewport: clipping"); if (fobj.getOverflow() == EN_HIDDEN) { clip = true; @@ -441,7 +445,11 @@ viewportBlockArea.setCTM(absoluteCTM); viewportBlockArea.setIPD(vpContentIPD); - viewportBlockArea.setBPD(vpContentBPD); + if (autoHeight) { + viewportBlockArea.setBPD(0); + } else { + viewportBlockArea.setBPD(vpContentBPD); + } viewportBlockArea.setClip(clip); viewportBlockArea.addTrait(Trait.SPACE_BEFORE, new Integer(getSpaceBefore())); @@ -450,41 +458,8 @@ Point offset = getAbsOffset(); viewportBlockArea.setXOffset(offset.x); viewportBlockArea.setYOffset(offset.y); - autoHeight = false; } else { - //double[] vals = absoluteCTM.toArray(); - boolean rotated = (fobj.getReferenceOrientation() % 180 != 0); //vals[0] == 0.0; - if (rotated) { - autoHeight = false; - } else { - autoHeight = (height.getEnum() == EN_AUTO); - if (autoHeight) { - viewportBlockArea.setBPD(0); - } - } - /* - boolean rotated = vals[0] == 0.0; - if (rotated) { - viewportBlockArea.setIPD(vpContentIPD); - viewportBlockArea.setBPD(vpContentBPD); - viewportBlockArea.setClip(clip); - autoHeight = false; - } else if (vals[0] == -1.0) { - // need to set bpd to actual size for rotation - // and stacking - viewportBlockArea.setIPD(relDims.ipd); - if (height.getEnum() != EN_AUTO) { - viewportBlockArea.setBPD(relDims.bpd); - autoHeight = false; - } - viewportBlockArea.setClip(clip); - } else { - viewportBlockArea.setIPD(relDims.ipd); - if (height.getEnum() != EN_AUTO) { - viewportBlockArea.setBPD(relDims.bpd); - autoHeight = false; - } - }*/ + //nop } curBlockArea = new Block();
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]