bckfnn 2004/02/10 11:25:15 Modified: src/java/org/apache/fop/layoutmgr BlockContainerLayoutManager.java Log: Set correct ipd/bpd of both the viewport and reference area. Revision Changes Path 1.13 +35 -11 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.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- BlockContainerLayoutManager.java 29 Jan 2004 19:43:04 -0000 1.12 +++ BlockContainerLayoutManager.java 10 Feb 2004 19:25:15 -0000 1.13 @@ -87,6 +87,9 @@ private Length width; private Length height; + // When viewport should grow with the content. + private boolean autoHeight = true; + /** * Create a new block container layout manager. */ @@ -111,8 +114,8 @@ } marginProps = pm.getMarginProps(); borderProps = pm.getBorderAndPadding(); - height = pm.getPropertyList().get(PR_HEIGHT).getLength(); - width = pm.getPropertyList().get(PR_WIDTH).getLength(); + height = pm.getPropertyList().get(PR_BLOCK_PROGRESSION_DIMENSION | CP_OPTIMUM).getLength(); + width = pm.getPropertyList().get(PR_INLINE_PROGRESSION_DIMENSION | CP_OPTIMUM).getLength(); } protected int getRotatedIPD() { @@ -152,8 +155,13 @@ boolean rotated = vals[0] == 0.0; if (rotated) { // rotated 90 degrees - stackLimit = new MinOptMax(1000000); - ipd = getRotatedIPD(); + if (relDims.ipd > context.getRefIPD()) { + relDims.ipd = context.getRefIPD(); + } + stackLimit = new MinOptMax(relDims.ipd); + if (width.isAuto()) { + relDims.bpd = context.getStackLimit().opt; + } absoluteCTM = new CTM(vals[0], vals[1], vals[2], vals[3], 0, 0); } else { if (vals[0] == -1.0) { @@ -324,25 +332,31 @@ viewportBlockArea.setCTM(absoluteCTM); viewportBlockArea.setClip(clip); + autoHeight = false; } else { double[] vals = absoluteCTM.toArray(); boolean rotated = vals[0] == 0.0; if (rotated) { - viewportBlockArea.setWidth(relDims.bpd); - viewportBlockArea.setHeight(getRotatedIPD()); + viewportBlockArea.setWidth(relDims.ipd); + viewportBlockArea.setHeight(relDims.bpd); viewportBlockArea.setCTM(absoluteCTM); viewportBlockArea.setClip(clip); + autoHeight = false; } else if (vals[0] == -1.0) { // need to set bpd to actual size for rotation // and stacking viewportBlockArea.setWidth(relDims.ipd); - viewportBlockArea.setWidth(relDims.bpd); + if (!height.isAuto()) { + viewportBlockArea.setHeight(relDims.bpd); + autoHeight = false; + } viewportBlockArea.setCTM(absoluteCTM); viewportBlockArea.setClip(clip); } else { viewportBlockArea.setWidth(relDims.ipd); if (!height.isAuto()) { viewportBlockArea.setHeight(relDims.bpd); + autoHeight = false; } } } @@ -356,8 +370,8 @@ // Set up dimensions // Must get dimensions from parent area Area parentArea = parentLM.getParentArea(curBlockArea); - int referenceIPD = parentArea.getIPD(); - curBlockArea.setIPD(referenceIPD); + //int referenceIPD = parentArea.getIPD(); + curBlockArea.setIPD(relDims.ipd); // Get reference IPD from parentArea setCurrentArea(viewportBlockArea); // ??? for generic operations } @@ -371,7 +385,7 @@ */ public void addChild(Area childArea) { if (curBlockArea != null) { - curBlockArea.addBlock((Block) childArea, height.isAuto()); + curBlockArea.addBlock((Block) childArea); } } @@ -385,8 +399,18 @@ * Force current area to be added to parent area. */ protected void flush() { + viewportBlockArea.addBlock(curBlockArea, autoHeight); + + // Fake a 0 height for absolute positioned blocks. + int height = viewportBlockArea.getHeight(); + if (viewportBlockArea.getPositioning() == Block.ABSOLUTE) { + viewportBlockArea.setHeight(0); + } super.flush(); - viewportBlockArea.addBlock(curBlockArea); + // Restore the right height. + if (viewportBlockArea.getPositioning() == Block.ABSOLUTE) { + viewportBlockArea.setHeight(height); + } } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]