aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/java/org/apache/fop/layoutmgr/inline/InlineContainerLayoutManager.java27
-rw-r--r--test/layoutengine/standard-testcases/inline-container_ipd-auto.xml (renamed from test/layoutengine/standard-testcases/inline-container_auto-ipd.xml)0
-rw-r--r--test/layoutengine/standard-testcases/inline-container_ipd-percent.xml61
3 files changed, 77 insertions, 11 deletions
diff --git a/src/java/org/apache/fop/layoutmgr/inline/InlineContainerLayoutManager.java b/src/java/org/apache/fop/layoutmgr/inline/InlineContainerLayoutManager.java
index a51d64c2c..7e2b186be 100644
--- a/src/java/org/apache/fop/layoutmgr/inline/InlineContainerLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/inline/InlineContainerLayoutManager.java
@@ -95,32 +95,37 @@ public class InlineContainerLayoutManager extends AbstractLayoutManager implemen
private void determineIPD(LayoutContext layoutContext) {
LengthRangeProperty ipd = ((InlineContainer) fobj).getInlineProgressionDimension();
- Property optimum = ipd.getOptimum(this); // TODO percent base context
+ Property optimum = ipd.getOptimum(this);
if (optimum.isAuto()) {
contentAreaIPD = layoutContext.getRefIPD();
InlineLevelEventProducer eventProducer = InlineLevelEventProducer.Provider.get(
fobj.getUserAgent().getEventBroadcaster());
eventProducer.inlineContainerAutoIPDNotSupported(this, contentAreaIPD / 1000f);
} else {
- contentAreaIPD = optimum.getLength().getValue(this); // TODO percent base context
+ contentAreaIPD = optimum.getLength().getValue(this);
}
}
private void determineBPD() {
LengthRangeProperty bpd = ((InlineContainer) fobj).getBlockProgressionDimension();
- Property optimum = bpd.getOptimum(this); // TODO percent base context
+ Property optimum = bpd.getOptimum(this);
int actualBPD = ElementListUtils.calcContentLength(childElements);
if (optimum.isAuto()) {
contentAreaBPD = actualBPD;
} else {
- contentAreaBPD = optimum.getLength().getValue(this); // TODO percent base context
- if (contentAreaBPD < actualBPD) {
- BlockLevelEventProducer eventProducer = BlockLevelEventProducer.Provider.get(
- fobj.getUserAgent().getEventBroadcaster());
- boolean canRecover = (((InlineContainer) fobj).getOverflow() != EN_ERROR_IF_OVERFLOW);
- eventProducer.viewportBPDOverflow(this, fobj.getName(),
- actualBPD - contentAreaBPD, needClip(), canRecover,
- fobj.getLocator());
+ double bpdValue = optimum.getLength().getNumericValue(this);
+ if (bpdValue < 0) {
+ contentAreaBPD = actualBPD;
+ } else {
+ contentAreaBPD = (int) Math.round(bpdValue);
+ if (contentAreaBPD < actualBPD) {
+ BlockLevelEventProducer eventProducer = BlockLevelEventProducer.Provider.get(
+ fobj.getUserAgent().getEventBroadcaster());
+ boolean canRecover = (((InlineContainer) fobj).getOverflow() != EN_ERROR_IF_OVERFLOW);
+ eventProducer.viewportBPDOverflow(this, fobj.getName(),
+ actualBPD - contentAreaBPD, needClip(), canRecover,
+ fobj.getLocator());
+ }
}
}
}
diff --git a/test/layoutengine/standard-testcases/inline-container_auto-ipd.xml b/test/layoutengine/standard-testcases/inline-container_ipd-auto.xml
index 0833d7f0d..0833d7f0d 100644
--- a/test/layoutengine/standard-testcases/inline-container_auto-ipd.xml
+++ b/test/layoutengine/standard-testcases/inline-container_ipd-auto.xml
diff --git a/test/layoutengine/standard-testcases/inline-container_ipd-percent.xml b/test/layoutengine/standard-testcases/inline-container_ipd-percent.xml
new file mode 100644
index 000000000..aa681d134
--- /dev/null
+++ b/test/layoutengine/standard-testcases/inline-container_ipd-percent.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<testcase>
+ <info>
+ <p>
+ Checks that percentage values for the dimensions of an fo:inline-container are resolved
+ properly.
+ </p>
+ </info>
+ <fo>
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" font-size="8pt" line-height="10pt">
+ <fo:layout-master-set>
+ <fo:simple-page-master master-name="page"
+ page-height="220pt" page-width="320pt" margin="10pt">
+ <fo:region-body/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <fo:page-sequence master-reference="page">
+ <fo:flow flow-name="xsl-region-body">
+ <fo:block>Before: <fo:inline-container width="50%" height="50%">
+ <fo:block>Text inside inline-container.</fo:block>
+ </fo:inline-container> After.</fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+ <fo:page-sequence master-reference="page">
+ <fo:flow flow-name="xsl-region-body">
+ <fo:block-container space-before="10pt" start-indent="50pt" width="200pt">
+ <fo:block start-indent="0">
+ Before: <fo:inline-container width="30%" height="30%">
+ <fo:block>Inside the inline-container.</fo:block>
+ </fo:inline-container> After.
+ </fo:block>
+ </fo:block-container>
+ </fo:flow>
+ </fo:page-sequence>
+ </fo:root>
+ </fo>
+
+ <checks>
+ <eval expected="150000" xpath="//pageSequence[1]//flow/block/lineArea/viewport/@ipd"/>
+ <eval expected="10000" xpath="//pageSequence[1]//flow/block/lineArea/viewport/@bpd"/>
+ <eval expected="60000" xpath="//pageSequence[2]//flow/block/block/block/lineArea/viewport/@ipd"/>
+ <eval expected="20000" xpath="//pageSequence[2]//flow/block/block/block/lineArea/viewport/@bpd"/>
+ </checks>
+</testcase>