aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.4.3/libjava/classpath/examples/gnu/classpath/examples/awt/AnimationApplet.java
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.4.3/libjava/classpath/examples/gnu/classpath/examples/awt/AnimationApplet.java')
-rw-r--r--gcc-4.4.3/libjava/classpath/examples/gnu/classpath/examples/awt/AnimationApplet.java232
1 files changed, 232 insertions, 0 deletions
diff --git a/gcc-4.4.3/libjava/classpath/examples/gnu/classpath/examples/awt/AnimationApplet.java b/gcc-4.4.3/libjava/classpath/examples/gnu/classpath/examples/awt/AnimationApplet.java
new file mode 100644
index 000000000..aea8cd4f6
--- /dev/null
+++ b/gcc-4.4.3/libjava/classpath/examples/gnu/classpath/examples/awt/AnimationApplet.java
@@ -0,0 +1,232 @@
+/* AnimationApplet.java -- An example of an old-style AWT applet
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath examples.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath 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 for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA. */
+
+package gnu.classpath.examples.awt;
+
+import java.awt.*;
+import java.applet.*;
+
+
+/**
+ * AnimationApplet demonstrates the need for Xflush calls in
+ * GdkGraphics.c. To see how this demo can fail in their absence,
+ * remove the contents of schedule_flush in GdkGraphics.c. The
+ * animation will be so choppy that it is effectively stopped.
+ */
+public class AnimationApplet
+ extends Applet
+ implements Runnable
+{
+ boolean going = false;
+ Thread animThread = null;
+ int SPEED = 5;
+ int circleX = 0;
+ int circleY = 0;
+ int circleXold = 0;
+ int circleYold = 0;
+ int circleXdelta = 0;
+ int circleYdelta = 0;
+ int circleDiameter = 0;
+ int autoCircleX = 0;
+ int autoCircleY = 0;
+ int autoCircleXold = 0;
+ int autoCircleYold = 0;
+ int autoCircleXdelta = (int) (0.66 * SPEED);
+ int autoCircleYdelta = (int) (1.33 * SPEED);
+ int boardWidth = 0;
+ int boardHeight = 0;
+ int CIRCLE_SIZE = 5;
+
+ private Graphics appletGraphics;
+
+ // Update the circles' location values.
+ private void moveCircles()
+ {
+ circleX += circleXdelta;
+ if (circleX < 0)
+ circleX = 0;
+ if (circleX > boardWidth - circleDiameter)
+ circleX = boardWidth - circleDiameter;
+
+ circleY += circleYdelta;
+ if (circleY < 0)
+ circleY = 0;
+ if (circleY > boardHeight - circleDiameter)
+ circleY = boardHeight - circleDiameter;
+
+ autoCircleX += autoCircleXdelta;
+ if (autoCircleX < 0)
+ {
+ autoCircleX = 0;
+ autoCircleXdelta = -autoCircleXdelta;
+ }
+ if (autoCircleX > boardWidth - circleDiameter)
+ {
+ autoCircleX = boardWidth - circleDiameter;
+ autoCircleXdelta = -autoCircleXdelta;
+ }
+
+ autoCircleY += autoCircleYdelta;
+ if (autoCircleY < 0)
+ {
+ autoCircleY = 0;
+ autoCircleYdelta = -autoCircleYdelta;
+ }
+ if (autoCircleY > boardHeight - circleDiameter)
+ {
+ autoCircleY = boardHeight - circleDiameter;
+ autoCircleYdelta = -autoCircleYdelta;
+ }
+ }
+
+ // Clear the circle in the old location and paint a new circle
+ // in the new location.
+ private void paintCircles()
+ {
+ appletGraphics.setColor(Color.BLUE);
+ appletGraphics.fillOval(circleXold, circleYold, circleDiameter,
+ circleDiameter);
+ appletGraphics.setColor(Color.YELLOW);
+ appletGraphics.fillOval(circleX, circleY, circleDiameter,
+ circleDiameter);
+
+ appletGraphics.setColor(Color.BLUE);
+ appletGraphics.fillOval(autoCircleXold, autoCircleYold, circleDiameter,
+ circleDiameter);
+ appletGraphics.setColor(Color.WHITE);
+ appletGraphics.fillOval(autoCircleX, autoCircleY, circleDiameter,
+ circleDiameter);
+ }
+
+ // Override Applet.run.
+ public void run()
+ {
+ while (animThread != null)
+ {
+ circleXold = circleX;
+ circleYold = circleY;
+ autoCircleXold = autoCircleX;
+ autoCircleYold = autoCircleY;
+
+ moveCircles();
+ paintCircles();
+
+ if (animThread != null)
+ {
+ try
+ {
+ Thread.sleep(20);
+ }
+ catch (InterruptedException e)
+ {
+ }
+ }
+ }
+ }
+
+ // Override Applet.paint.
+ public void paint(Graphics g)
+ {
+ boardWidth = this.getSize().width;
+ boardHeight = this.getSize().height;
+ g.setColor(Color.BLUE);
+ g.fillRect(0, 0, boardWidth, boardHeight);
+ if (!going)
+ {
+ FontMetrics fm = appletGraphics.getFontMetrics();
+ appletGraphics.setColor(Color.WHITE);
+ String msg = "Click to Start";
+ appletGraphics.drawString(msg,
+ (boardWidth >> 1) - (fm.stringWidth(msg) >> 1),
+ (boardHeight >> 1) - (fm.getHeight() >> 1));
+ }
+ }
+
+ // Override Applet.destroy.
+ public void destroy()
+ {
+ // animThread.stop();
+ animThread = null;
+ }
+
+ // Override Applet.init.
+ public void init()
+ {
+ boardWidth = this.getSize().width;
+ boardHeight = this.getSize().height;
+ going = false;
+ appletGraphics = getGraphics();
+ appletGraphics.setFont(new Font(appletGraphics.getFont().getName(),
+ Font.BOLD, 15));
+ }
+
+ // Override Component.preferredSize for when we're run standalone.
+ public Dimension preferredSize ()
+ {
+ return new Dimension (400, 400);
+ }
+
+ // Override Applet.handleEvent, the old-style AWT-event handler.
+ public boolean handleEvent(Event event)
+ {
+ switch (event.id)
+ {
+ case Event.MOUSE_DOWN:
+ if (!going)
+ {
+ going = true;
+ circleDiameter = boardWidth / CIRCLE_SIZE;
+ circleX = (boardWidth - circleDiameter) >> 1;
+ circleY = (boardHeight - circleDiameter) >> 1;
+ circleXdelta = 0;
+ circleYdelta = 0;
+ repaint();
+ animThread = new Thread(this);
+ animThread.start();
+ }
+ break;
+ case Event.KEY_ACTION:
+ case Event.KEY_PRESS:
+ if (event.key == Event.LEFT)
+ circleXdelta = -SPEED;
+ else if (event.key == Event.RIGHT)
+ circleXdelta = SPEED;
+ else if (event.key == Event.UP)
+ circleYdelta = -SPEED;
+ else if (event.key == Event.DOWN)
+ circleYdelta = SPEED;
+ break;
+ case Event.KEY_ACTION_RELEASE:
+ case Event.KEY_RELEASE:
+ if (event.key == Event.LEFT && circleXdelta < 0)
+ circleXdelta = 0;
+ else if (event.key == Event.RIGHT && circleXdelta > 0)
+ circleXdelta = 0;
+ else if (event.key == Event.UP && circleYdelta < 0)
+ circleYdelta = 0;
+ else if (event.key == Event.DOWN && circleYdelta > 0)
+ circleYdelta = 0;
+ break;
+ default:
+ break;
+ }
+ return false;
+ }
+}