1 /*
   2  *
   3  * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
   4  *
   5  * Redistribution and use in source and binary forms, with or without
   6  * modification, are permitted provided that the following conditions
   7  * are met:
   8  *
   9  *   - Redistributions of source code must retain the above copyright
  10  *     notice, this list of conditions and the following disclaimer.
  11  *
  12  *   - Redistributions in binary form must reproduce the above copyright
  13  *     notice, this list of conditions and the following disclaimer in the
  14  *     documentation and/or other materials provided with the distribution.
  15  *
  16  *   - Neither the name of Oracle nor the names of its
  17  *     contributors may be used to endorse or promote products derived
  18  *     from this software without specific prior written permission.
  19  *
  20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
  21  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  23  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  27  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  28  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  29  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  30  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  31  */
  32 package java2d.demos.Images;
  33 
  34 
  35 import java.awt.*;
  36 import javax.swing.JButton;
  37 import java.awt.image.ImageObserver;
  38 import java2d.AnimatingSurface;
  39 import java2d.DemoPanel;
  40 
  41 
  42 /**
  43  * Animated gif with a transparent background.
  44  */
  45 @SuppressWarnings("serial")
  46 public class DukeAnim extends AnimatingSurface implements ImageObserver {
  47 
  48     private static Image agif, clouds;
  49     private static int aw, ah, cw;
  50     private int x;
  51     private JButton b;
  52 
  53     @SuppressWarnings("LeakingThisInConstructor")
  54     public DukeAnim() {
  55         setBackground(Color.white);
  56         clouds = getImage("clouds.jpg");
  57         agif = getImage("duke.running.gif");
  58         aw = agif.getWidth(this) / 2;
  59         ah = agif.getHeight(this) / 2;
  60         cw = clouds.getWidth(this);
  61         dontThread = true;
  62     }
  63 
  64     @Override
  65     public void reset(int w, int h) {
  66         b = ((DemoPanel) getParent()).tools.startStopB;
  67     }
  68 
  69     @Override
  70     public void step(int w, int h) {
  71     }
  72 
  73     @Override
  74     public void render(int w, int h, Graphics2D g2) {
  75         if ((x -= 3) <= -cw) {
  76             x = w;
  77         }
  78         g2.drawImage(clouds, x, 10, cw, h - 20, this);
  79         g2.drawImage(agif, w / 2 - aw, h / 2 - ah, this);
  80     }
  81 
  82     @Override
  83     public boolean imageUpdate(Image img, int infoflags,
  84             int x, int y, int width, int height) {
  85         if (b.isSelected() && (infoflags & ALLBITS) != 0) {
  86             repaint();
  87         }
  88         if (b.isSelected() && (infoflags & FRAMEBITS) != 0) {
  89             repaint();
  90         }
  91         return isShowing();
  92     }
  93 
  94     public static void main(String s[]) {
  95         createDemoFrame(new DukeAnim());
  96     }
  97 }