From 9708ccc61aa6a0689b4e0e39c6e072c44dab3f50 Mon Sep 17 00:00:00 2001 From: Jeremias Maerki Date: Fri, 2 Jul 2010 10:44:18 +0000 Subject: [PATCH] Restored ColorExt after removing it from XML Graphics Commons again. Moved GrayScaleColorConverter as a package-local class from XGC to the AFP package (doesn't require deprecation when we can put the functionality in XGC later with the new color infrastructure). git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@959945 13f79535-47bb-0310-9956-ffa450edef68 --- lib/xmlgraphics-commons-1.4svn.jar | Bin 572607 -> 569480 bytes .../org/apache/fop/afp/AFPPaintingState.java | 1 - .../fop/afp/GrayScaleColorConverter.java | 61 +++++ src/java/org/apache/fop/pdf/PDFColor.java | 7 +- .../org/apache/fop/svg/PDFGraphics2D.java | 2 +- src/java/org/apache/fop/util/ColorExt.java | 249 ++++++++++++++++++ src/java/org/apache/fop/util/ColorUtil.java | 17 +- .../fop/traits/BorderPropsTestCase.java | 6 +- .../apache/fop/util/ColorUtilTestCase.java | 11 +- 9 files changed, 333 insertions(+), 21 deletions(-) create mode 100644 src/java/org/apache/fop/afp/GrayScaleColorConverter.java create mode 100644 src/java/org/apache/fop/util/ColorExt.java diff --git a/lib/xmlgraphics-commons-1.4svn.jar b/lib/xmlgraphics-commons-1.4svn.jar index c99758f16f771add5852f7e5d435333a7be65e43..e2d124458cae132d7cc1bfec57ffd5062c13fee2 100644 GIT binary patch delta 28499 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

<&!UT>mB;k`t1 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 + * This class extends java.awt.Color class keeping track of the original color + * property values specified by the fo user in a rgb-icc call. + */ +public final class ColorExt extends Color { + // + private static final long serialVersionUID = 1L; + + // Values of fop-rgb-icc arguments + private float rgbReplacementRed; + private float rgbReplacementGreen; + private float rgbReplacementBlue; + + private String iccProfileName; + private String iccProfileSrc; + private ColorSpace colorSpace; + + private float[] colorValues; + + /* + * Helper for createFromFoRgbIcc + */ + private ColorExt(ColorSpace colorSpace, float[] colorValues, float opacity) { + super(colorSpace, colorValues, opacity); + } + + /* + * Helper for createFromSvgIccColor + */ + private ColorExt(float red, float green, float blue, float opacity) { + super(red, green, blue, opacity); + } + + /** + * Create ColorExt object backup up FO's rgb-icc color function + * + * @param redReplacement + * Red part of RGB replacement color that will be used when ICC + * profile can not be loaded + * @param greenReplacement + * Green part of RGB replacement color that will be used when ICC + * profile can not be loaded + * @param blueReplacement + * Blue part of RGB replacement color that will be used when ICC + * profile can not be loaded + * @param profileName + * Name of ICC profile + * @param profileSrc + * Source of ICC profile + * @param colorSpace + * ICC ColorSpace for the ICC profile + * @param iccValues + * color values + * @return the requested color object + */ + public static ColorExt createFromFoRgbIcc(float redReplacement, + float greenReplacement, float blueReplacement, String profileName, + String profileSrc, ColorSpace colorSpace, float[] iccValues) { + ColorExt ce = new ColorExt(colorSpace, iccValues, 1.0f); + ce.rgbReplacementRed = redReplacement; + ce.rgbReplacementGreen = greenReplacement; + ce.rgbReplacementBlue = blueReplacement; + ce.iccProfileName = profileName; + ce.iccProfileSrc = profileSrc; + ce.colorSpace = colorSpace; + ce.colorValues = iccValues; + return ce; + } + + /** + * Create ColorExt object backing up SVG's icc-color function. + * + * @param red + * Red value resulting from the conversion from the user provided + * (icc) color values to the batik (rgb) color space + * @param green + * Green value resulting from the conversion from the user + * provided (icc) color values to the batik (rgb) color space + * @param blue + * Blue value resulting from the conversion from the user + * provided (icc) color values to the batik (rgb) color space + * @param opacity + * Opacity + * @param profileName + * ICC profile name + * @param profileHref + * the URI to the color profile + * @param profileCS + * ICC ColorSpace profile + * @param colorValues + * ICC color values + * @return the requested color object + */ + public static ColorExt createFromSvgIccColor(float red, float green, + float blue, float opacity, String profileName, String profileHref, + ColorSpace profileCS, float[] colorValues) { + //TODO this method is not referenced by FOP, can it be deleted? + ColorExt ce = new ColorExt(red, green, blue, opacity); + ce.rgbReplacementRed = -1; + ce.rgbReplacementGreen = -1; + ce.rgbReplacementBlue = -1; + ce.iccProfileName = profileName; + ce.iccProfileSrc = profileHref; + ce.colorSpace = profileCS; + ce.colorValues = colorValues; + return ce; + + } + + /** {@inheritDoc} */ + public int hashCode() { + //implementation from the superclass should be good enough for our purposes + return super.hashCode(); + } + + /** {@inheritDoc} */ + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!super.equals(obj)) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + ColorExt other = (ColorExt)obj; + //TODO maybe use super.getColorComponents() instead + if (!Arrays.equals(colorValues, other.colorValues)) { + return false; + } + if (iccProfileName == null) { + if (other.iccProfileName != null) { + return false; + } + } else if (!iccProfileName.equals(other.iccProfileName)) { + return false; + } + if (iccProfileSrc == null) { + if (other.iccProfileSrc != null) { + return false; + } + } else if (!iccProfileSrc.equals(other.iccProfileSrc)) { + return false; + } + if (Float.floatToIntBits(rgbReplacementBlue) + != Float.floatToIntBits(other.rgbReplacementBlue)) { + return false; + } + if (Float.floatToIntBits(rgbReplacementGreen) + != Float.floatToIntBits(other.rgbReplacementGreen)) { + return false; + } + if (Float.floatToIntBits(rgbReplacementRed) + != Float.floatToIntBits(other.rgbReplacementRed)) { + return false; + } + return true; + } + + /** + * Get ICC profile name + * + * @return ICC profile name + */ + public String getIccProfileName() { + return this.iccProfileName; + } + + /** + * Get ICC profile source + * + * @return ICC profile source + */ + public String getIccProfileSrc() { + return this.iccProfileSrc; + } + + /** + * @return the original ColorSpace + */ + public ColorSpace getOrigColorSpace() { + //TODO this method is probably unnecessary due to super.cs and getColorSpace() + return this.colorSpace; + } + + /** + * Returns the original color values. + * @return the original color values + */ + public float[] getOriginalColorComponents() { + //TODO this method is probably unnecessary due to super.fvalue and getColorComponents() + float[] copy = new float[this.colorValues.length]; + System.arraycopy(this.colorValues, 0, copy, 0, copy.length); + return copy; + } + + /** + * Create string representation of fop-rgb-icc function call to map this + * ColorExt settings + * @return the string representing the internal fop-rgb-icc() function call + */ + public String toFunctionCall() { + StringBuffer sb = new StringBuffer(40); + sb.append("fop-rgb-icc("); + sb.append(this.rgbReplacementRed + ","); + sb.append(this.rgbReplacementGreen + ","); + sb.append(this.rgbReplacementBlue + ","); + sb.append(this.iccProfileName + ","); + if (this.iccProfileSrc != null) { + sb.append("\"" + this.iccProfileSrc + "\""); + } + float[] colorComponents = this.getColorComponents(null); + for (int ix = 0; ix < colorComponents.length; ix++) { + sb.append(","); + sb.append(colorComponents[ix]); + } + sb.append(")"); + return sb.toString(); + } + +} diff --git a/src/java/org/apache/fop/util/ColorUtil.java b/src/java/org/apache/fop/util/ColorUtil.java index 656d9ef98..0ff93a058 100644 --- a/src/java/org/apache/fop/util/ColorUtil.java +++ b/src/java/org/apache/fop/util/ColorUtil.java @@ -27,8 +27,7 @@ import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.xmlgraphics.java2d.color.CMYKColorSpace; -import org.apache.xmlgraphics.java2d.color.ColorExt; +import org.apache.xmlgraphics.java2d.color.DeviceCMYKColorSpace; import org.apache.fop.apps.FOUserAgent; import org.apache.fop.fo.expr.PropertyException; @@ -329,7 +328,7 @@ public final class ColorUtil { String iccProfileSrc = null; if (isPseudoProfile(iccProfileName)) { if (CMYK_PSEUDO_PROFILE.equalsIgnoreCase(iccProfileName)) { - colorSpace = CMYKColorSpace.getInstance(); + colorSpace = DeviceCMYKColorSpace.getInstance(); } else { assert false : "Incomplete implementation"; } @@ -454,7 +453,7 @@ public final class ColorUtil { + "Arguments to cmyk() must be in the range [0%-100%] or [0.0-1.0]"); } float[] cmyk = new float[] {cyan, magenta, yellow, black}; - CMYKColorSpace cmykCs = CMYKColorSpace.getInstance(); + DeviceCMYKColorSpace cmykCs = DeviceCMYKColorSpace.getInstance(); float[] rgb = cmykCs.toRGB(cmyk); parsedColor = ColorExt.createFromFoRgbIcc(rgb[0], rgb[1], rgb[2], CMYK_PSEUDO_PROFILE, null, cmykCs, cmyk); @@ -705,12 +704,16 @@ public final class ColorUtil { } /** - * Creates an uncalibrary CMYK color with the given gray value. + * Creates an uncalibrated CMYK color with the given gray value. * @param black the gray component (0 - 1) * @return the CMYK color */ public static Color toCMYKGrayColor(float black) { - - return org.apache.xmlgraphics.java2d.color.ColorUtil.toCMYKGrayColor(black); + float[] cmyk = new float[] {0f, 0f, 0f, 1.0f - black}; + DeviceCMYKColorSpace cmykCs = DeviceCMYKColorSpace.getInstance(); + float[] rgb = cmykCs.toRGB(cmyk); + return ColorExt.createFromFoRgbIcc(rgb[0], rgb[1], rgb[2], + CMYK_PSEUDO_PROFILE, null, cmykCs, cmyk); } + } diff --git a/test/java/org/apache/fop/traits/BorderPropsTestCase.java b/test/java/org/apache/fop/traits/BorderPropsTestCase.java index 3332d11f2..be7714ba2 100644 --- a/test/java/org/apache/fop/traits/BorderPropsTestCase.java +++ b/test/java/org/apache/fop/traits/BorderPropsTestCase.java @@ -23,10 +23,10 @@ import java.awt.Color; import junit.framework.TestCase; -import org.apache.xmlgraphics.java2d.color.CMYKColorSpace; -import org.apache.xmlgraphics.java2d.color.ColorExt; +import org.apache.xmlgraphics.java2d.color.DeviceCMYKColorSpace; import org.apache.fop.fo.Constants; +import org.apache.fop.util.ColorExt; import org.apache.fop.util.ColorUtil; /** @@ -50,7 +50,7 @@ public class BorderPropsTestCase extends TestCase { assertEquals(b1, b2); float[] cmyk = new float[] {1.0f, 1.0f, 0.5f, 1.0f}; - CMYKColorSpace cmykCs = CMYKColorSpace.getInstance(); + DeviceCMYKColorSpace cmykCs = DeviceCMYKColorSpace.getInstance(); float[] rgb = cmykCs.toRGB(cmyk); col = ColorExt.createFromFoRgbIcc(rgb[0], rgb[1], rgb[2], "#CMYK", null, cmykCs, cmyk); diff --git a/test/java/org/apache/fop/util/ColorUtilTestCase.java b/test/java/org/apache/fop/util/ColorUtilTestCase.java index 83163c888..aefd2a76a 100644 --- a/test/java/org/apache/fop/util/ColorUtilTestCase.java +++ b/test/java/org/apache/fop/util/ColorUtilTestCase.java @@ -24,8 +24,7 @@ import java.awt.color.ColorSpace; import junit.framework.TestCase; -import org.apache.xmlgraphics.java2d.color.CMYKColorSpace; -import org.apache.xmlgraphics.java2d.color.ColorExt; +import org.apache.xmlgraphics.java2d.color.DeviceCMYKColorSpace; import org.apache.fop.apps.FOUserAgent; import org.apache.fop.apps.FopFactory; @@ -157,7 +156,7 @@ public class ColorUtilTestCase extends TestCase { assertEquals(255, colActual.getRed()); assertEquals(255, colActual.getGreen()); assertEquals(0, colActual.getBlue()); - assertEquals(CMYKColorSpace.getInstance(), colActual.getColorSpace()); + assertEquals(DeviceCMYKColorSpace.getInstance(), colActual.getColorSpace()); float[] comps = colActual.getColorComponents(null); assertEquals(4, comps.length); assertEquals(0f, comps[0], 0); @@ -172,7 +171,7 @@ public class ColorUtilTestCase extends TestCase { assertEquals(248, colActual.getRed()); assertEquals(199, colActual.getGreen()); assertEquals(172, colActual.getBlue()); - assertEquals(CMYKColorSpace.getInstance(), colActual.getColorSpace()); + assertEquals(DeviceCMYKColorSpace.getInstance(), colActual.getColorSpace()); comps = colActual.getColorComponents(null); assertEquals(0.0274f, comps[0], 0.001); assertEquals(0.2196f, comps[1], 0.001); @@ -186,7 +185,7 @@ public class ColorUtilTestCase extends TestCase { assertEquals(255, colActual.getRed()); assertEquals(255, colActual.getGreen()); assertEquals(0, colActual.getBlue()); - assertEquals(CMYKColorSpace.getInstance(), colActual.getColorSpace()); + assertEquals(DeviceCMYKColorSpace.getInstance(), colActual.getColorSpace()); comps = colActual.getColorComponents(null); assertEquals(4, comps.length); assertEquals(0f, comps[0], 0); @@ -201,7 +200,7 @@ public class ColorUtilTestCase extends TestCase { assertEquals(127, colActual.getRed()); assertEquals(127, colActual.getGreen()); assertEquals(127, colActual.getBlue()); - assertEquals(CMYKColorSpace.getInstance(), colActual.getColorSpace()); + assertEquals(DeviceCMYKColorSpace.getInstance(), colActual.getColorSpace()); comps = colActual.getColorComponents(null); assertEquals(4, comps.length); assertEquals(0f, comps[0], 0); -- 2.39.5