Author: cbowditch
Date: Fri Jan  4 15:11:52 2013
New Revision: 1428918

URL: http://svn.apache.org/viewvc?rev=1428918&view=rev
Log:
Jira FOP-2174: When using SVG drawings, if no content-width and content-height 
is specified, 72 will be used instead of the source-resolution option
Patch submitted by Robert Meyer (rmeyer at hotmail dot co dot uk)

Modified:
    
xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/inline/ImageLayout.java
    xmlgraphics/fop/trunk/status.xml

Modified: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/inline/ImageLayout.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/inline/ImageLayout.java?rev=1428918&r1=1428917&r2=1428918&view=diff
==============================================================================
--- 
xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/inline/ImageLayout.java 
(original)
+++ 
xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/inline/ImageLayout.java 
Fri Jan  4 15:11:52 2013
@@ -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 Cons
         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 Cons
                 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 Cons
                 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 Cons
         //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 Cons
         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);

Modified: xmlgraphics/fop/trunk/status.xml
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/status.xml?rev=1428918&r1=1428917&r2=1428918&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/status.xml (original)
+++ xmlgraphics/fop/trunk/status.xml Fri Jan  4 15:11:52 2013
@@ -59,6 +59,10 @@
       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>



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to