]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Added support for scale-down-to-fit and scale-up-to-fit.
authorJeremias Maerki <jeremias@apache.org>
Thu, 20 Dec 2007 19:19:19 +0000 (19:19 +0000)
committerJeremias Maerki <jeremias@apache.org>
Thu, 20 Dec 2007 19:19:19 +0000 (19:19 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@606004 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/fo/Constants.java
src/java/org/apache/fop/fo/FOPropertyMapping.java
src/java/org/apache/fop/layoutmgr/inline/AbstractGraphicsLayoutManager.java
status.xml
test/layoutengine/standard-testcases/external-graphic_content-height_content-width_2.xml [new file with mode: 0644]

index e0477c0a5b2cc7590c524bff3e899c5469515bb2..edfa68c1ac499e666df1b5f5cfa8be68c9ef110f 100644 (file)
@@ -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;
 }
index 5d1a6f31ab4be01528d83dbc15cfba16df7ff44e..1fe9a32c4453378509f753eed3d6717fac5a84d5 100644 (file)
@@ -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);
 
index ca82d3da7941b7bec6138eec1b0f50fb339b7092..75f852e064a6da7b5526d562b5d7d02be67e732d 100644 (file)
@@ -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);
             }
         }
index 7487d67a05073734f306331dac06d89375b26f8d..0537ad75d8c9e30733d03f0174cbdcdcfa106f85 100644 (file)
@@ -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 (file)
index 0000000..281da98
--- /dev/null
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--\r
+  Licensed to the Apache Software Foundation (ASF) under one or more\r
+  contributor license agreements.  See the NOTICE file distributed with\r
+  this work for additional information regarding copyright ownership.\r
+  The ASF licenses this file to You under the Apache License, Version 2.0\r
+  (the "License"); you may not use this file except in compliance with\r
+  the License.  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
+<!-- $Id$ -->\r
+<testcase>\r
+  <info>\r
+    <p>\r
+      This test checks external-graphics with content-width
+      (values: scale-to-fit, scale-down-to-fit and scale-up-to-fit)\r
+    </p>\r
+  </info>\r
+  <fo>\r
+    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">\r
+      <fo:layout-master-set>\r
+        <fo:simple-page-master master-name="normal" page-width="5in" page-height="5in">\r
+          <fo:region-body/>\r
+        </fo:simple-page-master>\r
+      </fo:layout-master-set>\r
+      <fo:page-sequence master-reference="normal" font-size="0" line-height="1">\r
+        <fo:flow flow-name="xsl-region-body">\r
+          <fo:block>\r
+            <fo:external-graphic id="img1" src="../../resources/images/bgimg72dpi.jpg"/>\r
+          </fo:block>\r
+          <fo:block>\r
+            <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"/>\r
+          </fo:block>\r
+          <fo:block>\r
+            <fo:external-graphic id="img3" src="../../resources/images/bgimg72dpi.jpg"\r
+              inline-progression-dimension="250pt" block-progression-dimension="250pt"\r
+              content-height="scale-down-to-fit" content-width="scale-down-to-fit"/>\r
+          </fo:block>\r
+          <fo:block>\r
+            <fo:external-graphic id="img4" src="../../resources/images/bgimg72dpi.jpg"\r
+              inline-progression-dimension="250pt" block-progression-dimension="250pt"\r
+              content-height="scale-up-to-fit" content-width="scale-up-to-fit"/>\r
+          </fo:block>\r
+          <fo:block>\r
+            <fo:external-graphic id="img5" src="../../resources/images/bgimg300dpi.jpg"\r
+              inline-progression-dimension="250pt" block-progression-dimension="250pt"\r
+              content-height="scale-down-to-fit" content-width="scale-down-to-fit"/>\r
+          </fo:block>\r
+          <fo:block>\r
+            <fo:external-graphic id="img6" src="../../resources/images/bgimg300dpi.jpg"\r
+              inline-progression-dimension="250pt" block-progression-dimension="250pt"\r
+              content-height="scale-up-to-fit" content-width="scale-up-to-fit"/>\r
+          </fo:block>\r
+        </fo:flow>\r
+      </fo:page-sequence>\r
+    </fo:root>\r
+  </fo>\r
+  <checks>\r
+    <eval expected="192000" xpath="//image[@prod-id='img1']/../@ipd"/>\r
+    <eval expected="192000" xpath="//image[@prod-id='img1']/../@bpd"/>
+    <eval expected="0 0 192000 192000" xpath="//image[@prod-id='img1']/../@pos"/>\r
+    \r
+    <eval expected="250000" xpath="//image[@prod-id='img2']/../@ipd"/>\r
+    <eval expected="250000" xpath="//image[@prod-id='img2']/../@bpd"/>
+    <eval expected="0 0 250000 250000" xpath="//image[@prod-id='img2']/../@pos"/>\r
+    \r
+    <eval expected="250000" xpath="//image[@prod-id='img3']/../@ipd"/>\r
+    <eval expected="250000" xpath="//image[@prod-id='img3']/../@bpd"/>
+    <eval expected="0 0 192000 192000" xpath="//image[@prod-id='img3']/../@pos"/>\r
+    \r
+    <eval expected="250000" xpath="//image[@prod-id='img4']/../@ipd"/>\r
+    <eval expected="250000" xpath="//image[@prod-id='img4']/../@bpd"/>\r
+    <eval expected="0 0 250000 250000" xpath="//image[@prod-id='img4']/../@pos"/>\r
+
+    <eval expected="250000" xpath="//image[@prod-id='img5']/../@ipd"/>\r
+    <eval expected="250000" xpath="//image[@prod-id='img5']/../@bpd"/>\r
+    <eval expected="0 0 46080 46080" xpath="//image[@prod-id='img5']/../@pos"/>\r
+    \r
+    <eval expected="250000" xpath="//image[@prod-id='img6']/../@ipd"/>\r
+    <eval expected="250000" xpath="//image[@prod-id='img6']/../@bpd"/>\r
+    <eval expected="0 0 250000 250000" xpath="//image[@prod-id='img6']/../@pos"/>\r
+  </checks>\r
+</testcase>\r