keiron 02/04/02 03:50:58 Modified: src/org/apache/fop/area/inline InlineArea.java src/org/apache/fop/fo FObjMixed.java TextInfo.java src/org/apache/fop/fo/flow Block.java InstreamForeignObject.java src/org/apache/fop/layoutmgr BlockLayoutManager.java LineLayoutManager.java TextLayoutManager.java src/org/apache/fop/render AbstractRenderer.java Added: src/org/apache/fop/layoutmgr LayoutInfo.java Log: basic vertical alignment and height for lines handles alignment.fo Revision Changes Path 1.6 +4 -1 xml-fop/src/org/apache/fop/area/inline/InlineArea.java Index: InlineArea.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/area/inline/InlineArea.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- InlineArea.java 21 Mar 2002 09:34:19 -0000 1.5 +++ InlineArea.java 2 Apr 2002 11:50:58 -0000 1.6 @@ -1,5 +1,5 @@ /* - * $Id: InlineArea.java,v 1.5 2002/03/21 09:34:19 keiron Exp $ + * $Id: InlineArea.java,v 1.6 2002/04/02 11:50:58 keiron Exp $ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. @@ -12,6 +12,8 @@ import org.apache.fop.area.Trait; import org.apache.fop.render.Renderer; +import org.apache.fop.layoutmgr.LayoutInfo; + import java.util.List; import java.util.ArrayList; @@ -28,6 +30,7 @@ // position within the line area, either top or baseline int verticalPosition; // width, height, vertical alignment + public LayoutInfo info = null; // store properties in array list, need better solution ArrayList props = null; 1.20 +2 -2 xml-fop/src/org/apache/fop/fo/FObjMixed.java Index: FObjMixed.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/FObjMixed.java,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- FObjMixed.java 21 Mar 2002 09:37:14 -0000 1.19 +++ FObjMixed.java 2 Apr 2002 11:50:58 -0000 1.20 @@ -1,5 +1,5 @@ /* - * $Id: FObjMixed.java,v 1.19 2002/03/21 09:37:14 keiron Exp $ + * $Id: FObjMixed.java,v 1.20 2002/04/02 11:50:58 keiron Exp $ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. @@ -21,7 +21,7 @@ */ public class FObjMixed extends FObj { TextInfo textInfo = null; - FontInfo fontInfo=null; + protected FontInfo fontInfo=null; public FObjMixed(FONode parent) { super(parent); 1.2 +2 -1 xml-fop/src/org/apache/fop/fo/TextInfo.java Index: TextInfo.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/TextInfo.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- TextInfo.java 21 Mar 2002 09:37:14 -0000 1.1 +++ TextInfo.java 2 Apr 2002 11:50:58 -0000 1.2 @@ -1,5 +1,5 @@ /* - * $Id: TextInfo.java,v 1.1 2002/03/21 09:37:14 keiron Exp $ + * $Id: TextInfo.java,v 1.2 2002/04/02 11:50:58 keiron Exp $ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources." @@ -28,6 +28,7 @@ public int wrapOption; public int whiteSpaceCollapse; public int verticalAlign; + public int lineHeight; // Textdecoration public boolean underlined = false; 1.51 +5 -3 xml-fop/src/org/apache/fop/fo/flow/Block.java Index: Block.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/Block.java,v retrieving revision 1.50 retrieving revision 1.51 diff -u -r1.50 -r1.51 --- Block.java 21 Mar 2002 09:37:14 -0000 1.50 +++ Block.java 2 Apr 2002 11:50:58 -0000 1.51 @@ -1,5 +1,5 @@ /* - * $Id: Block.java,v 1.50 2002/03/21 09:37:14 keiron Exp $ + * $Id: Block.java,v 1.51 2002/04/02 11:50:58 keiron Exp $ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. @@ -16,6 +16,7 @@ import org.apache.fop.layoutmgr.LayoutManager; import org.apache.fop.layoutmgr.BlockLayoutManager; import org.apache.fop.util.CharUtilities; +import org.apache.fop.apps.StreamRenderer; import org.xml.sax.Attributes; @@ -370,12 +371,13 @@ BlockLayoutManager blm = new BlockLayoutManager(this); TextInfo ti = new TextInfo(); -/* try { + try { ti.fs = propMgr.getFontState(fontInfo); } catch (FOPException fopex) { log.error("Error setting FontState for characters: " + fopex.getMessage()); - }*/ + } + ti.lineHeight = this.lineHeight; ColorType c = getProperty("color").getColorType(); ti.color = c; 1.24 +5 -1 xml-fop/src/org/apache/fop/fo/flow/InstreamForeignObject.java Index: InstreamForeignObject.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/InstreamForeignObject.java,v retrieving revision 1.23 retrieving revision 1.24 diff -u -r1.23 -r1.24 --- InstreamForeignObject.java 21 Mar 2002 09:37:15 -0000 1.23 +++ InstreamForeignObject.java 2 Apr 2002 11:50:58 -0000 1.24 @@ -1,5 +1,5 @@ /* - * $Id: InstreamForeignObject.java,v 1.23 2002/03/21 09:37:15 keiron Exp $ + * $Id: InstreamForeignObject.java,v 1.24 2002/04/02 11:50:58 keiron Exp $ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. @@ -24,6 +24,7 @@ import org.apache.fop.apps.FOPException; import org.apache.fop.layoutmgr.LayoutManager; import org.apache.fop.layoutmgr.LeafNodeLayoutManager; +import org.apache.fop.layoutmgr.LayoutInfo; import org.w3c.dom.Document; @@ -136,6 +137,9 @@ areaCurrent.setWidth((int)size.getX() * 1000); areaCurrent.setHeight((int)size.getY() * 1000); areaCurrent.setOffset(0); + areaCurrent.info = new LayoutInfo(); + areaCurrent.info.alignment = properties.get("vertical-align").getEnum(); + areaCurrent.info.lead = areaCurrent.getHeight(); return areaCurrent; } 1.5 +9 -3 xml-fop/src/org/apache/fop/layoutmgr/BlockLayoutManager.java Index: BlockLayoutManager.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/layoutmgr/BlockLayoutManager.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- BlockLayoutManager.java 21 Mar 2002 09:37:15 -0000 1.4 +++ BlockLayoutManager.java 2 Apr 2002 11:50:58 -0000 1.5 @@ -1,5 +1,5 @@ /* - * $Id: BlockLayoutManager.java,v 1.4 2002/03/21 09:37:15 keiron Exp $ + * $Id: BlockLayoutManager.java,v 1.5 2002/04/02 11:50:58 keiron Exp $ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. @@ -23,12 +23,18 @@ private Block curBlockArea; + int lead = 12000; + int lineHeight = 14000; + int follow = 2000; + public BlockLayoutManager(FObj fobj) { super(fobj); } public void setBlockTextInfo(TextInfo ti) { - + lead = ti.fs.getAscender(); + follow = ti.fs.getDescender(); + lineHeight = ti.lineHeight; } /** @@ -54,7 +60,7 @@ FObj childFO = (FObj) children.next(); if (childFO.generatesInlineAreas()) { children.previous(); - lm = new LineLayoutManager(children); + lm = new LineLayoutManager(children, lineHeight, lead, follow); } else { lm = childFO.getLayoutManager(); } 1.5 +117 -14 xml-fop/src/org/apache/fop/layoutmgr/LineLayoutManager.java Index: LineLayoutManager.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/layoutmgr/LineLayoutManager.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- LineLayoutManager.java 21 Mar 2002 09:37:15 -0000 1.4 +++ LineLayoutManager.java 2 Apr 2002 11:50:58 -0000 1.5 @@ -1,5 +1,5 @@ /* - * $Id: LineLayoutManager.java,v 1.4 2002/03/21 09:37:15 keiron Exp $ + * $Id: LineLayoutManager.java,v 1.5 2002/04/02 11:50:58 keiron Exp $ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. @@ -13,6 +13,10 @@ import org.apache.fop.area.LineArea; import org.apache.fop.area.MinOptMax; import org.apache.fop.area.inline.InlineArea; +import org.apache.fop.fo.properties.VerticalAlign; + +import org.apache.fop.area.inline.Word; +import org.apache.fop.area.inline.Character; import java.util.ListIterator; import java.util.List; @@ -31,11 +35,18 @@ private boolean bFirstLine; private LayoutManager curLM; private MinOptMax remainingIPD; - private int lineHeight = 14000; + // the following values must be set by the block + // these are the dominant basline and lineheight values + private int lineHeight; + private int lead; + private int follow; - public LineLayoutManager(ListIterator fobjIter) { + public LineLayoutManager(ListIterator fobjIter, int lh, int l, int f) { super(null); this.fobjIter = fobjIter; + lineHeight = lh; + lead = l; + follow = f; } /** @@ -70,20 +81,112 @@ public void flush() { if (lineArea != null) { // Adjust spacing as necessary - // Calculate height, based on content (or does the Area do this?) - int maxHeight = lineHeight; - List inlineAreas = lineArea.getInlineAreas(); - for(Iterator iter = inlineAreas.iterator(); iter.hasNext(); ) { - InlineArea inline = (InlineArea)iter.next(); - int h = inline.getHeight(); - if(h > maxHeight) { - maxHeight = h; - } - } - lineArea.setHeight(maxHeight); + + verticalAlign(); parentLM.addChild(lineArea); lineArea = null; + } + } + + private void verticalAlign() { + int maxHeight = lineHeight; + List inlineAreas = lineArea.getInlineAreas(); + + // get smallest possible offset to before edge + // this depends on the height of no and middle alignments + int before = lead; + int after = follow; + for(Iterator iter = inlineAreas.iterator(); iter.hasNext(); ) { + InlineArea inline = (InlineArea)iter.next(); + LayoutInfo info = inline.info; + int al; + int ld = inline.getHeight(); + if(info != null) { + al = info.alignment; + ld = info.lead; + } else { + al = VerticalAlign.BASELINE; + } + if(al == VerticalAlign.BASELINE) { + if(ld > before) { + before = ld; + } + if(inline.getHeight() > before) { + before = inline.getHeight(); + } + } else if(al == VerticalAlign.MIDDLE) { + if(inline.getHeight() / 2 + lead / 2 > before) { + before = inline.getHeight() / 2 + lead / 2; + } + if(inline.getHeight() / 2 - lead / 2 > after) { + after = inline.getHeight() / 2 - lead / 2; + } + } else if(al == VerticalAlign.TOP) { + } else if(al == VerticalAlign.BOTTOM) { + } + } + + // then align all before, no and middle alignment + for(Iterator iter = inlineAreas.iterator(); iter.hasNext(); ) { + InlineArea inline = (InlineArea)iter.next(); + LayoutInfo info = inline.info; + int al; + int ld = inline.getHeight(); + boolean bloffset = false; + if(info != null) { + al = info.alignment; + ld = info.lead; + bloffset = info.blOffset; + } else { + al = VerticalAlign.BASELINE; + } + if(al == VerticalAlign.BASELINE) { + // the offset position for text is the baseline + if(bloffset) { + inline.setOffset(before); + } else { + inline.setOffset(before - ld); + } + if(inline.getHeight() - ld > after) { + after = inline.getHeight() - ld; + } + } else if(al == VerticalAlign.MIDDLE) { + inline.setOffset(before - inline.getHeight() / 2 - lead / 2); + } else if(al == VerticalAlign.TOP) { + inline.setOffset(0); + if(inline.getHeight() - before > after) { + after = inline.getHeight() - before; + } + } else if(al == VerticalAlign.BOTTOM) { + if(inline.getHeight() - before > after) { + after = inline.getHeight() - before; + } + } + } + + // after alignment depends on maximum height of before + // and middle alignments + for(Iterator iter = inlineAreas.iterator(); iter.hasNext(); ) { + InlineArea inline = (InlineArea)iter.next(); + LayoutInfo info = inline.info; + int al; + if(info != null) { + al = info.alignment; + } else { + al = VerticalAlign.BASELINE; + } + if(al == VerticalAlign.BASELINE) { + } else if(al == VerticalAlign.MIDDLE) { + } else if(al == VerticalAlign.TOP) { + } else if(al == VerticalAlign.BOTTOM) { + inline.setOffset(before + after - inline.getHeight()); + } + } + if(before + after > maxHeight) { + lineArea.setHeight(before + after); + } else { + lineArea.setHeight(maxHeight); } } 1.6 +6 -1 xml-fop/src/org/apache/fop/layoutmgr/TextLayoutManager.java Index: TextLayoutManager.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/layoutmgr/TextLayoutManager.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- TextLayoutManager.java 21 Mar 2002 09:37:15 -0000 1.5 +++ TextLayoutManager.java 2 Apr 2002 11:50:58 -0000 1.6 @@ -1,5 +1,5 @@ /* - * $Id: TextLayoutManager.java,v 1.5 2002/03/21 09:37:15 keiron Exp $ + * $Id: TextLayoutManager.java,v 1.6 2002/04/02 11:50:58 keiron Exp $ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. @@ -14,6 +14,7 @@ import org.apache.fop.area.inline.Word; import org.apache.fop.area.inline.Space; import org.apache.fop.util.CharUtilities; +import org.apache.fop.fo.properties.VerticalAlign; import org.apache.fop.fo.properties.*; @@ -226,6 +227,10 @@ curWordArea.setWidth(width); curWordArea.setHeight(textInfo.fs.getAscender() - textInfo.fs.getDescender()); curWordArea.setOffset(textInfo.fs.getAscender()); + curWordArea.info = new LayoutInfo(); + curWordArea.info.lead = textInfo.fs.getAscender(); + curWordArea.info.alignment = VerticalAlign.BASELINE; + curWordArea.info.blOffset = true; curWordArea.setWord(str); Trait prop = new Trait(); 1.1 xml-fop/src/org/apache/fop/layoutmgr/LayoutInfo.java Index: LayoutInfo.java =================================================================== /* * $Id: LayoutInfo.java,v 1.1 2002/04/02 11:50:58 keiron Exp $ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. */ package org.apache.fop.layoutmgr; import org.apache.fop.area.Area; import org.apache.fop.area.MinOptMax; public class LayoutInfo { public int alignment; public int lead; public boolean blOffset = false; public LayoutInfo() { } } 1.13 +4 -1 xml-fop/src/org/apache/fop/render/AbstractRenderer.java Index: AbstractRenderer.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/render/AbstractRenderer.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- AbstractRenderer.java 26 Feb 2002 12:43:09 -0000 1.12 +++ AbstractRenderer.java 2 Apr 2002 11:50:58 -0000 1.13 @@ -1,5 +1,5 @@ /* - * $Id: AbstractRenderer.java,v 1.12 2002/02/26 12:43:09 keiron Exp $ + * $Id: AbstractRenderer.java,v 1.13 2002/04/02 11:50:58 keiron Exp $ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. @@ -254,6 +254,8 @@ public void renderViewport(Viewport viewport) { Area content = viewport.getContent(); + int saveBP = currentBPPosition; + currentBPPosition += viewport.getOffset(); if (content instanceof Image) { renderImage((Image) content); } else if (content instanceof Container) { @@ -262,6 +264,7 @@ renderForeignObject((ForeignObject) content); } currentBlockIPPosition += viewport.getWidth(); + currentBPPosition = saveBP; } public void renderImage(Image image) {
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]