keiron 02/05/17 01:56:03 Modified: src/org/apache/fop/area LineArea.java src/org/apache/fop/layoutmgr LineBPLayoutManager.java LineLayoutManager.java Log: moved vert align to line area Revision Changes Path 1.5 +107 -1 xml-fop/src/org/apache/fop/area/LineArea.java Index: LineArea.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/area/LineArea.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- LineArea.java 26 Apr 2002 09:40:55 -0000 1.4 +++ LineArea.java 17 May 2002 08:56:03 -0000 1.5 @@ -1,5 +1,5 @@ /* - * $Id: LineArea.java,v 1.4 2002/04/26 09:40:55 keiron Exp $ + * $Id: LineArea.java,v 1.5 2002/05/17 08:56:03 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. @@ -8,9 +8,12 @@ package org.apache.fop.area; import org.apache.fop.area.inline.InlineArea; +import org.apache.fop.layoutmgr.LayoutInfo; +import org.apache.fop.fo.properties.VerticalAlign; import java.util.ArrayList; import java.util.List; +import java.util.Iterator; // a line area can contain information in ranges of child inline // areas that have properties such as @@ -63,6 +66,109 @@ public List getTraitList() { return props; + } + + public void verticalAlign(int lh, int lead, int follow) { + int maxHeight = lh; + List inlineAreas = getInlineAreas(); + + // get smallest possible offset to before edge + // this depends on the height of no and middle alignments + int before = lead; + int after = follow; + int halfLeading = (lineHeight - lead - follow) / 2; + before += halfLeading; + 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) { + setHeight(before + after); + } else { + setHeight(maxHeight); + } } } 1.4 +11 -2 xml-fop/src/org/apache/fop/layoutmgr/LineBPLayoutManager.java Index: LineBPLayoutManager.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/layoutmgr/LineBPLayoutManager.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- LineBPLayoutManager.java 13 May 2002 06:12:42 -0000 1.3 +++ LineBPLayoutManager.java 17 May 2002 08:56:03 -0000 1.4 @@ -1,5 +1,5 @@ /* - * $Id: LineBPLayoutManager.java,v 1.3 2002/05/13 06:12:42 klease Exp $ + * $Id: LineBPLayoutManager.java,v 1.4 2002/05/17 08:56:03 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. @@ -63,10 +63,16 @@ private int m_iTextIndent = 0; private int m_iIndents = 0; + private int lineHeight; + private int lead; + private int follow; public LineBPLayoutManager(FObj fobj, List lms, int lh, int l, int f) { //super(fobj, lms.listIterator(), lh, l, f); super(fobj, lms.listIterator()); + lineHeight = lh; + lead = l; + follow = f; init(); // Normally done when started by parent! } @@ -245,6 +251,9 @@ // No more content to layout! setFinished(true); } + +if(bp == null) return null; + // Choose the best break if (!bp.isForcedBreak() && vecPossEnd.size()>0) { m_prevBP = getBestBP(vecPossEnd); @@ -383,7 +392,7 @@ while ((childLM = inlinePosIter.getNextChildLM())!= null) { childLM.addAreas(inlinePosIter); } - // verticalAlign(m_lineArea); + m_lineArea.verticalAlign(lineHeight, lead, follow); parentLM.addChild(m_lineArea); } m_lineArea = null; 1.9 +2 -106 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.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- LineLayoutManager.java 10 May 2002 12:38:15 -0000 1.8 +++ LineLayoutManager.java 17 May 2002 08:56:03 -0000 1.9 @@ -1,5 +1,5 @@ /* - * $Id: LineLayoutManager.java,v 1.8 2002/05/10 12:38:15 klease Exp $ + * $Id: LineLayoutManager.java,v 1.9 2002/05/17 08:56:03 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. @@ -165,7 +165,7 @@ if (currentLine != null) { // Adjust spacing as necessary adjustSpacing(); - verticalAlign(currentLine.area); + currentLine.area.verticalAlign(lineHeight, lead, follow); boolean res = parentLM.addChild(currentLine.area); @@ -276,110 +276,6 @@ } } - } - - protected void verticalAlign(LineArea lineArea) { - 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; - int halfLeading = (lineHeight - lead - follow) / 2; - before += halfLeading; - 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); - } } /**
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]