home *** CD-ROM | disk | FTP | other *** search
- import java.applet.Applet;
- import java.awt.Canvas;
- import java.awt.Color;
- import java.awt.Component;
- import java.awt.Dimension;
- import java.awt.Graphics;
- import java.awt.Image;
- import java.awt.image.ImageObserver;
- import java.util.Date;
-
- public class AnalogClockCanvas2 extends Canvas implements Runnable {
- Image osImage;
- Graphics osg;
- Thread theThread;
- Color clockColor;
- Color hourColor;
- Color minuteColor;
- Color secondColor;
- Color backgroundColor;
- Image clockFace;
- long secondsCount;
- int radius;
- int hours;
- int minutes;
- int seconds;
- long currCount;
- double hourSegmentAngle;
- double minuteSegmentAngle;
- double secondSegmentAngle;
- int hourPosition;
- int minuteOffset;
- int xPos;
- int yPos;
- int widthPos;
- int heightPos;
- Image bkImage;
- int[][] hourPointsX = new int[60][5];
- int[][] hourPointsY = new int[60][5];
- int[][] minutePointsX = new int[60][5];
- int[][] minutePointsY = new int[60][5];
- int[][] secondPointsX = new int[60][5];
- int[][] secondPointsY = new int[60][5];
- static final long secondsPerDay = 86400L;
- static final int secondsPerHour = 3600;
- static final double anglePerHour = 0.10471975511965977;
- static final double anglePerMinute = 0.10471975511965977;
- static final double anglePerSecond = 0.10471975511965977;
- static final double radiansPerDegree = (Math.PI / 180D);
-
- public AnalogClockCanvas2(Applet var1, int var2) {
- Date var3 = new Date();
- this.secondsCount = (long)(var3.getSeconds() + var3.getMinutes() * 60 + var3.getHours() * 3600);
- this.GetParameters(var1, var2);
- }
-
- void GetParameters(Applet var1, int var2) {
- String var3 = var1.getParameter("analogClockColor" + var2);
- this.clockColor = AppletParam2.GetColor(var3, Color.black);
- var3 = var1.getParameter("analogClockHourColor" + var2);
- this.hourColor = AppletParam2.GetColor(var3, Color.black);
- var3 = var1.getParameter("analogClockMinuteColor" + var2);
- this.minuteColor = AppletParam2.GetColor(var3, Color.black);
- var3 = var1.getParameter("analogClockSecondColor" + var2);
- this.secondColor = AppletParam2.GetColor(var3, Color.black);
- var3 = var1.getParameter("analogClockBkColor" + var2);
- this.backgroundColor = AppletParam2.GetColor(var3, (Color)null);
- if (this.backgroundColor != null) {
- ((Component)this).setBackground(this.backgroundColor);
- }
-
- var3 = var1.getParameter("analogClockFace" + var2);
- this.clockFace = var1.getImage(var1.getCodeBase(), var3);
- var3 = var1.getParameter("analogClockHourSegmentAngle" + var2);
- this.hourSegmentAngle = (double)AppletParam2.GetInt(var3, 7) * (Math.PI / 180D);
- var3 = var1.getParameter("analogClockMinuteSegmentAngle" + var2);
- this.minuteSegmentAngle = (double)AppletParam2.GetInt(var3, 7) * (Math.PI / 180D);
- var3 = var1.getParameter("analogClockSecondSegmentAngle" + var2);
- this.secondSegmentAngle = (double)AppletParam2.GetInt(var3, 3) * (Math.PI / 180D);
- var3 = var1.getParameter("analogClockBkImage" + var2);
- this.bkImage = var1.getImage(var1.getCodeBase(), var3);
- }
-
- public void Start() {
- this.theThread = new Thread(this);
- this.theThread.start();
- ((Component)this).repaint();
- }
-
- public void Stop() {
- this.theThread.stop();
- this.theThread = null;
- }
-
- public void update(Graphics var1) {
- if (this.osImage == null) {
- this.osImage = ((Component)this).createImage(this.widthPos, this.heightPos);
- this.osg = this.osImage.getGraphics();
- }
-
- this.osg.setColor(((Component)this).getBackground());
- this.osg.fillRect(0, 0, ((Component)this).size().width, ((Component)this).size().height);
- if (this.bkImage != null) {
- int var2 = this.bkImage.getWidth(this);
- int var3 = this.bkImage.getHeight(this);
- int var4 = ((Component)this).size().width / var2;
- int var5 = ((Component)this).size().height / var3;
- ++var4;
- ++var5;
-
- for(int var6 = 0; var6 < var5; ++var6) {
- for(int var7 = 0; var7 < var4; ++var7) {
- this.osg.drawImage(this.bkImage, var7 * var2, var6 * var3, this);
- }
- }
- }
-
- this.currCount = this.secondsCount;
- this.hours = (int)(this.currCount / 3600L);
- this.currCount -= (long)(this.hours * 3600);
- this.minutes = (int)(this.currCount / 60L);
- this.currCount -= (long)(this.minutes * 60);
- this.seconds = (int)this.currCount;
- if (this.clockFace != null) {
- this.osg.drawImage(this.clockFace, 0, 0, ((Component)this).size().width, ((Component)this).size().height, this);
- } else {
- int var13 = ((Component)this).size().width / 2;
- int var14 = ((Component)this).size().height / 2;
- this.osg.setColor(this.clockColor);
- this.osg.drawOval(0, 0, ((Component)this).size().width - 1, ((Component)this).size().height - 1);
-
- for(int var8 = 0; var8 < 12; ++var8) {
- double var9 = Math.sin((double)var8 * 0.10471975511965977 * (double)5.0F);
- double var11 = Math.cos((double)var8 * 0.10471975511965977 * (double)5.0F);
- int var19 = (int)((double)var13 + (double)this.radius * var9);
- int var20 = (int)((double)var14 - (double)this.radius * var11);
- int var16 = (int)((double)var13 + (double)(this.radius - 4) * var9);
- int var18 = (int)((double)var14 - (double)(this.radius - 4) * var11);
- this.osg.drawLine(var16, var18, var19, var20);
- }
- }
-
- this.osg.setColor(this.secondColor);
- this.osg.fillPolygon(this.secondPointsX[this.seconds], this.secondPointsY[this.seconds], 5);
- this.osg.setColor(this.minuteColor);
- this.osg.fillPolygon(this.minutePointsX[this.minutes], this.minutePointsY[this.minutes], 5);
- this.osg.setColor(this.hourColor);
- this.hourPosition = this.hours % 12 * 5;
- this.minuteOffset = this.minutes / 12;
- this.hourPosition += this.minuteOffset;
- this.osg.fillPolygon(this.hourPointsX[this.hourPosition], this.hourPointsY[this.hourPosition], 5);
- var1.drawImage(this.osImage, 0, 0, (ImageObserver)null);
- }
-
- public void run() {
- while(true) {
- ((Component)this).repaint();
-
- try {
- Thread.sleep(1000L);
- ++this.secondsCount;
- if (this.secondsCount > 86400L) {
- this.secondsCount = 0L;
- }
- } catch (InterruptedException var2) {
- System.out.println(((Throwable)var2).getMessage());
- }
- }
- }
-
- void ComputeHandPolygons() {
- int var5 = this.widthPos / 2;
- int var6 = this.heightPos / 2;
- int var7 = (int)((double)0.5F * (double)this.radius);
- int var8 = var7 / 2;
- int var9 = (int)((double)0.75F * (double)this.radius);
- int var10 = var9 / 2;
- int var11 = (int)(0.9 * (double)this.radius);
- int var12 = var11 / 2;
-
- for(int var13 = 0; var13 < 60; ++var13) {
- double var3 = (double)var13 * 0.10471975511965977;
- this.hourPointsX[var13][0] = var5;
- this.hourPointsY[var13][0] = var6;
- int var1 = (int)((double)var5 + (double)var8 * Math.sin(var3 - this.hourSegmentAngle));
- int var2 = (int)((double)var6 - (double)var8 * Math.cos(var3 - this.hourSegmentAngle));
- this.hourPointsX[var13][1] = var1;
- this.hourPointsY[var13][1] = var2;
- var1 = (int)((double)var5 + (double)var7 * Math.sin(var3));
- var2 = (int)((double)var6 - (double)var7 * Math.cos(var3));
- this.hourPointsX[var13][2] = var1;
- this.hourPointsY[var13][2] = var2;
- var1 = (int)((double)var5 + (double)var8 * Math.sin(var3 + this.hourSegmentAngle));
- var2 = (int)((double)var6 - (double)var8 * Math.cos(var3 + this.hourSegmentAngle));
- this.hourPointsX[var13][3] = var1;
- this.hourPointsY[var13][3] = var2;
- this.hourPointsX[var13][4] = var5;
- this.hourPointsY[var13][4] = var6;
- }
-
- for(int var14 = 0; var14 < 60; ++var14) {
- double var32 = (double)var14 * 0.10471975511965977;
- this.minutePointsX[var14][0] = var5;
- this.minutePointsY[var14][0] = var6;
- int var18 = (int)((double)var5 + (double)var10 * Math.sin(var32 - this.minuteSegmentAngle));
- int var26 = (int)((double)var6 - (double)var10 * Math.cos(var32 - this.minuteSegmentAngle));
- this.minutePointsX[var14][1] = var18;
- this.minutePointsY[var14][1] = var26;
- var18 = (int)((double)var5 + (double)var9 * Math.sin(var32));
- var26 = (int)((double)var6 - (double)var9 * Math.cos(var32));
- this.minutePointsX[var14][2] = var18;
- this.minutePointsY[var14][2] = var26;
- var18 = (int)((double)var5 + (double)var10 * Math.sin(var32 + this.minuteSegmentAngle));
- var26 = (int)((double)var6 - (double)var10 * Math.cos(var32 + this.minuteSegmentAngle));
- this.minutePointsX[var14][3] = var18;
- this.minutePointsY[var14][3] = var26;
- this.minutePointsX[var14][4] = var5;
- this.minutePointsY[var14][4] = var6;
- }
-
- for(int var15 = 0; var15 < 60; ++var15) {
- double var33 = (double)var15 * 0.10471975511965977;
- this.secondPointsX[var15][0] = var5;
- this.secondPointsY[var15][0] = var6;
- int var21 = (int)((double)var5 + (double)var12 * Math.sin(var33 - this.secondSegmentAngle));
- int var29 = (int)((double)var6 - (double)var12 * Math.cos(var33 - this.secondSegmentAngle));
- this.secondPointsX[var15][1] = var21;
- this.secondPointsY[var15][1] = var29;
- var21 = (int)((double)var5 + (double)var11 * Math.sin(var33));
- var29 = (int)((double)var6 - (double)var11 * Math.cos(var33));
- this.secondPointsX[var15][2] = var21;
- this.secondPointsY[var15][2] = var29;
- var21 = (int)((double)var5 + (double)var12 * Math.sin(var33 + this.secondSegmentAngle));
- var29 = (int)((double)var6 - (double)var12 * Math.cos(var33 + this.secondSegmentAngle));
- this.secondPointsX[var15][3] = var21;
- this.secondPointsY[var15][3] = var29;
- this.secondPointsX[var15][4] = var5;
- this.secondPointsY[var15][4] = var6;
- }
-
- }
-
- public synchronized void reshape(int var1, int var2, int var3, int var4) {
- super.reshape(var1, var2, var3, var4);
- this.xPos = var1;
- this.yPos = var2;
- this.widthPos = var3;
- this.heightPos = var4;
- this.radius = var3 / 2;
- this.ComputeHandPolygons();
- this.osImage = null;
- this.osg = null;
- }
-
- public Dimension minimumSize() {
- return new Dimension(10, 10);
- }
-
- public Dimension preferredSize() {
- return new Dimension(10, 10);
- }
- }
-