From 0f20fb70bc3c4e6f7f3c58f3a9afc1e884769cea Mon Sep 17 00:00:00 2001 From: Adrian Cumiskey Date: Wed, 20 Aug 2008 15:22:03 +0000 Subject: [PATCH] Merged revisions 687323,687327,687365,687369 via svnmerge from https://svn.eu.apache.org/repos/asf/xmlgraphics/fop/trunk ........ r687323 | maxberger | 2008-08-20 14:24:18 +0100 (Wed, 20 Aug 2008) | 1 line valueOf is Java 1.5+ only ........ r687327 | maxberger | 2008-08-20 14:32:19 +0100 (Wed, 20 Aug 2008) | 1 line Use retroweaver for 1.4 verification ........ r687365 | maxberger | 2008-08-20 16:00:03 +0100 (Wed, 20 Aug 2008) | 1 line Boolean.valueOf() is available in 1.4, but retroweaver still tried to weave it ........ r687369 | acumiskey | 2008-08-20 16:13:56 +0100 (Wed, 20 Aug 2008) | 3 lines * Updated xmlgraphics-commons-14svn.jar to reflect UnitConv additions. * Removed UnitConv and its unit test case (now resides in commons). * Updated all fop util package references fpr UnitConv to xmlgraphics commons util package. ........ git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/Temp_AFPGOCAResources@687372 13f79535-47bb-0310-9956-ffa450edef68 --- build.properties | 9 +- build.xml | 25 ++- lib/xmlgraphics-commons-1.4svn.jar | Bin 525383 -> 522587 bytes .../fop/render/AbstractGraphics2DAdapter.java | 2 +- .../render/AbstractPathOrientedRenderer.java | 8 +- .../apache/fop/render/pcl/PCLGenerator.java | 9 +- .../apache/fop/render/pcl/PCLGraphics2D.java | 4 +- .../fop/render/pcl/PCLGraphics2DAdapter.java | 4 +- .../fop/render/pcl/PCLPageDefinition.java | 12 +- .../apache/fop/render/pcl/PCLRenderer.java | 20 +-- .../apache/fop/render/txt/TXTRenderer.java | 8 +- src/java/org/apache/fop/util/UnitConv.java | 158 ------------------ .../org/apache/fop/UtilityCodeTestSuite.java | 6 +- .../org/apache/fop/util/UnitConvTestCase.java | 46 ----- 14 files changed, 64 insertions(+), 247 deletions(-) delete mode 100644 src/java/org/apache/fop/util/UnitConv.java delete mode 100644 test/java/org/apache/fop/util/UnitConvTestCase.java diff --git a/build.properties b/build.properties index 2a8b4c80c..c5e483204 100644 --- a/build.properties +++ b/build.properties @@ -17,6 +17,13 @@ ## checkstyle binary distribution. # checkstyle.home.dir = /home/bart/stuff/checkstyle-4.0-beta6 +## Path to the java 1.4 runtime libary (rt.jar on most systems) +## On OS X this is /System/Library/Frameworks/JavaVM.framework/Versions/1.4/Classes/classes.jar +#java14.rt.lib=/opt/j2re1.4.2_07/lib/rt.jar +## Path to the java 1.4 jce libary (jce.jar on most systems) +## On OS X this is /System/Library/Frameworks/JavaVM.framework/Versions/1.4/Classes/jce.jar +#java14.jce.lib=/opt/j2re1.4.2_07/lib/jce.jar + ## =================================================================== ## 2. Switches for common tasks @@ -44,4 +51,4 @@ ## Specify an alternate directory to scan for user supplied ## hyphenation pattern files. -# user.hyph.dir = /home/bart/offo \ No newline at end of file +# user.hyph.dir = /home/bart/offo diff --git a/build.xml b/build.xml index c46468d7a..461356242 100644 --- a/build.xml +++ b/build.xml @@ -459,15 +459,32 @@ list of possible build targets. - - + + + + + + + + + + + + diff --git a/lib/xmlgraphics-commons-1.4svn.jar b/lib/xmlgraphics-commons-1.4svn.jar index f9338881aeb6d7800c04457d28965fb985de34f5..4317a42a66e367718fce6fc1e00e2992560cf4fd 100644 GIT binary patch delta 27619 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�nF9<&W?WMaZ0wz zb1$GE{2R0Pc|7+stZw#gX0YDpHV^9e7 zKOke){9eU>gyVP?7G-1erZS3$!We6N-su}BN9FGY8jg-PSGYR26AJrwb@bu`#Q8Iw zBE}bj?+SjPSpQd;`dNF5Ijl9Hl!J0wl(=-sX15^q5d_tt>Cr)Fb)y^L=hMRVPjsVQ zoDR9tPo*;Ag$}C3;}N z$Ok&)OrIXonsL+988o}M3OUjFLo(zXtmx3L6Ur97j|y$-if|jK3prA=Vof}M*m3Ub zkN&%tej3X7o6_uJIY(9(!*uR2MvbD?-#WU|Y?9l8M^1CEIS5DJy<&C5NXFlekBED% z_7P{XH(kQHG(z!BpRqLku-1zA@bF=nNla#9O{n$}Ett!e-+r0h0{!|NIc&Hh>z>M3 z8-O2(T7w3+J zC6EgLNvAqfyH$=B!`3r~*V-lUw~xxK;MlBYpUz*4@{VFY4?iY*4(>mmCoWwpZdDd(Uru9b5$uPxl z)6Y`%F^&Jv+vQY7jl4>>C$PL@s~qbX*n%kd~FgV>ohk}iO zpU$AvS_}%J=)W{in(u9Kqvz#v4a67i@BS$oGYIC?E5cZ3T}a$rH*2sldlGi=2Us#O zO53YlbXGU|4<2LjUKmB^Y;4RAc?(nbc?$mff62!X4Nsw!54;2w<>$oxZ8D>NTbC}L zMsgi>8s7q->YR9@c#}bK0XigZLwcSD_1}RywHBeqoVbQ~)+A!)4D|6nCa@Z+_S>iE%Nj4O;vx?42LZqB@49Iw*cQ9&Qpkc}5H5 z>E*?ZmEblyoz()k8(VJK9XuNCIfmAESJ>;eFsY9^2mi#j zxA;)}Il1=A&%zz|TB=OpJfwVb4$#q7Ca5yb;ze6)L=Q4NFxG^}zHjlM1Iy*K39NeI zc@zzLfqr*X8a1)4Noc}(xos>z4}F_E2&n433^sljKz-a%PzPL)aUq3K3%g3{M-~@C zQ9du4dtTbkEdM=v6dZC8_PZ#yM|C#|#g$3hL&~79OM-yblu6sC8MRJNK@BRexvVJ% z_0xX|>g00yK#JZd?Yj!r646_Ar@f9R#B5r;{M1sL&j{{amy6JHw-19tS&2W9_8GPR ztk=WIzB;Qj?Y=1Ulygi=>;3`?s*q{N$jH;Dc477uVD_k6W#Ry_e$v0T)G?j`xNZp@ zPz`ULLO4}d;k2&=KS~JJrd1;?wdiGqoH_27V7hd$j)w%P#RaW*!Z$}SRzG*~f=5lc zK?S?;!>_cN|Y0zUCU)ljhX}2Q8G7~%XypS zL|sN6)t8WKtiB{?Vxuv~ zr(M8&*n{gebqDoo_!wW{TDN6c4)wY$9}`Z$jHyyJLs-DKmoCP0M&tWSYscHp z75w-Z(~Y98$c1fukZHZ^-&-j7zrP~yUze`kIeaTd=ISe>lT;{JORmW5=`Mb;OIu7{ z*RdGe&au>|?pNhB?{^iKH;2jdI&wCAeJ6Gbw-rG)5pc{uxQkFP&ibwrO2Fzx4X(+P zM$9$nFJCX9{ACtrO1>ubXENyA1_8}kju632^G#syi>RP_P~9~6`%g` z0OfxJQ1uoaa;5<{WJ)uhK~cDxl~T@BbVFv{UuIlL$U-ZcpcU%w*m#%VPq~R3u+W?G zVcy!nN7rUy(Je>9px!mr+O6}8JJS`AvAeflr#e&RO&O9sZvh&1L_k5i@%3Fnp`0*J zVqKTN2?N!b_Nswvxb9^g$os?MZ#>99$5f5PrLBaVDCl-g;J*!MQJH`eZ_6Xo0!E!v zE~xP*EJ55hccIfAKzS7c>Twc9b@gT$pD0?d#CY8LGTXo2kt=b*p|FnbaL+gH7aq{IKEQ4Y#t+z#4|rmK8?TlOFG84lGcH<8&W6E z+q_C<$~~)~;wx`So>nC_uV!SgdXjvrN~^~;r_T7oYaX2Cg$qUXB-YPg@^16e-06S+ zmW~=w4M(&Op{l=;GS9D;ySegSHI`q^zrxg_P{I1JT5HI2FUQP*rH=5@5hUVjpmcd# zunv#F=E-jPIKS~4w)N?Kz&nC}!{2go^o=SXwg_{#3|XT(2pMe|>$`lGMcsoZ#&*=` zXeS)~@z$Y*M%oSpJ*npdtuyaX-UHU? z|KVz)=-LB0w8k6d*2j?YKAiV;>Xe}Q@QZWabmR4M>!shJpA=Z}P_E+Qhp^e;Q%UxC zq=j%5>5u#Ot&e4}2aQ&h5;{dE e^yuB?y^cM*Ibuel-o0%f+g6kDybCNgHvbPq1h3ox diff --git a/src/java/org/apache/fop/render/AbstractGraphics2DAdapter.java b/src/java/org/apache/fop/render/AbstractGraphics2DAdapter.java index 4f3bb98a5..e37d02b2b 100644 --- a/src/java/org/apache/fop/render/AbstractGraphics2DAdapter.java +++ b/src/java/org/apache/fop/render/AbstractGraphics2DAdapter.java @@ -35,7 +35,7 @@ import java.awt.image.WritableRaster; import java.io.IOException; import org.apache.fop.render.RendererContext.RendererContextWrapper; -import org.apache.fop.util.UnitConv; +import org.apache.xmlgraphics.util.UnitConv; /** * Abstract base class for Graphics2DAdapter implementations. diff --git a/src/java/org/apache/fop/render/AbstractPathOrientedRenderer.java b/src/java/org/apache/fop/render/AbstractPathOrientedRenderer.java index f1ba11937..e402e8a9b 100644 --- a/src/java/org/apache/fop/render/AbstractPathOrientedRenderer.java +++ b/src/java/org/apache/fop/render/AbstractPathOrientedRenderer.java @@ -48,7 +48,7 @@ import org.apache.fop.fo.Constants; import org.apache.fop.fo.extensions.ExtensionElementMapping; import org.apache.fop.fonts.FontMetrics; import org.apache.fop.traits.BorderProps; -import org.apache.fop.util.UnitConv; +import org.apache.xmlgraphics.util.UnitConv; /** * Abstract base class for renderers like PDF and PostScript where many painting operations @@ -490,8 +490,8 @@ public abstract class AbstractPathOrientedRenderer extends PrintRenderer { int borderPaddingStart = bv.getBorderAndPaddingWidthStart(); int borderPaddingBefore = bv.getBorderAndPaddingWidthBefore(); //This is the content-rect - float width = (float)bv.getIPD() / 1000f; - float height = (float)bv.getBPD() / 1000f; + float width = bv.getIPD() / 1000f; + float height = bv.getBPD() / 1000f; if (bv.getPositioning() == Block.ABSOLUTE || bv.getPositioning() == Block.FIXED) { @@ -586,7 +586,7 @@ public abstract class AbstractPathOrientedRenderer extends PrintRenderer { currentIPPosition = saveIP; currentBPPosition = saveBP; - currentBPPosition += (int)(bv.getAllocBPD()); + currentBPPosition += (bv.getAllocBPD()); } } diff --git a/src/java/org/apache/fop/render/pcl/PCLGenerator.java b/src/java/org/apache/fop/render/pcl/PCLGenerator.java index d1b6f6578..45af4df89 100644 --- a/src/java/org/apache/fop/render/pcl/PCLGenerator.java +++ b/src/java/org/apache/fop/render/pcl/PCLGenerator.java @@ -45,8 +45,7 @@ import java.util.Locale; import org.apache.commons.io.output.ByteArrayOutputStream; import org.apache.xmlgraphics.image.GraphicsUtil; - -import org.apache.fop.util.UnitConv; +import org.apache.xmlgraphics.util.UnitConv; /** * This class provides methods for generating PCL print files. @@ -68,7 +67,7 @@ public class PCLGenerator { private final DecimalFormat df2 = new DecimalFormat("0.##", symbols); private final DecimalFormat df4 = new DecimalFormat("0.####", symbols); - private OutputStream out; + private final OutputStream out; private boolean currentSourceTransparency = true; private boolean currentPatternTransparency = true; @@ -79,7 +78,7 @@ public class PCLGenerator { * true: Standard PCL shades are used (poor quality). false: user-defined pattern are used * to create custom dither patterns for better grayscale quality. */ - private boolean usePCLShades = false; + private final boolean usePCLShades = false; /** * Main constructor. @@ -400,7 +399,7 @@ public class PCLGenerator { private static void setValueInMatrix(int[] dn, int half, int part, int idx, int value) { int xoff = (part & 1) * half; int yoff = (part & 2) * half * half; - int matrixIndex = yoff + ((int)(idx / half) * half * 2) + (idx % half) + xoff; + int matrixIndex = yoff + ((idx / half) * half * 2) + (idx % half) + xoff; dn[matrixIndex] = value; } diff --git a/src/java/org/apache/fop/render/pcl/PCLGraphics2D.java b/src/java/org/apache/fop/render/pcl/PCLGraphics2D.java index 3eef38b6b..ded87a057 100644 --- a/src/java/org/apache/fop/render/pcl/PCLGraphics2D.java +++ b/src/java/org/apache/fop/render/pcl/PCLGraphics2D.java @@ -42,9 +42,9 @@ import java.awt.image.renderable.RenderableImage; import java.io.IOException; import java.text.AttributedCharacterIterator; -import org.apache.fop.util.UnitConv; import org.apache.xmlgraphics.java2d.AbstractGraphics2D; import org.apache.xmlgraphics.java2d.GraphicContext; +import org.apache.xmlgraphics.util.UnitConv; /** * Graphics2D implementation implementing PCL and HP GL/2. @@ -55,7 +55,7 @@ public class PCLGraphics2D extends AbstractGraphics2D { /** The PCL generator */ protected PCLGenerator gen; - private boolean failOnUnsupportedFeature = true; + private final boolean failOnUnsupportedFeature = true; private boolean clippingDisabled = false; /** diff --git a/src/java/org/apache/fop/render/pcl/PCLGraphics2DAdapter.java b/src/java/org/apache/fop/render/pcl/PCLGraphics2DAdapter.java index 3878a84fb..f8c9682e9 100644 --- a/src/java/org/apache/fop/render/pcl/PCLGraphics2DAdapter.java +++ b/src/java/org/apache/fop/render/pcl/PCLGraphics2DAdapter.java @@ -34,7 +34,7 @@ import org.apache.xmlgraphics.java2d.Graphics2DImagePainter; import org.apache.fop.render.AbstractGraphics2DAdapter; import org.apache.fop.render.RendererContext; -import org.apache.fop.util.UnitConv; +import org.apache.xmlgraphics.util.UnitConv; /** * Graphics2DAdapter implementation for PCL and HP GL/2. @@ -111,7 +111,7 @@ public class PCLGraphics2DAdapter extends AbstractGraphics2DAdapter { if (!painted) { //Fallback solution: Paint to a BufferedImage - int resolution = (int)Math.round(context.getUserAgent().getTargetResolution()); + int resolution = Math.round(context.getUserAgent().getTargetResolution()); BufferedImage bi = paintToBufferedImage(painter, pclContext, resolution, !pclContext.isColorCanvas(), false); diff --git a/src/java/org/apache/fop/render/pcl/PCLPageDefinition.java b/src/java/org/apache/fop/render/pcl/PCLPageDefinition.java index e8c8814ab..e03a86b94 100644 --- a/src/java/org/apache/fop/render/pcl/PCLPageDefinition.java +++ b/src/java/org/apache/fop/render/pcl/PCLPageDefinition.java @@ -24,7 +24,7 @@ import java.awt.Rectangle; import java.util.Iterator; import java.util.List; -import org.apache.fop.util.UnitConv; +import org.apache.xmlgraphics.util.UnitConv; /** * This class represents a page format with PCL-specific properties. @@ -34,11 +34,11 @@ public class PCLPageDefinition { private static List pageDefinitions; private static PCLPageDefinition defaultPageDefinition; - private String name; - private int selector; - private Dimension physicalPageSize; - private Rectangle logicalPageRect; - private boolean landscape; + private final String name; + private final int selector; + private final Dimension physicalPageSize; + private final Rectangle logicalPageRect; + private final boolean landscape; static { createPageDefinitions(); diff --git a/src/java/org/apache/fop/render/pcl/PCLRenderer.java b/src/java/org/apache/fop/render/pcl/PCLRenderer.java index 4385ea1f2..72d698bfe 100644 --- a/src/java/org/apache/fop/render/pcl/PCLRenderer.java +++ b/src/java/org/apache/fop/render/pcl/PCLRenderer.java @@ -97,7 +97,7 @@ import org.apache.fop.render.java2d.InstalledFontCollection; import org.apache.fop.render.java2d.Java2DRenderer; import org.apache.fop.render.pcl.extensions.PCLElementMapping; import org.apache.fop.traits.BorderProps; -import org.apache.fop.util.UnitConv; +import org.apache.xmlgraphics.util.UnitConv; /* Note: * There are some commonalities with AbstractPathOrientedRenderer but it's not possible @@ -128,7 +128,7 @@ public class PCLRenderer extends PrintRenderer { protected PCLGenerator gen; private boolean ioTrouble = false; - private Stack graphicContextStack = new Stack(); + private final Stack graphicContextStack = new Stack(); private GraphicContext graphicContext = new GraphicContext(); private PCLPageDefinition currentPageDefinition; @@ -153,7 +153,7 @@ public class PCLRenderer extends PrintRenderer { * This can be used to work around problems with Apache Batik, for example, but setting * this to true will increase memory consumption. */ - private boolean useColorCanvas = false; + private final boolean useColorCanvas = false; /** * Controls whether the generation of PJL commands gets disabled. @@ -245,7 +245,7 @@ public class PCLRenderer extends PrintRenderer { /** @return the target resolution */ protected int getResolution() { - int resolution = (int)Math.round(userAgent.getTargetResolution()); + int resolution = Math.round(userAgent.getTargetResolution()); if (resolution <= 300) { return 300; } else { @@ -945,8 +945,8 @@ public class PCLRenderer extends PrintRenderer { int borderPaddingStart = bv.getBorderAndPaddingWidthStart(); int borderPaddingBefore = bv.getBorderAndPaddingWidthBefore(); //This is the content-rect - float width = (float)bv.getIPD() / 1000f; - float height = (float)bv.getBPD() / 1000f; + float width = bv.getIPD() / 1000f; + float height = bv.getBPD() / 1000f; if (bv.getPositioning() == Block.ABSOLUTE @@ -1034,7 +1034,7 @@ public class PCLRenderer extends PrintRenderer { currentIPPosition = saveIP; currentBPPosition = saveBP; - currentBPPosition += (int)(bv.getAllocBPD()); + currentBPPosition += (bv.getAllocBPD()); } //currentFontName = saveFontName; } @@ -1433,13 +1433,13 @@ public class PCLRenderer extends PrintRenderer { borderRect.width, borderRect.height); final Rectangle paintRect = new Rectangle( - (int)Math.round(borderRect.x * 1000f), - (int)Math.round(borderRect.y * 1000f), + Math.round(borderRect.x * 1000f), + Math.round(borderRect.y * 1000f), (int)Math.floor(borderRect.width * 1000f) + 1, (int)Math.floor(borderRect.height * 1000f) + 1); //Add one pixel wide safety margin around the paint area int pixelWidth = (int)Math.round(UnitConv.in2mpt(1) / userAgent.getTargetResolution()); - final int xoffset = (int)Math.round(-effBorderRect.x * 1000f) + pixelWidth; + final int xoffset = Math.round(-effBorderRect.x * 1000f) + pixelWidth; final int yoffset = pixelWidth; paintRect.x += xoffset; paintRect.y += yoffset; diff --git a/src/java/org/apache/fop/render/txt/TXTRenderer.java b/src/java/org/apache/fop/render/txt/TXTRenderer.java index 29f1ef954..575f1232f 100644 --- a/src/java/org/apache/fop/render/txt/TXTRenderer.java +++ b/src/java/org/apache/fop/render/txt/TXTRenderer.java @@ -37,7 +37,7 @@ import org.apache.fop.area.inline.TextArea; import org.apache.fop.render.AbstractPathOrientedRenderer; import org.apache.fop.render.txt.border.AbstractBorderElement; import org.apache.fop.render.txt.border.BorderManager; -import org.apache.fop.util.UnitConv; +import org.apache.xmlgraphics.util.UnitConv; /** * Renderer that renders areas to plain text. @@ -86,10 +86,10 @@ public class TXTRenderer extends AbstractPathOrientedRenderer { * Every line except the last line on a page (which will end with * pageEnding) will be terminated with this string. */ - private String lineEnding = "\r\n"; + private final String lineEnding = "\r\n"; /** Every page except the last one will end with this string. */ - private String pageEnding = "\f"; + private final String pageEnding = "\f"; /** Equals true, if current page is first. */ private boolean firstPage = false; @@ -101,7 +101,7 @@ public class TXTRenderer extends AbstractPathOrientedRenderer { private char fillChar; /** Saves current coordinate transformation. */ - private TXTState currentState = new TXTState(); + private final TXTState currentState = new TXTState(); private String encoding; diff --git a/src/java/org/apache/fop/util/UnitConv.java b/src/java/org/apache/fop/util/UnitConv.java deleted file mode 100644 index 475e3dcc0..000000000 --- a/src/java/org/apache/fop/util/UnitConv.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * 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$ */ - -package org.apache.fop.util; - -import java.awt.geom.AffineTransform; - -/** - * Utility class for unit conversions. - */ -public final class UnitConv { - - /** conversion factory from millimeters to inches. */ - public static final float IN2MM = 25.4f; - - /** conversion factory from centimeters to inches. */ - public static final float IN2CM = 2.54f; - - /** conversion factory from inches to points. */ - public static final int IN2PT = 72; - - /** - * Converts millimeters (mm) to points (pt) - * @param mm the value in mm - * @return the value in pt - */ - public static double mm2pt(double mm) { - return mm * IN2PT / IN2MM; - } - - /** - * Converts millimeters (mm) to millipoints (mpt) - * @param mm the value in mm - * @return the value in mpt - */ - public static double mm2mpt(double mm) { - return mm * 1000 * IN2PT / IN2MM; - } - - /** - * Converts points (pt) to millimeters (mm) - * @param pt the value in pt - * @return the value in mm - */ - public static double pt2mm(double pt) { - return pt * IN2MM / IN2PT; - } - - /** - * Converts millimeters (mm) to inches (in) - * @param mm the value in mm - * @return the value in inches - */ - public static double mm2in(double mm) { - return mm / IN2MM; - } - - /** - * Converts inches (in) to millimeters (mm) - * @param in the value in inches - * @return the value in mm - */ - public static double in2mm(double in) { - return in * IN2MM; - } - - /** - * Converts inches (in) to millipoints (mpt) - * @param in the value in inches - * @return the value in mpt - */ - public static double in2mpt(double in) { - return in * IN2PT * 1000; - } - - /** - * Converts inches (in) to points (pt) - * @param in the value in inches - * @return the value in pt - */ - public static double in2pt(double in) { - return in * IN2PT; - } - - /** - * Converts millipoints (mpt) to inches (in) - * @param mpt the value in mpt - * @return the value in inches - */ - public static double mpt2in(double mpt) { - return mpt / IN2PT / 1000; - } - - /** - * Converts millimeters (mm) to pixels (px) - * @param mm the value in mm - * @param resolution the resolution in dpi (dots per inch) - * @return the value in pixels - */ - public static double mm2px(double mm, int resolution) { - return mm2in(mm) * resolution; - } - - /** - * Converts millipoints (mpt) to pixels (px) - * @param mpt the value in mpt - * @param resolution the resolution in dpi (dots per inch) - * @return the value in pixels - */ - public static double mpt2px(double mpt, int resolution) { - return mpt2in(mpt) * resolution; - } - - /** - * Converts a millipoint-based transformation matrix to points. - * @param at a millipoint-based transformation matrix - * @return a point-based transformation matrix - */ - public static AffineTransform mptToPt(AffineTransform at) { - double[] matrix = new double[6]; - at.getMatrix(matrix); - //Convert to points - matrix[4] = matrix[4] / 1000; - matrix[5] = matrix[5] / 1000; - return new AffineTransform(matrix); - } - - /** - * Converts a point-based transformation matrix to millipoints. - * @param at a point-based transformation matrix - * @return a millipoint-based transformation matrix - */ - public static AffineTransform ptToMpt(AffineTransform at) { - double[] matrix = new double[6]; - at.getMatrix(matrix); - //Convert to millipoints - matrix[4] = matrix[4] * 1000; - matrix[5] = matrix[5] * 1000; - return new AffineTransform(matrix); - } - -} diff --git a/test/java/org/apache/fop/UtilityCodeTestSuite.java b/test/java/org/apache/fop/UtilityCodeTestSuite.java index af467102c..6611f532e 100644 --- a/test/java/org/apache/fop/UtilityCodeTestSuite.java +++ b/test/java/org/apache/fop/UtilityCodeTestSuite.java @@ -22,14 +22,13 @@ package org.apache.fop; import junit.framework.Test; import junit.framework.TestSuite; -import org.apache.fop.pdf.PDFObjectTestCase; import org.apache.fop.events.BasicEventTestCase; +import org.apache.fop.pdf.PDFObjectTestCase; import org.apache.fop.traits.BorderPropsTestCase; +import org.apache.fop.util.ColorUtilTestCase; import org.apache.fop.util.DataURIResolverTestCase; import org.apache.fop.util.ElementListUtilsTestCase; import org.apache.fop.util.PDFNumberTestCase; -import org.apache.fop.util.ColorUtilTestCase; -import org.apache.fop.util.UnitConvTestCase; import org.apache.fop.util.XMLResourceBundleTestCase; /** @@ -47,7 +46,6 @@ public class UtilityCodeTestSuite { //$JUnit-BEGIN$ suite.addTest(new TestSuite(PDFNumberTestCase.class)); suite.addTest(new TestSuite(PDFObjectTestCase.class)); - suite.addTest(new TestSuite(UnitConvTestCase.class)); suite.addTest(new TestSuite(ColorUtilTestCase.class)); suite.addTest(new TestSuite(BorderPropsTestCase.class)); suite.addTest(new TestSuite(ElementListUtilsTestCase.class)); diff --git a/test/java/org/apache/fop/util/UnitConvTestCase.java b/test/java/org/apache/fop/util/UnitConvTestCase.java deleted file mode 100644 index a10619199..000000000 --- a/test/java/org/apache/fop/util/UnitConvTestCase.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * 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$ */ - -package org.apache.fop.util; - -import junit.framework.TestCase; - -/** - * Test class for UnitConv. - */ -public class UnitConvTestCase extends TestCase { - - /** - * Test all kinds of unit conversions. - * @throws Exception if the test fails - */ - public void testConversions() throws Exception { - assertEquals("in2mm", 25.4, UnitConv.in2mm(1), 0.00001); - assertEquals("mm2in", 1.0, UnitConv.mm2in(25.4), 0.00001); - assertEquals("mm2pt", 841.890, UnitConv.mm2pt(297), 0.001 / 2); //height of an A4 page - assertEquals("mm2mpt", 841890, UnitConv.mm2mpt(297), 1.0 / 2); - assertEquals("pt2mm", 297, UnitConv.pt2mm(841.890), 0.0001); - assertEquals("in2mpt", 792000, UnitConv.in2mpt(11.0), 1.0 / 2); //height of a letter page - assertEquals("mpt2in", 11.0, UnitConv.mpt2in(792000), 0.01 / 2); //height of a letter page - - assertEquals("mm2px/72dpi", 841.8897764234434, UnitConv.mm2px(297.0, 72), 0); - assertEquals("mm2px/300dpi", 3507.8740684310146, UnitConv.mm2px(297.0, 300), 0); - } - -} \ No newline at end of file -- 2.39.5