]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
FOP-2217; Image scaling change was adversely affecting other image types
authorChris Bowditch <cbowditch@apache.org>
Tue, 5 Mar 2013 15:45:13 +0000 (15:45 +0000)
committerChris Bowditch <cbowditch@apache.org>
Tue, 5 Mar 2013 15:45:13 +0000 (15:45 +0000)
Submitted by Robert Meyer (rmeyer.at.hotmail.co.uk)

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

lib/xmlgraphics-commons-svn-trunk.jar
src/java/org/apache/fop/fo/extensions/svg/SVGElement.java
src/java/org/apache/fop/layoutmgr/inline/ImageLayout.java
status.xml
test/java/org/apache/fop/layoutmgr/inline/ImageLayoutTestCase.java [deleted file]

index 453ba2e66f48d3483da5020bc6f54fdcefc771ae..9b0b4b61b95a12608de43171d785b120e57df24e 100644 (file)
Binary files a/lib/xmlgraphics-commons-svn-trunk.jar and b/lib/xmlgraphics-commons-svn-trunk.jar differ
index 577efcdf4985722cdf3f17ead8ddbb0a03f5c008..5c6ab16ad17257e822fd99cf192a0049d50f9aab 100644 (file)
@@ -145,7 +145,8 @@ public class SVGElement extends SVGObj {
         Point2D p2d = getSize(fontSize, svgRoot, getUserAgent().getSourcePixelUnitToMillimeter());
         e.setSVGContext(null);
 
-        return p2d;
+        double pixelToPoint = 72d / getUserAgent().getSourceResolution();
+        return new Point2D.Double(p2d.getX() * pixelToPoint, p2d.getY() * pixelToPoint);
     }
 
     /**
index 627fd29df7f42f06e1d85d4b82b908d05585b2ba..31ede9aeef2e288e61391a0f5a6336609183cbca 100644 (file)
@@ -25,14 +25,10 @@ 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;
 
 /**
@@ -102,9 +98,9 @@ public class ImageLayout implements Constants {
         boolean constrainIntrinsicSize = false;
         int cwidth = -1;
         int cheight = -1;
-        Length lenWidth = props.getContentWidth();
-        if (lenWidth.getEnum() != EN_AUTO) {
-            switch (lenWidth.getEnum()) {
+        len = props.getContentWidth();
+        if (len.getEnum() != EN_AUTO) {
+            switch (len.getEnum()) {
             case EN_SCALE_TO_FIT:
                 if (ipd != -1) {
                     cwidth = ipd;
@@ -124,12 +120,12 @@ public class ImageLayout implements Constants {
                 constrainIntrinsicSize = true;
                 break;
             default:
-                cwidth = lenWidth.getValue(percentBaseContext);
+                cwidth = len.getValue(percentBaseContext);
             }
         }
-        Length lenHeight = props.getContentHeight();
-        if (lenHeight.getEnum() != EN_AUTO) {
-            switch (lenHeight.getEnum()) {
+        len = props.getContentHeight();
+        if (len.getEnum() != EN_AUTO) {
+            switch (len.getEnum()) {
             case EN_SCALE_TO_FIT:
                 if (bpd != -1) {
                     cheight = bpd;
@@ -149,21 +145,10 @@ public class ImageLayout implements Constants {
                 constrainIntrinsicSize = true;
                 break;
             default:
-                cheight = lenHeight.getValue(percentBaseContext);
+                cheight = len.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 = (int)(intrinsicSize.width / ((float)sourceResolution / (float)UnitConv.IN2PT));
-            cheight = (int)(intrinsicSize.height / ((float)sourceResolution / (float)UnitConv.IN2PT));
-        }
-
         Dimension constrainedIntrinsicSize;
         if (constrainIntrinsicSize) {
             constrainedIntrinsicSize = constrain(intrinsicSize);
@@ -179,13 +164,11 @@ public class ImageLayout implements Constants {
         //Adjust viewport if not explicit
         if (ipd == -1) {
             ipd = constrainExtent(cwidth,
-                    props.getInlineProgressionDimension(), (foundNonAuto)
-                            ? props.getContentWidth() : new DefaultLength());
+                    props.getInlineProgressionDimension(), props.getContentWidth());
         }
         if (bpd == -1) {
             bpd = constrainExtent(cheight,
-                    props.getBlockProgressionDimension(), (foundNonAuto)
-                            ? props.getContentHeight() : new DefaultLength());
+                    props.getBlockProgressionDimension(), props.getContentHeight());
         }
 
         this.clip = false;
@@ -208,36 +191,6 @@ 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 b319a2ae6c742367626492680c84bf0684eae4f4..f19fd5963d499b2ba07b1f96e70cc85c523ed9c4 100644 (file)
@@ -59,6 +59,9 @@
       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-2217" due-to="Robert Meyer">
+        Image scaling change was adversely affecting other image types 
+      </action>
       <action context="Renderers" dev="CB" type="fix" fixes-bug="FOP-2214" due-to="Simon Steiner">
         Thin dashed border look like dots
       </action>        
diff --git a/test/java/org/apache/fop/layoutmgr/inline/ImageLayoutTestCase.java b/test/java/org/apache/fop/layoutmgr/inline/ImageLayoutTestCase.java
deleted file mode 100644 (file)
index b652aaf..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.apache.fop.layoutmgr.inline;
-
-import java.awt.Dimension;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import org.apache.fop.apps.FOUserAgent;
-import org.apache.fop.datatypes.Length;
-import org.apache.fop.fo.flow.AbstractGraphics;
-import org.apache.fop.fo.properties.EnumLength;
-import org.apache.fop.fo.properties.EnumProperty;
-import org.apache.fop.fo.properties.LengthRangeProperty;
-import org.apache.fop.fo.properties.Property;
-
-import static org.junit.Assert.assertEquals;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-public class ImageLayoutTestCase {
-
-    private AbstractGraphics gfxProps;
-
-    /**
-     * Initializes the resources needed to run the scaling unit test
-     */
-    @Before
-    public void setUp() {
-        gfxProps = mock(AbstractGraphics.class);
-
-        Property enumProp = EnumProperty.getInstance(9, "AUTO");
-        Length len = new EnumLength(enumProp);
-        len.getEnum();
-
-        LengthRangeProperty lenRangeProp = mock(LengthRangeProperty.class);
-        when(lenRangeProp.getMinimum(null)).thenReturn(enumProp);
-        when(lenRangeProp.getMaximum(null)).thenReturn(enumProp);
-        when(lenRangeProp.getOptimum(null)).thenReturn(enumProp);
-
-        when(gfxProps.getBlockProgressionDimension()).thenReturn(lenRangeProp);
-        when(gfxProps.getInlineProgressionDimension()).thenReturn(lenRangeProp);
-
-        //All values should be set to AUTO to test when no content-width or height has been specified
-        when(gfxProps.getBlockProgressionDimension().getOptimum(null)).thenReturn(enumProp);
-        when(gfxProps.getBlockProgressionDimension().getOptimum(null).getLength()).thenReturn(len);
-        when(gfxProps.getBlockProgressionDimension().getMinimum(null)).thenReturn(enumProp);
-        when(gfxProps.getBlockProgressionDimension().getMinimum(null).getLength()).thenReturn(len);
-        when(gfxProps.getBlockProgressionDimension().getMaximum(null)).thenReturn(enumProp);
-        when(gfxProps.getBlockProgressionDimension().getMaximum(null).getLength()).thenReturn(len);
-        when(gfxProps.getInlineProgressionDimension().getOptimum(null)).thenReturn(enumProp);
-        when(gfxProps.getInlineProgressionDimension().getOptimum(null).getLength()).thenReturn(len);
-        when(gfxProps.getInlineProgressionDimension().getMinimum(null)).thenReturn(enumProp);
-        when(gfxProps.getInlineProgressionDimension().getMinimum(null).getLength()).thenReturn(len);
-        when(gfxProps.getInlineProgressionDimension().getMaximum(null)).thenReturn(enumProp);
-        when(gfxProps.getInlineProgressionDimension().getMaximum(null).getLength()).thenReturn(len);
-
-        when(gfxProps.getContentWidth()).thenReturn(len);
-        when(gfxProps.getContentHeight()).thenReturn(len);
-    }
-
-    /**
-     * Tests different levels of scaling to see if they match an expected result
-     */
-    @Test
-    public void testImageScaling() {
-        testScaling(114.0f, new Dimension(990000, 765000), 625263.0f, 483157.0f);
-        testScaling(96.0f, new Dimension(990000, 765000), 742500.0f, 573750.0f);
-        testScaling(72.0f, new Dimension(990000, 765000), 990000.0f, 765000.0f);
-    }
-
-    private void testScaling(float sourceResolution, Dimension intrinsicSize,
-            float targetWidth, float targetHeight) {
-        FOUserAgent userAgent = mock(FOUserAgent.class);
-        when(userAgent.getSourceResolution()).thenReturn(sourceResolution);
-        when(gfxProps.getUserAgent()).thenReturn(userAgent);
-
-        ImageLayout imgLayout = new ImageLayout(gfxProps, null, intrinsicSize);
-        assertEquals(imgLayout.getViewportSize().getWidth(), targetWidth, 0.0f);
-        assertEquals(imgLayout.getViewportSize().getHeight(), targetHeight, 0.0f);
-    }
-}