diff options
Diffstat (limited to 'src/solaris/classes/sun/java2d/xr/XRUtils.java')
-rw-r--r-- | src/solaris/classes/sun/java2d/xr/XRUtils.java | 261 |
1 files changed, 261 insertions, 0 deletions
diff --git a/src/solaris/classes/sun/java2d/xr/XRUtils.java b/src/solaris/classes/sun/java2d/xr/XRUtils.java new file mode 100644 index 000000000..0565b89ec --- /dev/null +++ b/src/solaris/classes/sun/java2d/xr/XRUtils.java @@ -0,0 +1,261 @@ +/* + * Copyright 2010 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +package sun.java2d.xr; + +import java.awt.*; +import java.awt.MultipleGradientPaint.*; +import java.awt.image.*; +import sun.java2d.loops.*; +import static java.awt.AlphaComposite.*; + +/** + * XRender constants and utility methods. + * + * @author Clemens Eisserer + */ + +public class XRUtils { + public static final int None = 0; + + /* Composition Operators */ + public static final byte PictOpClear = 0; + public static final byte PictOpSrc = 1; + public static final byte PictOpDst = 2; + public static final byte PictOpOver = 3; + public static final byte PictOpOverReverse = 4; + public static final byte PictOpIn = 5; + public static final byte PictOpInReverse = 6; + public static final byte PictOpOut = 7; + public static final byte PictOpOutReverse = 8; + public static final byte PictOpAtop = 9; + public static final byte PictOpAtopReverse = 10; + public static final byte PictOpXor = 11; + public static final byte PictOpAdd = 12; + public static final byte PictOpSaturate = 13; + + /* Repeats */ + public static final int RepeatNone = 0; + public static final int RepeatNormal = 1; + public static final int RepeatPad = 2; + public static final int RepeatReflect = 3; + + /* Interpolation qualities */ + public static final int FAST = 0; + public static final int GOOD = 1; + public static final int BEST = 2; + public static final byte[] FAST_NAME = "fast".getBytes(); + public static final byte[] GOOD_NAME = "good".getBytes(); + public static final byte[] BEST_NAME = "best".getBytes(); + + /* PictFormats */ + public static final int PictStandardARGB32 = 0; + public static final int PictStandardRGB24 = 1; + public static final int PictStandardA8 = 2; + public static final int PictStandardA4 = 3; + public static final int PictStandardA1 = 4; + + /** + * Maps the specified affineTransformOp to the corresponding XRender image + * filter. + */ + public static int ATransOpToXRQuality(int affineTranformOp) { + + switch (affineTranformOp) { + case AffineTransformOp.TYPE_NEAREST_NEIGHBOR: + return FAST; + + case AffineTransformOp.TYPE_BILINEAR: + return GOOD; + + case AffineTransformOp.TYPE_BICUBIC: + return BEST; + } + + return -1; + } + + /** + * Maps the specified affineTransformOp to the corresponding XRender image + * filter. + */ + public static byte[] ATransOpToXRQualityName(int affineTranformOp) { + + switch (affineTranformOp) { + case AffineTransformOp.TYPE_NEAREST_NEIGHBOR: + return FAST_NAME; + + case AffineTransformOp.TYPE_BILINEAR: + return GOOD_NAME; + + case AffineTransformOp.TYPE_BICUBIC: + return BEST_NAME; + } + + return null; + } + + + public static byte[] getFilterName(int filterType) { + switch (filterType) { + case FAST: + return FAST_NAME; + case GOOD: + return GOOD_NAME; + case BEST: + return BEST_NAME; + } + + return null; + } + + + /** + * Returns the XRender picture Format which is required to fullfill the + * Java2D transparency requirement. + */ + public static int getPictureFormatForTransparency(int transparency) { + switch (transparency) { + case Transparency.OPAQUE: + return PictStandardRGB24; + + case Transparency.BITMASK: + case Transparency.TRANSLUCENT: + return PictStandardARGB32; + } + + return -1; + } + + + public static SurfaceType getXRSurfaceTypeForTransparency(int transparency) { + if (transparency == Transparency.OPAQUE) { + return SurfaceType.IntRgb; + }else { + return SurfaceType.IntArgbPre; + } + } + + /** + * Maps Java2D CycleMethod to XRender's Repeat property. + */ + public static int getRepeatForCycleMethod(CycleMethod cycleMethod) { + if (cycleMethod.equals(CycleMethod.NO_CYCLE)) { + return RepeatPad; + } else if (cycleMethod.equals(CycleMethod.REFLECT)) { + return RepeatReflect; + } else if (cycleMethod.equals(CycleMethod.REPEAT)) { + return RepeatNormal; + } + + return RepeatNone; + } + + /** + * Converts a double into an XFixed. + */ + public static int XDoubleToFixed(double dbl) { + return (int) (dbl * 65536); + } + + public static double XFixedToDouble(int fixed) { + return ((double) fixed) / 65536; + } + + public static int[] convertFloatsToFixed(float[] values) { + int[] fixed = new int[values.length]; + + for (int i = 0; i < values.length; i++) { + fixed[i] = XDoubleToFixed(values[i]); + } + + return fixed; + } + + public static long intToULong(int signed) { + if (signed < 0) { + return ((long) signed) + (((long) Integer.MAX_VALUE) - + ((long) Integer.MIN_VALUE) + 1); + } + + return signed; + } + + /** + * Maps the specified Java2D composition rule, to the corresponding XRender + * composition rule. + */ + public static byte j2dAlphaCompToXR(int j2dRule) { + switch (j2dRule) { + case CLEAR: + return PictOpClear; + + case SRC: + return PictOpSrc; + + case DST: + return PictOpDst; + + case SRC_OVER: + return PictOpOver; + + case DST_OVER: + return PictOpOverReverse; + + case SRC_IN: + return PictOpIn; + + case DST_IN: + return PictOpInReverse; + + case SRC_OUT: + return PictOpOut; + + case DST_OUT: + return PictOpOutReverse; + + case SRC_ATOP: + return PictOpAtop; + + case DST_ATOP: + return PictOpAtopReverse; + + case XOR: + return PictOpXor; + } + + throw new InternalError("No XRender equivalent available for requested java2d composition rule: "+j2dRule); + } + + public static short clampToShort(int x) { + return (short) (x > Short.MAX_VALUE + ? Short.MAX_VALUE + : (x < Short.MIN_VALUE ? Short.MIN_VALUE : x)); + } + + public static short clampToUShort(int x) { + return (short) (x > 65535 ? 65535 : (x < 0) ? 0 : x); + } +} |