diff options
author | Jeremias Maerki <jeremias@apache.org> | 2007-12-20 19:19:19 +0000 |
---|---|---|
committer | Jeremias Maerki <jeremias@apache.org> | 2007-12-20 19:19:19 +0000 |
commit | ed61f771c493e86046f3d13e3d6a553d825dd8f3 (patch) | |
tree | 045c5a0341773483443b312df7e0bd7e38670fbc | |
parent | 3311cbaf601724c5601e7ff7e6602016dbf862ac (diff) | |
download | xmlgraphics-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
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>
|