aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremias Maerki <jeremias@apache.org>2007-12-20 19:19:19 +0000
committerJeremias Maerki <jeremias@apache.org>2007-12-20 19:19:19 +0000
commited61f771c493e86046f3d13e3d6a553d825dd8f3 (patch)
tree045c5a0341773483443b312df7e0bd7e38670fbc
parent3311cbaf601724c5601e7ff7e6602016dbf862ac (diff)
downloadxmlgraphics-fop-ed61f771c493e86046f3d13e3d6a553d825dd8f3.tar.gz
xmlgraphics-fop-ed61f771c493e86046f3d13e3d6a553d825dd8f3.zip
Added support for scale-down-to-fit and scale-up-to-fit.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@606004 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--src/java/org/apache/fop/fo/Constants.java8
-rw-r--r--src/java/org/apache/fop/fo/FOPropertyMapping.java7
-rw-r--r--src/java/org/apache/fop/layoutmgr/inline/AbstractGraphicsLayoutManager.java32
-rw-r--r--status.xml3
-rw-r--r--test/layoutengine/standard-testcases/external-graphic_content-height_content-width_2.xml92
5 files changed, 136 insertions, 6 deletions
diff --git a/src/java/org/apache/fop/fo/Constants.java b/src/java/org/apache/fop/fo/Constants.java
index e0477c0a5..edfa68c1a 100644
--- a/src/java/org/apache/fop/fo/Constants.java
+++ b/src/java/org/apache/fop/fo/Constants.java
@@ -1087,6 +1087,12 @@ public interface Constants {
int EN_SMALL_CAPTION = 184;
/** Enumeration constant -- font shorthand */
int EN_STATUS_BAR = 185;
+ /** Enumeration constant -- for page-position, XSL 1.1 */
+ int EN_ONLY = 186;
+ /** Enumeration constant -- for instream-foreign-object and external-graphic, XSL 1.1 */
+ int EN_SCALE_DOWN_TO_FIT = 187;
+ /** Enumeration constant -- for instream-foreign-object and external-graphic, XSL 1.1 */
+ int EN_SCALE_UP_TO_FIT = 188;
/** Number of enumeration constants defined */
- int ENUM_COUNT = 185;
+ int ENUM_COUNT = 188;
}
diff --git a/src/java/org/apache/fop/fo/FOPropertyMapping.java b/src/java/org/apache/fop/fo/FOPropertyMapping.java
index 5d1a6f31a..1fe9a32c4 100644
--- a/src/java/org/apache/fop/fo/FOPropertyMapping.java
+++ b/src/java/org/apache/fop/fo/FOPropertyMapping.java
@@ -25,13 +25,13 @@ import java.util.Map;
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.datatypes.LengthBase;
import org.apache.fop.fo.expr.PropertyException;
+import org.apache.fop.fo.flow.table.TableFObj.ColumnNumberPropertyMaker;
import org.apache.fop.fo.properties.BackgroundPositionShorthandParser;
import org.apache.fop.fo.properties.BorderSpacingShorthandParser;
import org.apache.fop.fo.properties.BorderWidthPropertyMaker;
import org.apache.fop.fo.properties.BoxPropShorthandParser;
import org.apache.fop.fo.properties.CharacterProperty;
import org.apache.fop.fo.properties.ColorProperty;
-import org.apache.fop.fo.flow.table.TableFObj.ColumnNumberPropertyMaker;
import org.apache.fop.fo.properties.CondLengthProperty;
import org.apache.fop.fo.properties.CorrespondingPropertyMaker;
import org.apache.fop.fo.properties.DimensionPropertyMaker;
@@ -1353,6 +1353,8 @@ public final class FOPropertyMapping implements Constants {
l.setInherited(false);
l.addEnum("auto", getEnumProperty(EN_AUTO, "AUTO"));
l.addEnum("scale-to-fit", getEnumProperty(EN_SCALE_TO_FIT, "SCALE_TO_FIT"));
+ l.addEnum("scale-down-to-fit", getEnumProperty(EN_SCALE_DOWN_TO_FIT, "SCALE_DOWN_TO_FIT"));
+ l.addEnum("scale-up-to-fit", getEnumProperty(EN_SCALE_UP_TO_FIT, "SCALE_UP_TO_FIT"));
l.setDefault("auto");
l.setPercentBase(LengthBase.IMAGE_INTRINSIC_HEIGHT);
addPropertyMaker("content-height", l);
@@ -1362,6 +1364,8 @@ public final class FOPropertyMapping implements Constants {
l.setInherited(false);
l.addEnum("auto", getEnumProperty(EN_AUTO, "AUTO"));
l.addEnum("scale-to-fit", getEnumProperty(EN_SCALE_TO_FIT, "SCALE_TO_FIT"));
+ l.addEnum("scale-down-to-fit", getEnumProperty(EN_SCALE_DOWN_TO_FIT, "SCALE_DOWN_TO_FIT"));
+ l.addEnum("scale-up-to-fit", getEnumProperty(EN_SCALE_UP_TO_FIT, "SCALE_UP_TO_FIT"));
l.setDefault("auto");
l.setPercentBase(LengthBase.IMAGE_INTRINSIC_WIDTH);
addPropertyMaker("content-width", l);
@@ -2223,6 +2227,7 @@ public final class FOPropertyMapping implements Constants {
m.addEnum("last", getEnumProperty(EN_LAST, "LAST"));
m.addEnum("rest", getEnumProperty(EN_REST, "REST"));
m.addEnum("any", getEnumProperty(EN_ANY, "ANY"));
+ m.addEnum("only", getEnumProperty(EN_ONLY, "ONLY")); //XSL 1.1
m.setDefault("any");
addPropertyMaker("page-position", m);
diff --git a/src/java/org/apache/fop/layoutmgr/inline/AbstractGraphicsLayoutManager.java b/src/java/org/apache/fop/layoutmgr/inline/AbstractGraphicsLayoutManager.java
index ca82d3da7..75f852e06 100644
--- a/src/java/org/apache/fop/layoutmgr/inline/AbstractGraphicsLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/inline/AbstractGraphicsLayoutManager.java
@@ -104,21 +104,45 @@ public abstract class AbstractGraphicsLayoutManager extends LeafNodeLayoutManage
int cheight = -1;
len = fobj.getContentWidth();
if (len.getEnum() != EN_AUTO) {
- if (len.getEnum() == EN_SCALE_TO_FIT) {
+ switch (len.getEnum()) {
+ case EN_SCALE_TO_FIT:
if (ipd != -1) {
cwidth = ipd;
}
- } else {
+ break;
+ case EN_SCALE_DOWN_TO_FIT:
+ if (ipd != -1 && fobj.getIntrinsicWidth() > ipd) {
+ cwidth = ipd;
+ }
+ break;
+ case EN_SCALE_UP_TO_FIT:
+ if (ipd != -1 && fobj.getIntrinsicWidth() < ipd) {
+ cwidth = ipd;
+ }
+ break;
+ default:
cwidth = len.getValue(this);
}
}
len = fobj.getContentHeight();
if (len.getEnum() != EN_AUTO) {
- if (len.getEnum() == EN_SCALE_TO_FIT) {
+ switch (len.getEnum()) {
+ case EN_SCALE_TO_FIT:
if (bpd != -1) {
cheight = bpd;
}
- } else {
+ break;
+ case EN_SCALE_DOWN_TO_FIT:
+ if (bpd != -1 && fobj.getIntrinsicHeight() > bpd) {
+ cheight = bpd;
+ }
+ break;
+ case EN_SCALE_UP_TO_FIT:
+ if (bpd != -1 && fobj.getIntrinsicHeight() < bpd) {
+ cheight = bpd;
+ }
+ break;
+ default:
cheight = len.getValue(this);
}
}
diff --git a/status.xml b/status.xml
index 7487d67a0..0537ad75d 100644
--- a/status.xml
+++ b/status.xml
@@ -28,6 +28,9 @@
<changes>
<release version="FOP Trunk">
+ <action context="Code" dev="JM" type="add">
+ Added support for scale-down-to-fit and scale-up-to-fit (introduced in XSL 1.1).
+ </action>
<action context="Code" dev="VH" type="fix" fixes-bug="43633">
Bugfix: content of a row with zero height overriding the previous row
</action>
diff --git a/test/layoutengine/standard-testcases/external-graphic_content-height_content-width_2.xml b/test/layoutengine/standard-testcases/external-graphic_content-height_content-width_2.xml
new file mode 100644
index 000000000..281da9873
--- /dev/null
+++ b/test/layoutengine/standard-testcases/external-graphic_content-height_content-width_2.xml
@@ -0,0 +1,92 @@
+<?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>
+ This test checks external-graphics with content-width
+ (values: scale-to-fit, scale-down-to-fit and scale-up-to-fit)
+ </p>
+ </info>
+ <fo>
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+ <fo:layout-master-set>
+ <fo:simple-page-master master-name="normal" page-width="5in" page-height="5in">
+ <fo:region-body/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <fo:page-sequence master-reference="normal" font-size="0" line-height="1">
+ <fo:flow flow-name="xsl-region-body">
+ <fo:block>
+ <fo:external-graphic id="img1" src="../../resources/images/bgimg72dpi.jpg"/>
+ </fo:block>
+ <fo:block>
+ <fo:external-graphic id="img2" src="../../resources/images/bgimg72dpi.jpg"
+ inline-progression-dimension="250pt" block-progression-dimension="250pt"
+ content-height="scale-to-fit" content-width="scale-to-fit"/>
+ </fo:block>
+ <fo:block>
+ <fo:external-graphic id="img3" src="../../resources/images/bgimg72dpi.jpg"
+ inline-progression-dimension="250pt" block-progression-dimension="250pt"
+ content-height="scale-down-to-fit" content-width="scale-down-to-fit"/>
+ </fo:block>
+ <fo:block>
+ <fo:external-graphic id="img4" src="../../resources/images/bgimg72dpi.jpg"
+ inline-progression-dimension="250pt" block-progression-dimension="250pt"
+ content-height="scale-up-to-fit" content-width="scale-up-to-fit"/>
+ </fo:block>
+ <fo:block>
+ <fo:external-graphic id="img5" src="../../resources/images/bgimg300dpi.jpg"
+ inline-progression-dimension="250pt" block-progression-dimension="250pt"
+ content-height="scale-down-to-fit" content-width="scale-down-to-fit"/>
+ </fo:block>
+ <fo:block>
+ <fo:external-graphic id="img6" src="../../resources/images/bgimg300dpi.jpg"
+ inline-progression-dimension="250pt" block-progression-dimension="250pt"
+ content-height="scale-up-to-fit" content-width="scale-up-to-fit"/>
+ </fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+ </fo:root>
+ </fo>
+ <checks>
+ <eval expected="192000" xpath="//image[@prod-id='img1']/../@ipd"/>
+ <eval expected="192000" xpath="//image[@prod-id='img1']/../@bpd"/>
+ <eval expected="0 0 192000 192000" xpath="//image[@prod-id='img1']/../@pos"/>
+
+ <eval expected="250000" xpath="//image[@prod-id='img2']/../@ipd"/>
+ <eval expected="250000" xpath="//image[@prod-id='img2']/../@bpd"/>
+ <eval expected="0 0 250000 250000" xpath="//image[@prod-id='img2']/../@pos"/>
+
+ <eval expected="250000" xpath="//image[@prod-id='img3']/../@ipd"/>
+ <eval expected="250000" xpath="//image[@prod-id='img3']/../@bpd"/>
+ <eval expected="0 0 192000 192000" xpath="//image[@prod-id='img3']/../@pos"/>
+
+ <eval expected="250000" xpath="//image[@prod-id='img4']/../@ipd"/>
+ <eval expected="250000" xpath="//image[@prod-id='img4']/../@bpd"/>
+ <eval expected="0 0 250000 250000" xpath="//image[@prod-id='img4']/../@pos"/>
+
+ <eval expected="250000" xpath="//image[@prod-id='img5']/../@ipd"/>
+ <eval expected="250000" xpath="//image[@prod-id='img5']/../@bpd"/>
+ <eval expected="0 0 46080 46080" xpath="//image[@prod-id='img5']/../@pos"/>
+
+ <eval expected="250000" xpath="//image[@prod-id='img6']/../@ipd"/>
+ <eval expected="250000" xpath="//image[@prod-id='img6']/../@bpd"/>
+ <eval expected="0 0 250000 250000" xpath="//image[@prod-id='img6']/../@pos"/>
+ </checks>
+</testcase>