|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
|
|
package sun.java2d.loops; |
|
|
|
import java.awt.image.BufferedImage; |
|
import java.awt.image.ColorModel; |
|
import sun.awt.image.PixelConverter; |
|
import java.util.HashMap; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
public final class SurfaceType { |
|
|
|
private static int unusedUID = 1; |
|
private static HashMap<String, Integer> surfaceUIDMap = new HashMap<>(100); |
|
|
|
/* |
|
* CONSTANTS USED BY ALL PRIMITIVES TO DESCRIBE THE SURFACES |
|
* THEY CAN OPERATE ON |
|
*/ |
|
|
|
|
|
|
|
*/ |
|
public static final String |
|
DESC_ANY = "Any Surface"; |
|
|
|
|
|
|
|
*/ |
|
public static final String |
|
DESC_INT_RGB = "Integer RGB"; |
|
public static final String |
|
DESC_INT_ARGB = "Integer ARGB"; |
|
public static final String |
|
DESC_INT_ARGB_PRE = "Integer ARGB Premultiplied"; |
|
public static final String |
|
DESC_INT_BGR = "Integer BGR"; |
|
public static final String |
|
DESC_3BYTE_BGR = "3 Byte BGR"; |
|
public static final String |
|
DESC_4BYTE_ABGR = "4 Byte ABGR"; |
|
public static final String |
|
DESC_4BYTE_ABGR_PRE = "4 Byte ABGR Premultiplied"; |
|
public static final String |
|
DESC_USHORT_565_RGB = "Short 565 RGB"; |
|
public static final String |
|
DESC_USHORT_555_RGB = "Short 555 RGB"; |
|
public static final String |
|
DESC_USHORT_555_RGBx= "Short 555 RGBx"; |
|
public static final String |
|
DESC_USHORT_4444_ARGB= "Short 4444 ARGB"; |
|
public static final String |
|
DESC_BYTE_GRAY = "8-bit Gray"; |
|
public static final String |
|
DESC_USHORT_INDEXED = "16-bit Indexed"; |
|
public static final String |
|
DESC_USHORT_GRAY = "16-bit Gray"; |
|
public static final String |
|
DESC_BYTE_BINARY = "Packed Binary Bitmap"; |
|
public static final String |
|
DESC_BYTE_INDEXED = "8-bit Indexed"; |
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
public static final String DESC_ANY_INT = "Any Discrete Integer"; |
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
public static final String DESC_ANY_SHORT = "Any Discrete Short"; |
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
public static final String DESC_ANY_BYTE = "Any Discrete Byte"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
public static final String DESC_ANY_3BYTE = "Any 3 Byte Component"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
public static final String DESC_ANY_4BYTE = "Any 4 Byte Component"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
public static final String DESC_ANY_INT_DCM = "Any Integer DCM"; |
|
|
|
|
|
|
|
*/ |
|
public static final String DESC_INT_RGBx = "Integer RGBx"; |
|
public static final String DESC_INT_BGRx = "Integer BGRx"; |
|
|
|
|
|
|
|
*/ |
|
public static final String DESC_3BYTE_RGB = "3 Byte RGB"; |
|
|
|
|
|
|
|
*/ |
|
public static final String DESC_INT_ARGB_BM = "Int ARGB (Bitmask)"; |
|
public static final String DESC_BYTE_INDEXED_BM = "8-bit Indexed (Bitmask)"; |
|
|
|
|
|
|
|
*/ |
|
public static final String |
|
DESC_BYTE_INDEXED_OPAQUE = "8-bit Indexed (Opaque)"; |
|
|
|
|
|
|
|
|
|
*/ |
|
public static final String DESC_INDEX8_GRAY = "8-bit Palettized Gray"; |
|
public static final String DESC_INDEX12_GRAY = "12-bit Palettized Gray"; |
|
|
|
public static final String |
|
DESC_BYTE_BINARY_1BIT = "Packed Binary 1-bit Bitmap"; |
|
public static final String |
|
DESC_BYTE_BINARY_2BIT = "Packed Binary 2-bit Bitmap"; |
|
public static final String |
|
DESC_BYTE_BINARY_4BIT = "Packed Binary 4-bit Bitmap"; |
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
public static final String DESC_ANY_PAINT = "Paint Object"; |
|
public static final String DESC_ANY_COLOR = "Single Color"; |
|
public static final String DESC_OPAQUE_COLOR = "Opaque Color"; |
|
public static final String |
|
DESC_GRADIENT_PAINT = "Gradient Paint"; |
|
public static final String |
|
DESC_OPAQUE_GRADIENT_PAINT = "Opaque Gradient Paint"; |
|
public static final String |
|
DESC_TEXTURE_PAINT = "Texture Paint"; |
|
public static final String |
|
DESC_OPAQUE_TEXTURE_PAINT = "Opaque Texture Paint"; |
|
public static final String |
|
DESC_LINEAR_GRADIENT_PAINT = "Linear Gradient Paint"; |
|
public static final String |
|
DESC_OPAQUE_LINEAR_GRADIENT_PAINT = "Opaque Linear Gradient Paint"; |
|
public static final String |
|
DESC_RADIAL_GRADIENT_PAINT = "Radial Gradient Paint"; |
|
public static final String |
|
DESC_OPAQUE_RADIAL_GRADIENT_PAINT = "Opaque Radial Gradient Paint"; |
|
|
|
/* |
|
* END OF SURFACE TYPE CONSTANTS |
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
public static final SurfaceType Any = |
|
new SurfaceType(null, DESC_ANY, PixelConverter.instance); |
|
|
|
/* |
|
* START OF SurfaceType OBJECTS FOR THE VARIOUS CONSTANTS |
|
*/ |
|
|
|
public static final SurfaceType |
|
AnyInt = Any.deriveSubType(DESC_ANY_INT); |
|
public static final SurfaceType |
|
AnyShort = Any.deriveSubType(DESC_ANY_SHORT); |
|
public static final SurfaceType |
|
AnyByte = Any.deriveSubType(DESC_ANY_BYTE); |
|
public static final SurfaceType |
|
AnyByteBinary = Any.deriveSubType(DESC_BYTE_BINARY); |
|
public static final SurfaceType |
|
Any3Byte = Any.deriveSubType(DESC_ANY_3BYTE); |
|
public static final SurfaceType |
|
Any4Byte = Any.deriveSubType(DESC_ANY_4BYTE); |
|
public static final SurfaceType |
|
AnyDcm = AnyInt.deriveSubType(DESC_ANY_INT_DCM); |
|
|
|
public static final SurfaceType |
|
Custom = Any; |
|
public static final SurfaceType IntRgb = |
|
AnyDcm.deriveSubType(DESC_INT_RGB, PixelConverter.Xrgb.instance); |
|
|
|
public static final SurfaceType IntArgb = |
|
AnyDcm.deriveSubType(DESC_INT_ARGB, PixelConverter.Argb.instance); |
|
|
|
public static final SurfaceType IntArgbPre = |
|
AnyDcm.deriveSubType(DESC_INT_ARGB_PRE, |
|
PixelConverter.ArgbPre.instance); |
|
|
|
public static final SurfaceType IntBgr = |
|
AnyDcm.deriveSubType(DESC_INT_BGR, PixelConverter.Xbgr.instance); |
|
|
|
public static final SurfaceType ThreeByteBgr = |
|
Any3Byte.deriveSubType(DESC_3BYTE_BGR, PixelConverter.Xrgb.instance); |
|
|
|
public static final SurfaceType FourByteAbgr = |
|
Any4Byte.deriveSubType(DESC_4BYTE_ABGR, PixelConverter.Rgba.instance); |
|
|
|
public static final SurfaceType FourByteAbgrPre = |
|
Any4Byte.deriveSubType(DESC_4BYTE_ABGR_PRE, |
|
PixelConverter.RgbaPre.instance); |
|
|
|
public static final SurfaceType Ushort565Rgb = |
|
AnyShort.deriveSubType(DESC_USHORT_565_RGB, |
|
PixelConverter.Ushort565Rgb.instance); |
|
|
|
public static final SurfaceType Ushort555Rgb = |
|
AnyShort.deriveSubType(DESC_USHORT_555_RGB, |
|
PixelConverter.Ushort555Rgb.instance); |
|
|
|
public static final SurfaceType Ushort555Rgbx = |
|
AnyShort.deriveSubType(DESC_USHORT_555_RGBx, |
|
PixelConverter.Ushort555Rgbx.instance); |
|
|
|
public static final SurfaceType Ushort4444Argb = |
|
AnyShort.deriveSubType(DESC_USHORT_4444_ARGB, |
|
PixelConverter.Ushort4444Argb.instance); |
|
|
|
public static final SurfaceType UshortIndexed = |
|
AnyShort.deriveSubType(DESC_USHORT_INDEXED); |
|
|
|
public static final SurfaceType ByteGray = |
|
AnyByte.deriveSubType(DESC_BYTE_GRAY, |
|
PixelConverter.ByteGray.instance); |
|
|
|
public static final SurfaceType UshortGray = |
|
AnyShort.deriveSubType(DESC_USHORT_GRAY, |
|
PixelConverter.UshortGray.instance); |
|
|
|
public static final SurfaceType ByteBinary1Bit = |
|
AnyByteBinary.deriveSubType(DESC_BYTE_BINARY_1BIT); |
|
public static final SurfaceType ByteBinary2Bit = |
|
AnyByteBinary.deriveSubType(DESC_BYTE_BINARY_2BIT); |
|
public static final SurfaceType ByteBinary4Bit = |
|
AnyByteBinary.deriveSubType(DESC_BYTE_BINARY_4BIT); |
|
|
|
public static final SurfaceType ByteIndexed = |
|
AnyByte.deriveSubType(DESC_BYTE_INDEXED); |
|
|
|
public static final SurfaceType IntRgbx = |
|
AnyDcm.deriveSubType(DESC_INT_RGBx, PixelConverter.Rgbx.instance); |
|
|
|
public static final SurfaceType IntBgrx = |
|
AnyDcm.deriveSubType(DESC_INT_BGRx, PixelConverter.Bgrx.instance); |
|
|
|
public static final SurfaceType ThreeByteRgb = |
|
Any3Byte.deriveSubType(DESC_3BYTE_RGB, PixelConverter.Xbgr.instance); |
|
|
|
public static final SurfaceType IntArgbBm = |
|
AnyDcm.deriveSubType(DESC_INT_ARGB_BM, PixelConverter.ArgbBm.instance); |
|
|
|
public static final SurfaceType ByteIndexedBm = |
|
ByteIndexed.deriveSubType(DESC_BYTE_INDEXED_BM); |
|
|
|
public static final SurfaceType ByteIndexedOpaque = |
|
ByteIndexedBm.deriveSubType(DESC_BYTE_INDEXED_OPAQUE); |
|
|
|
public static final SurfaceType Index8Gray = |
|
ByteIndexedOpaque.deriveSubType(DESC_INDEX8_GRAY); |
|
|
|
public static final SurfaceType Index12Gray = |
|
Any.deriveSubType(DESC_INDEX12_GRAY); |
|
|
|
public static final SurfaceType AnyPaint = |
|
Any.deriveSubType(DESC_ANY_PAINT); |
|
|
|
public static final SurfaceType AnyColor = |
|
AnyPaint.deriveSubType(DESC_ANY_COLOR); |
|
|
|
public static final SurfaceType OpaqueColor = |
|
AnyColor.deriveSubType(DESC_OPAQUE_COLOR); |
|
|
|
public static final SurfaceType GradientPaint = |
|
AnyPaint.deriveSubType(DESC_GRADIENT_PAINT); |
|
public static final SurfaceType OpaqueGradientPaint = |
|
GradientPaint.deriveSubType(DESC_OPAQUE_GRADIENT_PAINT); |
|
|
|
public static final SurfaceType LinearGradientPaint = |
|
AnyPaint.deriveSubType(DESC_LINEAR_GRADIENT_PAINT); |
|
public static final SurfaceType OpaqueLinearGradientPaint = |
|
LinearGradientPaint.deriveSubType(DESC_OPAQUE_LINEAR_GRADIENT_PAINT); |
|
|
|
public static final SurfaceType RadialGradientPaint = |
|
AnyPaint.deriveSubType(DESC_RADIAL_GRADIENT_PAINT); |
|
public static final SurfaceType OpaqueRadialGradientPaint = |
|
RadialGradientPaint.deriveSubType(DESC_OPAQUE_RADIAL_GRADIENT_PAINT); |
|
|
|
public static final SurfaceType TexturePaint = |
|
AnyPaint.deriveSubType(DESC_TEXTURE_PAINT); |
|
public static final SurfaceType OpaqueTexturePaint = |
|
TexturePaint.deriveSubType(DESC_OPAQUE_TEXTURE_PAINT); |
|
|
|
/* |
|
* END OF SurfaceType OBJECTS FOR THE VARIOUS CONSTANTS |
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
public SurfaceType deriveSubType(String desc) { |
|
return new SurfaceType(this, desc); |
|
} |
|
|
|
public SurfaceType deriveSubType(String desc, |
|
PixelConverter pixelConverter) { |
|
return new SurfaceType(this, desc, pixelConverter); |
|
} |
|
|
|
private int uniqueID; |
|
private String desc; |
|
private SurfaceType next; |
|
protected PixelConverter pixelConverter; |
|
|
|
private SurfaceType(SurfaceType parent, String desc, |
|
PixelConverter pixelConverter) { |
|
next = parent; |
|
this.desc = desc; |
|
this.uniqueID = makeUniqueID(desc); |
|
this.pixelConverter = pixelConverter; |
|
} |
|
|
|
private SurfaceType(SurfaceType parent, String desc) { |
|
next = parent; |
|
this.desc = desc; |
|
this.uniqueID = makeUniqueID(desc); |
|
this.pixelConverter = parent.pixelConverter; |
|
} |
|
|
|
public synchronized static final int makeUniqueID(String desc) { |
|
Integer i = surfaceUIDMap.get(desc); |
|
|
|
if (i == null) { |
|
if (unusedUID > 255) { |
|
throw new InternalError("surface type id overflow"); |
|
} |
|
i = Integer.valueOf(unusedUID++); |
|
surfaceUIDMap.put(desc, i); |
|
} |
|
return i.intValue(); |
|
} |
|
|
|
public int getUniqueID() { |
|
return uniqueID; |
|
} |
|
|
|
public String getDescriptor() { |
|
return desc; |
|
} |
|
|
|
public SurfaceType getSuperType() { |
|
return next; |
|
} |
|
|
|
public PixelConverter getPixelConverter() { |
|
return pixelConverter; |
|
} |
|
|
|
public int pixelFor(int rgb, ColorModel cm) { |
|
return pixelConverter.rgbToPixel(rgb, cm); |
|
} |
|
|
|
public int rgbFor(int pixel, ColorModel cm) { |
|
return pixelConverter.pixelToRgb(pixel, cm); |
|
} |
|
|
|
public int getAlphaMask() { |
|
return pixelConverter.getAlphaMask(); |
|
} |
|
|
|
public int hashCode() { |
|
return desc.hashCode(); |
|
} |
|
|
|
public boolean equals(Object o) { |
|
if (o instanceof SurfaceType) { |
|
return (((SurfaceType) o).uniqueID == this.uniqueID); |
|
} |
|
return false; |
|
} |
|
|
|
public String toString() { |
|
return desc; |
|
} |
|
|
|
} |