]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Code fixups
authorAndreas L. Delmelle <adelmelle@apache.org>
Sun, 6 Feb 2011 15:33:17 +0000 (15:33 +0000)
committerAndreas L. Delmelle <adelmelle@apache.org>
Sun, 6 Feb 2011 15:33:17 +0000 (15:33 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1067684 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/layoutmgr/inline/WrapperLayoutManager.java

index 4b93bcdacec28deeb543f97e473a791e51009318..16d7a45b6345d555ccc88ff47c380345dbb97ee0 100644 (file)
@@ -24,10 +24,16 @@ import org.apache.fop.area.Block;
 import org.apache.fop.fo.flow.Wrapper;
 import org.apache.fop.layoutmgr.BlockLayoutManager;
 import org.apache.fop.layoutmgr.BlockStackingLayoutManager;
+import org.apache.fop.layoutmgr.KnuthBox;
+import org.apache.fop.layoutmgr.KnuthSequence;
 import org.apache.fop.layoutmgr.LayoutContext;
+import org.apache.fop.layoutmgr.ListElement;
 import org.apache.fop.layoutmgr.PositionIterator;
 import org.apache.fop.layoutmgr.TraitSetter;
 
+import java.util.LinkedList;
+import java.util.List;
+
 /**
  * This is the layout manager for the fo:wrapper formatting object.
  */
@@ -42,6 +48,7 @@ public class WrapperLayoutManager extends LeafNodeLayoutManager {
     }
 
     /** {@inheritDoc} */
+    @Override
     public InlineArea get(LayoutContext context) {
         // Create a zero-width, zero-height dummy area so this node can
         // participate in the ID handling. Otherwise, addId() wouldn't
@@ -54,14 +61,38 @@ public class WrapperLayoutManager extends LeafNodeLayoutManager {
         return area;
     }
 
+    /**
+     * Overridden to generate a proper {@link ListElement}, if the parent
+     * requires it (i.e. is a block-container, list-item-body...)
+     * If the parent is a block, the line LM will take care of properly
+     * wrapping the sequence in a line box.
+     * {@inheritDoc}
+     */
+    @Override
+    public List getNextKnuthElements(LayoutContext context, int alignment) {
+        List returnList = super.getNextKnuthElements(context, alignment);
+        KnuthSequence seq = (KnuthSequence) returnList.get(0);
+        ListElement tempElement = (ListElement) seq.get(0);
+        if (parentLayoutManager instanceof BlockStackingLayoutManager
+                && !(parentLayoutManager instanceof BlockLayoutManager)) {
+            // replace inline box with a block box
+            returnList = new LinkedList();
+            KnuthBox auxiliaryBox = new KnuthBox(0, tempElement.getPosition(), true);
+            returnList.add(auxiliaryBox);
+        } else {
+            // make sure the inline box is an auxiliary one
+            seq.set(0, new KnuthInlineBox(0, null, tempElement.getPosition(), true));
+        }
+        return returnList;
+    }
+
     /**
      * Add the area for this layout manager.
      * This adds the dummy area to the parent, *if* it has an id
      * - otherwise it serves no purpose.
-     *
-     * @param posIter the position iterator
-     * @param context the layout context for adding the area
+     * {@inheritDoc}
      */
+    @Override
     public void addAreas(PositionIterator posIter, LayoutContext context) {
         if (fobj.hasId()) {
             addId();