view j2se/src/share/demo/java2d/J2DBench/src/j2dbench/Destinations.java @ 2:16f2b6c91171 trunk

[svn] Load openjdk/jdk7/b14 into jdk/trunk.
author xiomara
date Fri, 22 Jun 2007 00:46:43 +0000
parents a4ed3fb96592
children
line wrap: on
line source

/*
 * Copyright 2002-2007 Sun Microsystems, Inc.  All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *   - Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *
 *   - Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *
 *   - Neither the name of Sun Microsystems nor the names of its
 *     contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

package j2dbench;

import java.awt.Image;
import java.awt.Component;
import java.awt.GraphicsConfiguration;
import java.awt.Transparency;
import java.awt.color.ColorSpace;
import java.awt.image.BufferedImage;
import java.awt.image.ComponentColorModel;
import java.awt.image.DataBuffer;
import java.awt.image.WritableRaster;

import j2dbench.tests.GraphicsTests;
import j2dbench.tests.ImageTests;

public abstract class Destinations extends Option.Enable {
    public static Group.EnableSet destroot;
    public static Group bufimgdestroot;
    public static Group compatimgdestroot;

    public static void init() {
	destroot = new Group.EnableSet(TestEnvironment.globaloptroot,
				       "dest", "Output Destination Options");

	new Screen();
	new OffScreen();

	if (GraphicsTests.hasGraphics2D) {
            if (ImageTests.hasCompatImage) {
                compatimgdestroot =
                    new Group.EnableSet(destroot, "compatimg",
                                        "Compatible Image Destinations");
                compatimgdestroot.setHorizontal();

                new CompatImg();
                new CompatImg(Transparency.OPAQUE);
                new CompatImg(Transparency.BITMASK);
                new CompatImg(Transparency.TRANSLUCENT);
            }

	    if (ImageTests.hasVolatileImage) {
		new VolatileImg();
	    }

	    bufimgdestroot = new Group.EnableSet(destroot, "bufimg",
						 "BufferedImage Destinations");

	    new BufImg(BufferedImage.TYPE_INT_RGB);
	    new BufImg(BufferedImage.TYPE_INT_ARGB);
            new BufImg(BufferedImage.TYPE_INT_ARGB_PRE);
            new BufImg(BufferedImage.TYPE_3BYTE_BGR);
	    new BufImg(BufferedImage.TYPE_BYTE_INDEXED);
	    new BufImg(BufferedImage.TYPE_BYTE_GRAY);
            new CustomImg();
	}
    }

    public Destinations(Group parent,
			String nodename, String description,
			boolean defenabled)
    {
	super(parent, nodename, description, defenabled);
    }

    public void modifyTest(TestEnvironment env) {
	setDestination(env);
    }

    public void restoreTest(TestEnvironment env) {
	env.setTestImage(null);
    }

    public String getAbbreviatedModifierDescription(Object val) {
	return "to "+getModifierValueName(val);
    }

    public abstract void setDestination(TestEnvironment env);

    public static class Screen extends Destinations {
	public Screen() {
	    super(destroot, "screen", "Output to Screen", false);
	}

	public String getModifierValueName(Object val) {
	    return "Screen";
	}

	public void setDestination(TestEnvironment env) {
	    env.setTestImage(null);
	}
    }

    public static class OffScreen extends Destinations {
	public OffScreen() {
	    super(destroot, "offscreen", "Output to OffScreen Image", false);
	}

	public String getModifierValueName(Object val) {
	    return "OffScreen";
	}

	public void setDestination(TestEnvironment env) {
	    Component c = env.getCanvas();
	    env.setTestImage(c.createImage(env.getWidth(), env.getHeight()));
	}
    }

    public static class CompatImg extends Destinations {
	int transparency;

	public static String ShortNames[] = {
	    "compatimg",
	    "opqcompatimg",
	    "bmcompatimg",
	    "transcompatimg",
	};

	public static String ShortDescriptions[] = {
	    "Default",
	    "Opaque",
	    "Bitmask",
	    "Translucent",
	};

	public static String LongDescriptions[] = {
	    "Default Compatible Image",
	    "Opaque Compatible Image",
	    "Bitmask Compatible Image",
	    "Translucent Compatible Image",
	};

	public static String ModifierNames[] = {	
	    "CompatImage()",
	    "CompatImage(Opaque)",
	    "CompatImage(Bitmask)",
	    "CompatImage(Translucent)",
	};

	public CompatImg() {
	    this(0);
	}

	public CompatImg(int transparency) {
	    super(compatimgdestroot,
		  ShortNames[transparency],
		  ShortDescriptions[transparency],
		  false);
	    this.transparency = transparency;
	}

	public String getModifierValueName(Object val) {
	    return ModifierNames[transparency];
	}

	public void setDestination(TestEnvironment env) {
	    Component c = env.getCanvas();
	    GraphicsConfiguration gc = c.getGraphicsConfiguration();
	    int w = env.getWidth();
	    int h = env.getHeight();
	    if (transparency == 0) {
		env.setTestImage(gc.createCompatibleImage(w, h));
	    } else {
		env.setTestImage(gc.createCompatibleImage(w, h, transparency));
	    }
	}
    }

    public static class VolatileImg extends Destinations {
	public VolatileImg() {
	    super(destroot, "volimg", "Output to Volatile Image", false);
	}

	public String getModifierValueName(Object val) {
	    return "VolatileImg";
	}

	public void setDestination(TestEnvironment env) {
	    Component c = env.getCanvas();
	    env.setTestImage(c.createVolatileImage(env.getWidth(),
						   env.getHeight()));
	}
    }


    public static class BufImg extends Destinations {
	int type;
	Image img;

	public static String ShortNames[] = {
	    "custom",
	    "IntXrgb",
	    "IntArgb",
	    "IntArgbPre",
	    "IntXbgr",
	    "3ByteBgr",
	    "4ByteAbgr",
	    "4ByteAbgrPre",
	    "Short565",
	    "Short555",
	    "ByteGray",
	    "ShortGray",
	    "ByteBinary",
	    "ByteIndexed",
	};

	public static String Descriptions[] = {
	    "Custom Image",
	    "32-bit XRGB Packed Image",
	    "32-bit ARGB Packed Image",
	    "32-bit ARGB Alpha Premultiplied Packed Image",
	    "32-bit XBGR Packed Image",
            "3-byte BGR Component Image",
	    "4-byte ABGR Component Image",
	    "4-byte ABGR Alpha Premultiplied Component Image",
	    "16-bit 565 RGB Packed Image",
	    "15-bit 555 RGB Packed Image",
	    "8-bit Grayscale Image",
	    "16-bit Grayscale Image",
	    "1-bit Binary Image",
	    "8-bit Indexed Image",
	};

	public BufImg(int type) {
	    super(bufimgdestroot, ShortNames[type], Descriptions[type], false);
	    this.type = type;
	}

	public String getModifierValueName(Object val) {
	    return "BufImg("+getNodeName()+")";
	}

	public void setDestination(TestEnvironment env) {
	    if (img == null) {
		img = new BufferedImage(env.getWidth(), env.getHeight(), type);
	    }
	    env.setTestImage(img);
	}
    }

    public static class CustomImg extends Destinations {
        private Image img;

        public CustomImg() {
            super(bufimgdestroot,
                  "custom",
                  "Custom (3-float RGB) Image",
                  false);
        }

        public String getModifierValueName(Object val) {
            return "CustomImg";
        }

        public void setDestination(TestEnvironment env) {
            if (img == null) {
                ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_sRGB);
                ComponentColorModel cm =
                    new ComponentColorModel(cs, false, false,
                                            Transparency.OPAQUE,
                                            DataBuffer.TYPE_FLOAT);
                WritableRaster raster =
                    cm.createCompatibleWritableRaster(env.getWidth(),
                                                      env.getHeight());
                img = new BufferedImage(cm, raster, false, null);
            }
            env.setTestImage(img);
        }
    }
}