]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Bugzilla #35749:
authorJeremias Maerki <jeremias@apache.org>
Fri, 15 Jul 2005 17:52:39 +0000 (17:52 +0000)
committerJeremias Maerki <jeremias@apache.org>
Fri, 15 Jul 2005 17:52:39 +0000 (17:52 +0000)
IDs on fo:wrapper didn't register on the pages because fo:wrapper didn't have an LM that does that job for it.
The new LM for wrapper creates a dummy area so addId() can be triggered. No area is actually sent to the area tree. The WrapperLM is simply inserted before its children.

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@219226 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/layoutmgr/LayoutManagerMapping.java
src/java/org/apache/fop/layoutmgr/LeafNodeLayoutManager.java
src/java/org/apache/fop/layoutmgr/WrapperLayoutManager.java [new file with mode: 0644]

index abc54efb390a0c7471760f756ec1e75521a8ddc2..74c4d160b71b68a7c888f74bbbee8c6b30f7504a 100644 (file)
@@ -332,6 +332,9 @@ public class LayoutManagerMapping implements LayoutManagerMaker {
      
     public class WrapperLayoutManagerMaker extends Maker {
         public void make(FONode node, List lms) {
+            //We insert the wrapper LM before it's children so an ID
+            //on the node can be registered on a page.
+            lms.add(new WrapperLayoutManager((Wrapper)node));
             Iterator baseIter;
             baseIter = node.getChildNodes();
             if (baseIter == null) {
index 04c9e3136b4200915b030d865ba645cd9e0cf6c6..e0fc04dccf5894ac8f7e4ad0512e1ea8fb5a709a 100644 (file)
@@ -169,9 +169,11 @@ public abstract class LeafNodeLayoutManager extends AbstractLayoutManager
         addId();
 
         InlineArea area = getEffectiveArea();
-        offsetArea(area, context);
-        widthAdjustArea(area, context);
-        parentLM.addChildArea(area);
+        if (area.getAllocIPD() > 0 || area.getAllocBPD() > 0) {
+            offsetArea(area, context);
+            widthAdjustArea(area, context);
+            parentLM.addChildArea(area);
+        }
 
         while (posIter.hasNext()) {
             posIter.next();
diff --git a/src/java/org/apache/fop/layoutmgr/WrapperLayoutManager.java b/src/java/org/apache/fop/layoutmgr/WrapperLayoutManager.java
new file mode 100644 (file)
index 0000000..e7341b8
--- /dev/null
@@ -0,0 +1,54 @@
+/*\r
+ * Copyright 2005 The Apache Software Foundation.\r
+ * \r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * \r
+ *      http://www.apache.org/licenses/LICENSE-2.0\r
+ * \r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+/* $Id$ */\r
+\r
+package org.apache.fop.layoutmgr;\r
+\r
+import org.apache.fop.area.inline.InlineArea;\r
+import org.apache.fop.fo.flow.Wrapper;\r
+\r
+/**\r
+ * This is the layout manager for the fo:wrapper formatting object.\r
+ */\r
+public class WrapperLayoutManager extends LeafNodeLayoutManager {\r
+    \r
+    private Wrapper fobj;\r
+\r
+    /**\r
+     * Creates a new LM for fo:wrapper.\r
+     * @param node the fo:wrapper\r
+     */\r
+    public WrapperLayoutManager(Wrapper node) {\r
+        super(node);\r
+        fobj = node;\r
+    }\r
+\r
+    /** @see org.apache.fop.layoutmgr.LeafNodeLayoutManager */\r
+    public InlineArea get(LayoutContext context) {\r
+        //Create a zero-width, zero-height dummy area so this node can \r
+        //participate in the ID handling. Otherwise, addId() wouldn't \r
+        //be called.\r
+        InlineArea area = new InlineArea();\r
+        return area;\r
+    }\r
+    \r
+    /** @see org.apache.fop.layoutmgr.LeafNodeLayoutManager#addId() */\r
+    protected void addId() {\r
+        getPSLM().addIDToPage(fobj.getId());\r
+    }\r
+    \r
+}\r