]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Jira FOP-2174: When using SVG drawings, if no content-width and content-height is...
authorChris Bowditch <cbowditch@apache.org>
Fri, 4 Jan 2013 15:11:52 +0000 (15:11 +0000)
committerChris Bowditch <cbowditch@apache.org>
Fri, 4 Jan 2013 15:11:52 +0000 (15:11 +0000)
Patch submitted by Robert Meyer (rmeyer at hotmail dot co dot uk)

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

src/java/org/apache/fop/layoutmgr/inline/ImageLayout.java
status.xml

index 31ede9aeef2e288e61391a0f5a6336609183cbca..c7a4a6a34181aa40ae5c0643eadf8ae5e1f1d5b6 100644 (file)
@@ -25,10 +25,14 @@ import java.awt.Rectangle;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
+import org.apache.xmlgraphics.util.UnitConv;
+
 import org.apache.fop.datatypes.Length;
 import org.apache.fop.datatypes.PercentBaseContext;
 import org.apache.fop.fo.Constants;
 import org.apache.fop.fo.GraphicsProperties;
+import org.apache.fop.fo.expr.PropertyException;
+import org.apache.fop.fo.flow.AbstractGraphics;
 import org.apache.fop.fo.properties.LengthRangeProperty;
 
 /**
@@ -98,9 +102,9 @@ public class ImageLayout implements Constants {
         boolean constrainIntrinsicSize = false;
         int cwidth = -1;
         int cheight = -1;
-        len = props.getContentWidth();
-        if (len.getEnum() != EN_AUTO) {
-            switch (len.getEnum()) {
+        Length lenWidth = props.getContentWidth();
+        if (lenWidth.getEnum() != EN_AUTO) {
+            switch (lenWidth.getEnum()) {
             case EN_SCALE_TO_FIT:
                 if (ipd != -1) {
                     cwidth = ipd;
@@ -120,12 +124,12 @@ public class ImageLayout implements Constants {
                 constrainIntrinsicSize = true;
                 break;
             default:
-                cwidth = len.getValue(percentBaseContext);
+                cwidth = lenWidth.getValue(percentBaseContext);
             }
         }
-        len = props.getContentHeight();
-        if (len.getEnum() != EN_AUTO) {
-            switch (len.getEnum()) {
+        Length lenHeight = props.getContentHeight();
+        if (lenHeight.getEnum() != EN_AUTO) {
+            switch (lenHeight.getEnum()) {
             case EN_SCALE_TO_FIT:
                 if (bpd != -1) {
                     cheight = bpd;
@@ -145,10 +149,21 @@ public class ImageLayout implements Constants {
                 constrainIntrinsicSize = true;
                 break;
             default:
-                cheight = len.getValue(percentBaseContext);
+                cheight = lenHeight.getValue(percentBaseContext);
             }
         }
 
+        //If no content-width or height is specified, adjust dimensions based upon the source resolution
+        int sourceResolution = 72;
+        if (props instanceof AbstractGraphics) {
+            sourceResolution = (int) ((AbstractGraphics)props).getUserAgent().getSourceResolution();
+        }
+        boolean foundNonAuto = (lenWidth.getEnum() != EN_AUTO || lenHeight.getEnum() != EN_AUTO);
+        if (!foundNonAuto) {
+            cwidth = intrinsicSize.width / (sourceResolution / UnitConv.IN2PT);
+            cheight = intrinsicSize.height / (sourceResolution / UnitConv.IN2PT);
+        }
+
         Dimension constrainedIntrinsicSize;
         if (constrainIntrinsicSize) {
             constrainedIntrinsicSize = constrain(intrinsicSize);
@@ -164,11 +179,13 @@ public class ImageLayout implements Constants {
         //Adjust viewport if not explicit
         if (ipd == -1) {
             ipd = constrainExtent(cwidth,
-                    props.getInlineProgressionDimension(), props.getContentWidth());
+                    props.getInlineProgressionDimension(), (foundNonAuto)
+                    ? props.getContentWidth() : new DefaultLength());
         }
         if (bpd == -1) {
             bpd = constrainExtent(cheight,
-                    props.getBlockProgressionDimension(), props.getContentHeight());
+                    props.getBlockProgressionDimension(), (foundNonAuto)
+                    ? props.getContentHeight() : new DefaultLength());
         }
 
         this.clip = false;
@@ -191,6 +208,36 @@ public class ImageLayout implements Constants {
         this.placement = new Rectangle(xoffset, yoffset, cwidth, cheight);
     }
 
+    private static class DefaultLength implements Length {
+        public double getNumericValue() throws PropertyException {
+            return 0;
+        }
+
+        public double getNumericValue(PercentBaseContext context) throws PropertyException {
+            return 0;
+        }
+
+        public int getDimension() {
+            return 0;
+        }
+
+        public boolean isAbsolute() {
+            return false;
+        }
+
+        public int getEnum() {
+            return 0;
+        }
+
+        public int getValue() {
+            return 0;
+        }
+
+        public int getValue(PercentBaseContext context) {
+            return 0;
+        }
+    }
+
     private int constrainExtent(int extent, LengthRangeProperty range, Length contextExtent) {
         boolean mayScaleUp = (contextExtent.getEnum() != EN_SCALE_DOWN_TO_FIT);
         boolean mayScaleDown = (contextExtent.getEnum() != EN_SCALE_UP_TO_FIT);
index 394c0bf894bcf85a1ad2579dbd0f061a6e640cbc..bec3c39749e3ba7d5e43c1ef2884426a11376743 100644 (file)
       documents. Example: the fix of marks layering will be such a case when it's done.
     -->
     <release version="FOP Trunk" date="TBD">
+      <action context="Layout" dev="CB" type="fix" fixes-bug="FOP-2174" due-to="Robert Meyer">
+        When using SVG drawings, if no content-width and content-height is specified, 72 will
+        be used instead of the source-resolution option. 
+      </action>
       <action context="Code" dev="GA" type="fix" fixes-bug="FOP-2179" due-to="Robert Meyer">
         Fix checkstyle and findbugs warnings.
       </action>