src/demo/share/jfc/J2Ddemo/java2d/demos/Composite/FadeAnim.java
author prr
Mon, 14 May 2018 08:58:32 -0700
changeset 50146 0bb0e464ee76
child 52252 de9486d74a74
permissions -rw-r--r--
8198991: Move Java2D demo to the open repository Reviewed-by: serb, jeff
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50146
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
     1
/*
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
     2
 *
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
     3
 * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
     4
 *
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
     5
 * Redistribution and use in source and binary forms, with or without
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
     6
 * modification, are permitted provided that the following conditions
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
     7
 * are met:
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
     8
 *
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
     9
 *   - Redistributions of source code must retain the above copyright
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    10
 *     notice, this list of conditions and the following disclaimer.
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    11
 *
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    12
 *   - Redistributions in binary form must reproduce the above copyright
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    13
 *     notice, this list of conditions and the following disclaimer in the
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    14
 *     documentation and/or other materials provided with the distribution.
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    15
 *
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    16
 *   - Neither the name of Oracle nor the names of its
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    17
 *     contributors may be used to endorse or promote products derived
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    18
 *     from this software without specific prior written permission.
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    19
 *
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    20
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    21
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    22
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    23
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    24
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    25
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    26
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    27
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    28
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    29
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    30
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    31
 */
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    32
package java2d.demos.Composite;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    33
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    34
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    35
import static java.awt.Color.BLACK;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    36
import static java.awt.Color.BLUE;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    37
import static java.awt.Color.CYAN;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    38
import static java.awt.Color.GREEN;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    39
import static java.awt.Color.LIGHT_GRAY;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    40
import static java.awt.Color.MAGENTA;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    41
import static java.awt.Color.ORANGE;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    42
import static java.awt.Color.PINK;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    43
import static java.awt.Color.RED;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    44
import static java.awt.Color.WHITE;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    45
import static java.awt.Color.YELLOW;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    46
import java.awt.AlphaComposite;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    47
import java.awt.BasicStroke;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    48
import java.awt.BorderLayout;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    49
import java.awt.Color;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    50
import java.awt.Component;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    51
import java.awt.Dimension;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    52
import java.awt.Font;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    53
import java.awt.FontMetrics;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    54
import java.awt.GradientPaint;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    55
import java.awt.Graphics2D;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    56
import java.awt.Image;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    57
import java.awt.Paint;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    58
import java.awt.Rectangle;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    59
import java.awt.Shape;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    60
import java.awt.TexturePaint;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    61
import java.awt.geom.Arc2D;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    62
import java.awt.geom.CubicCurve2D;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    63
import java.awt.geom.Ellipse2D;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    64
import java.awt.geom.GeneralPath;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    65
import java.awt.geom.QuadCurve2D;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    66
import java.awt.geom.Rectangle2D;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    67
import java.awt.geom.RoundRectangle2D;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    68
import java.awt.image.BufferedImage;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    69
import java.util.ArrayList;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    70
import java.util.List;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    71
import java2d.AnimatingControlsSurface;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    72
import java2d.CustomControls;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    73
import javax.swing.Box;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    74
import javax.swing.BoxLayout;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    75
import javax.swing.JSlider;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    76
import javax.swing.JToolBar;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    77
import javax.swing.SwingConstants;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    78
import javax.swing.border.EtchedBorder;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    79
import javax.swing.border.TitledBorder;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    80
import javax.swing.event.ChangeEvent;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    81
import javax.swing.event.ChangeListener;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    82
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    83
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    84
/**
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    85
 * Animation of compositing shapes, text and images fading in and out.
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    86
 */
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    87
@SuppressWarnings("serial")
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    88
public final class FadeAnim extends AnimatingControlsSurface {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    89
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    90
    private static final TexturePaint texturePaint;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    91
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    92
    static {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    93
        int w = 10;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    94
        int h = 10;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    95
        BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    96
        Graphics2D gi = bi.createGraphics();
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    97
        Color oc = BLUE;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    98
        Color ic = GREEN;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
    99
        gi.setPaint(new GradientPaint(0, 0, oc, w * .35f, h * .35f, ic));
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   100
        gi.fillRect(0, 0, w / 2, h / 2);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   101
        gi.setPaint(new GradientPaint(w, 0, oc, w * .65f, h * .35f, ic));
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   102
        gi.fillRect(w / 2, 0, w / 2, h / 2);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   103
        gi.setPaint(new GradientPaint(0, h, oc, w * .35f, h * .65f, ic));
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   104
        gi.fillRect(0, h / 2, w / 2, h / 2);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   105
        gi.setPaint(new GradientPaint(w, h, oc, w * .65f, h * .65f, ic));
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   106
        gi.fillRect(w / 2, h / 2, w / 2, h / 2);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   107
        texturePaint = new TexturePaint(bi, new Rectangle(0, 0, w, h));
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   108
    }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   109
    private static BasicStroke bs = new BasicStroke(6);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   110
    private static Font fonts[] = {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   111
        new Font(Font.SERIF, Font.PLAIN, 64),
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   112
        new Font(Font.SERIF, Font.BOLD | Font.ITALIC, 24),
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   113
        new Font(Font.MONOSPACED, Font.BOLD, 36),
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   114
        new Font(Font.SANS_SERIF, Font.BOLD | Font.ITALIC, 48),
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   115
        new Font(Font.SANS_SERIF, Font.PLAIN, 52) };
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   116
    private static String strings[] = {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   117
        "Alpha", "Composite", "Src", "SrcOver",
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   118
        "SrcIn", "SrcOut", "Clear", "DstOver", "DstIn" };
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   119
    private static String imgs[] = {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   120
        "jumptojavastrip.png", "duke.png", "star7.png" };
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   121
    private static Paint paints[] = {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   122
        RED, BLUE, GREEN, MAGENTA,
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   123
        ORANGE, PINK, CYAN, texturePaint,
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   124
        YELLOW, LIGHT_GRAY, WHITE };
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   125
    private List<ObjectData> objects = new ArrayList<ObjectData>(20);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   126
    private int numShapes, numStrings, numImages;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   127
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   128
    public FadeAnim() {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   129
        setBackground(BLACK);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   130
        setStrings(2);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   131
        setImages(3);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   132
        setShapes(8);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   133
        setControls(new Component[] { new DemoControls(this) });
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   134
        setConstraints(new String[] { BorderLayout.EAST });
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   135
    }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   136
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   137
    public void setImages(int num) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   138
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   139
        if (num < numImages) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   140
            List<ObjectData> images = new ArrayList<ObjectData>(objects.size());
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   141
            for (ObjectData obj : objects) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   142
                if (obj.object instanceof Image) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   143
                    images.add(obj);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   144
                }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   145
            }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   146
            objects.removeAll(images.subList(num, images.size()));
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   147
        } else {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   148
            Dimension d = getSize();
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   149
            for (int i = numImages; i < num; i++) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   150
                Object obj = getImage(imgs[i % imgs.length]);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   151
                if (imgs[i % imgs.length].equals("jumptojavastrip.png")) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   152
                    int iw = ((Image) obj).getWidth(null);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   153
                    int ih = ((Image) obj).getHeight(null);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   154
                    BufferedImage bimage = new BufferedImage(iw, ih,
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   155
                            BufferedImage.TYPE_INT_RGB);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   156
                    bimage.createGraphics().drawImage((Image) obj, 0, 0, null);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   157
                    obj = bimage;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   158
                }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   159
                ObjectData od = new ObjectData(obj, BLACK);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   160
                od.reset(d.width, d.height);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   161
                objects.add(od);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   162
            }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   163
        }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   164
        numImages = num;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   165
    }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   166
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   167
    public void setStrings(int num) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   168
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   169
        if (num < numStrings) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   170
            List<ObjectData> textDatas = new ArrayList<ObjectData>(
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   171
                    objects.size());
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   172
            //for (int i = 0; i < objects.size(); i++) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   173
            for (ObjectData obj : objects) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   174
                if (obj.object instanceof TextData) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   175
                    textDatas.add(obj);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   176
                }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   177
            }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   178
            objects.removeAll(textDatas.subList(num, textDatas.size()));
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   179
        } else {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   180
            Dimension d = getSize();
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   181
            for (int i = numStrings; i < num; i++) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   182
                int j = i % fonts.length;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   183
                int k = i % strings.length;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   184
                Object obj = new TextData(strings[k], fonts[j], this);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   185
                ObjectData od = new ObjectData(obj, paints[i % paints.length]);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   186
                od.reset(d.width, d.height);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   187
                objects.add(od);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   188
            }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   189
        }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   190
        numStrings = num;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   191
    }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   192
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   193
    public void setShapes(int num) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   194
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   195
        if (num < numShapes) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   196
            List<ObjectData> shapes = new ArrayList<ObjectData>(objects.size());
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   197
            //for (int i = 0; i < objects.size(); i++) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   198
            for (ObjectData obj : objects) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   199
                if (obj.object instanceof Shape) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   200
                    shapes.add(obj);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   201
                }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   202
            }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   203
            objects.removeAll(shapes.subList(num, shapes.size()));
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   204
        } else {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   205
            Dimension d = getSize();
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   206
            for (int i = numShapes; i < num; i++) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   207
                Object obj = null;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   208
                switch (i % 7) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   209
                    case 0:
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   210
                        obj = new GeneralPath();
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   211
                        break;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   212
                    case 1:
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   213
                        obj = new Rectangle2D.Double();
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   214
                        break;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   215
                    case 2:
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   216
                        obj = new Ellipse2D.Double();
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   217
                        break;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   218
                    case 3:
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   219
                        obj = new Arc2D.Double();
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   220
                        break;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   221
                    case 4:
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   222
                        obj = new RoundRectangle2D.Double();
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   223
                        break;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   224
                    case 5:
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   225
                        obj = new CubicCurve2D.Double();
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   226
                        break;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   227
                    case 6:
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   228
                        obj = new QuadCurve2D.Double();
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   229
                        break;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   230
                }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   231
                ObjectData od = new ObjectData(obj, paints[i % paints.length]);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   232
                od.reset(d.width, d.height);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   233
                objects.add(od);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   234
            }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   235
        }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   236
        numShapes = num;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   237
    }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   238
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   239
    @Override
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   240
    public void reset(int w, int h) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   241
        for (int i = 0; i < objects.size(); i++) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   242
            objects.get(i).reset(w, h);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   243
        }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   244
    }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   245
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   246
    @Override
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   247
    public void step(int w, int h) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   248
        for (int i = 0; i < objects.size(); i++) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   249
            objects.get(i).step(w, h);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   250
        }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   251
    }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   252
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   253
    @Override
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   254
    public void render(int w, int h, Graphics2D g2) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   255
        for (int i = 0; i < objects.size(); i++) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   256
            ObjectData od = objects.get(i);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   257
            AlphaComposite ac = AlphaComposite.getInstance(
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   258
                    AlphaComposite.SRC_OVER, od.alpha);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   259
            g2.setComposite(ac);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   260
            g2.setPaint(od.paint);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   261
            g2.translate(od.x, od.y);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   262
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   263
            if (od.object instanceof Image) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   264
                g2.drawImage((Image) od.object, 0, 0, this);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   265
            } else if (od.object instanceof TextData) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   266
                g2.setFont(((TextData) od.object).font);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   267
                g2.drawString(((TextData) od.object).string, 0, 0);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   268
            } else if (od.object instanceof QuadCurve2D
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   269
                    || od.object instanceof CubicCurve2D) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   270
                g2.setStroke(bs);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   271
                g2.draw((Shape) od.object);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   272
            } else if (od.object instanceof Shape) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   273
                g2.fill((Shape) od.object);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   274
            }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   275
            g2.translate(-od.x, -od.y);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   276
        }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   277
    }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   278
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   279
    public static void main(String argv[]) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   280
        createDemoFrame(new FadeAnim());
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   281
    }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   282
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   283
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   284
    static class TextData extends Object {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   285
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   286
        public String string;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   287
        public Font font;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   288
        public int width, height;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   289
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   290
        public TextData(String str, Font font, Component cmp) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   291
            string = str;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   292
            this.font = font;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   293
            FontMetrics fm = cmp.getFontMetrics(font);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   294
            width = fm.stringWidth(str);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   295
            height = fm.getHeight();
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   296
        }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   297
    }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   298
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   299
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   300
    static class ObjectData extends Object {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   301
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   302
        final int UP = 0;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   303
        final int DOWN = 1;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   304
        Object object;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   305
        BufferedImage bimg;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   306
        Paint paint;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   307
        double x, y;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   308
        float alpha;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   309
        int alphaDirection;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   310
        int imgX;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   311
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   312
        public ObjectData(Object object, Paint paint) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   313
            this.object = object;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   314
            this.paint = paint;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   315
            if (object instanceof BufferedImage) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   316
                bimg = (BufferedImage) object;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   317
                this.object = bimg.getSubimage(0, 0, 80, 80);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   318
            }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   319
            getRandomXY(300, 250);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   320
            alpha = (float) Math.random();
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   321
            alphaDirection = Math.random() > 0.5 ? UP : DOWN;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   322
        }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   323
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   324
        private void getRandomXY(int w, int h) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   325
            if (object instanceof TextData) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   326
                x = Math.random() * (w - ((TextData) object).width);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   327
                y = Math.random() * h;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   328
                y = y < ((TextData) object).height ? ((TextData) object).height
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   329
                        : y;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   330
            } else if (object instanceof Image) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   331
                x = Math.random() * (w - ((Image) object).getWidth(null));
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   332
                y = Math.random() * (h - ((Image) object).getHeight(null));
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   333
            } else if (object instanceof Shape) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   334
                Rectangle bounds = ((Shape) object).getBounds();
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   335
                x = Math.random() * (w - bounds.width);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   336
                y = Math.random() * (h - bounds.height);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   337
            }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   338
        }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   339
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   340
        public void reset(int w, int h) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   341
            getRandomXY(w, h);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   342
            double ww = 20 + Math.random() * ((w == 0 ? 400 : w) / 4);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   343
            double hh = 20 + Math.random() * ((h == 0 ? 300 : h) / 4);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   344
            if (object instanceof Ellipse2D) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   345
                ((Ellipse2D) object).setFrame(0, 0, ww, hh);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   346
            } else if (object instanceof Rectangle2D) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   347
                ((Rectangle2D) object).setRect(0, 0, ww, ww);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   348
            } else if (object instanceof RoundRectangle2D) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   349
                ((RoundRectangle2D) object).setRoundRect(0, 0, hh, hh, 20, 20);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   350
            } else if (object instanceof Arc2D) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   351
                ((Arc2D) object).setArc(0, 0, hh, hh, 45, 270, Arc2D.PIE);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   352
            } else if (object instanceof QuadCurve2D) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   353
                ((QuadCurve2D) object).setCurve(0, 0, w * .2, h * .4, w * .4, 0);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   354
            } else if (object instanceof CubicCurve2D) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   355
                ((CubicCurve2D) object).setCurve(0, 0, 30, -60, 60, 60, 90, 0);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   356
            } else if (object instanceof GeneralPath) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   357
                GeneralPath p = new GeneralPath();
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   358
                float size = (float) ww;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   359
                p.moveTo(-size / 2.0f, -size / 8.0f);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   360
                p.lineTo(+size / 2.0f, -size / 8.0f);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   361
                p.lineTo(-size / 4.0f, +size / 2.0f);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   362
                p.lineTo(+0.0f, -size / 2.0f);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   363
                p.lineTo(+size / 4.0f, +size / 2.0f);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   364
                p.closePath();
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   365
                object = p;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   366
            }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   367
        }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   368
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   369
        public void step(int w, int h) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   370
            if (object instanceof BufferedImage) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   371
                if ((imgX += 80) == 800) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   372
                    imgX = 0;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   373
                }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   374
                object = bimg.getSubimage(imgX, 0, 80, 80);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   375
            }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   376
            if (alphaDirection == UP) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   377
                if ((alpha += 0.05) > .99) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   378
                    alphaDirection = DOWN;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   379
                    alpha = 1.0f;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   380
                }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   381
            } else if (alphaDirection == DOWN) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   382
                if ((alpha -= .05) < 0.01) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   383
                    alphaDirection = UP;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   384
                    alpha = 0;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   385
                    getRandomXY(w, h);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   386
                }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   387
            }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   388
        }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   389
    }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   390
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   391
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   392
    static class DemoControls extends CustomControls implements ChangeListener {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   393
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   394
        FadeAnim demo;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   395
        JSlider shapeSlider, stringSlider, imageSlider;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   396
        Font font = new Font(Font.SERIF, Font.BOLD, 10);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   397
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   398
        @SuppressWarnings("LeakingThisInConstructor")
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   399
        public DemoControls(FadeAnim demo) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   400
            super(demo.name);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   401
            this.demo = demo;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   402
            setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   403
            add(Box.createVerticalStrut(5));
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   404
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   405
            JToolBar toolbar = new JToolBar(SwingConstants.VERTICAL);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   406
            toolbar.setFloatable(false);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   407
            shapeSlider = new JSlider(SwingConstants.HORIZONTAL, 0, 20,
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   408
                    demo.numShapes);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   409
            shapeSlider.addChangeListener(this);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   410
            TitledBorder tb = new TitledBorder(new EtchedBorder());
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   411
            tb.setTitleFont(font);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   412
            tb.setTitle(String.valueOf(demo.numShapes) + " Shapes");
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   413
            shapeSlider.setBorder(tb);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   414
            shapeSlider.setPreferredSize(new Dimension(80, 45));
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   415
            shapeSlider.setOpaque(true);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   416
            toolbar.addSeparator();
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   417
            toolbar.add(shapeSlider);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   418
            toolbar.addSeparator();
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   419
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   420
            stringSlider = new JSlider(SwingConstants.HORIZONTAL, 0, 10,
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   421
                    demo.numStrings);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   422
            stringSlider.addChangeListener(this);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   423
            tb = new TitledBorder(new EtchedBorder());
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   424
            tb.setTitleFont(font);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   425
            tb.setTitle(String.valueOf(demo.numStrings) + " Strings");
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   426
            stringSlider.setBorder(tb);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   427
            stringSlider.setPreferredSize(new Dimension(80, 45));
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   428
            stringSlider.setOpaque(true);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   429
            toolbar.add(stringSlider);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   430
            toolbar.addSeparator();
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   431
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   432
            imageSlider = new JSlider(SwingConstants.HORIZONTAL, 0, 10,
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   433
                    demo.numImages);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   434
            imageSlider.addChangeListener(this);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   435
            tb = new TitledBorder(new EtchedBorder());
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   436
            tb.setTitleFont(font);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   437
            tb.setTitle(String.valueOf(demo.numImages) + " Images");
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   438
            imageSlider.setBorder(tb);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   439
            imageSlider.setPreferredSize(new Dimension(80, 45));
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   440
            imageSlider.setOpaque(true);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   441
            toolbar.add(imageSlider);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   442
            toolbar.addSeparator();
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   443
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   444
            add(toolbar);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   445
        }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   446
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   447
        @Override
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   448
        public void stateChanged(ChangeEvent e) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   449
            JSlider slider = (JSlider) e.getSource();
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   450
            int value = slider.getValue();
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   451
            TitledBorder tb = (TitledBorder) slider.getBorder();
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   452
            if (slider.equals(shapeSlider)) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   453
                tb.setTitle(String.valueOf(value) + " Shapes");
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   454
                demo.setShapes(value);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   455
            } else if (slider.equals(stringSlider)) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   456
                tb.setTitle(String.valueOf(value) + " Strings");
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   457
                demo.setStrings(value);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   458
            } else if (slider.equals(imageSlider)) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   459
                tb.setTitle(String.valueOf(value) + " Images");
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   460
                demo.setImages(value);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   461
            }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   462
            slider.repaint();
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   463
            if (!demo.animating.running()) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   464
                demo.repaint();
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   465
            }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   466
        }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   467
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   468
        @Override
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   469
        public Dimension getPreferredSize() {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   470
            return new Dimension(80, 0);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   471
        }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   472
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   473
        @Override
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   474
        public void run() {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   475
            try {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   476
                Thread.sleep(999);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   477
            } catch (InterruptedException e) {
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   478
                return;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   479
            }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   480
            shapeSlider.setValue((int) (Math.random() * 5));
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   481
            stringSlider.setValue(10);
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   482
            thread = null;
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   483
        }
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   484
    } // End DemoControls
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   485
} // End FadeAnim
0bb0e464ee76 8198991: Move Java2D demo to the open repository
prr
parents:
diff changeset
   486