home *** CD-ROM | disk | FTP | other *** search
- import java.applet.Applet;
- import java.awt.Color;
- import java.awt.Component;
- import java.awt.Cursor;
- import java.awt.Dimension;
- import java.awt.Event;
- import java.awt.Font;
- import java.awt.FontMetrics;
- import java.awt.Graphics;
- import java.awt.Image;
- import java.awt.MediaTracker;
- import java.awt.Point;
- import java.awt.Polygon;
- import java.io.BufferedInputStream;
- import java.io.DataInputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.net.MalformedURLException;
- import java.net.URL;
-
- public class Panorama extends Applet implements Runnable {
- private Graphics screenG;
- private Image screenImage;
- private Image theImage;
- // $FF: renamed from: dx int[][]
- private int[][] field_0;
- // $FF: renamed from: dy int[][]
- private int[][] field_1;
- // $FF: renamed from: dw int[]
- private int[] field_2;
- // $FF: renamed from: cx int
- private int field_3;
- // $FF: renamed from: cy int
- private int field_4;
- // $FF: renamed from: w1 int
- private int field_5;
- // $FF: renamed from: h1 int
- private int field_6;
- // $FF: renamed from: w2 int
- private int field_7;
- // $FF: renamed from: h2 int
- private int field_8;
- // $FF: renamed from: mx int
- private int field_9;
- // $FF: renamed from: my int
- private int field_10;
- private int mxOrig;
- private int myOrig;
- private int moveX;
- private int moveY;
- private int renderRate;
- private int degrees;
- // $FF: renamed from: sw int
- private int field_11;
- // $FF: renamed from: sh int
- private int field_12;
- private int needDetail;
- private int timeSample;
- private int rotateAmount;
- private boolean interlace;
- private boolean jdk10;
- private boolean mouseMoving;
- private boolean autoRotate;
- private boolean autoRotateOn;
- private boolean imageLoading;
- private int hyperLink;
- private Color tipColour;
- private FontMetrics screenFM;
- private DataInputStream mapIn;
- private static final int HYPER_COUNT = 10;
- private Polygon[] hyperArea;
- private String[] tip;
- private String[] href;
- private int polyCount;
- private int[] pointx;
- private int[] pointy;
- private int coordNo;
- private Thread thrMain;
- private transient long totTime;
- private transient int totPass;
- private transient Graphics gMain;
- private int rotateSpeed;
- boolean alreadyPainting;
- // $FF: synthetic field
- static Class class$java$awt$Image;
- // $FF: synthetic field
- static Class class$java$awt$image$ImageObserver;
- // $FF: synthetic field
- static Class class$java$awt$Graphics;
-
- public Panorama() {
- this.imageLoading = false;
- this.hyperLink = -1;
- this.tipColour = new Color(255, 255, 225);
- this.hyperArea = new Polygon[10];
- this.tip = new String[10];
- this.href = new String[10];
- this.pointx = new int[255];
- this.pointy = new int[255];
- this.rotateSpeed = 3;
- this.alreadyPainting = false;
- this.field_0 = new int[600][600];
- this.field_1 = new int[600][600];
- this.field_2 = new int[600];
- if (!System.getProperty("java.version").substring(0, 3).equals("1.0")) {
- try {
- Class[] var1 = new Class[]{class$java$awt$Image != null ? class$java$awt$Image : (class$java$awt$Image = class$("java.awt.Image")), Integer.TYPE, Integer.TYPE, Integer.TYPE, Integer.TYPE, Integer.TYPE, Integer.TYPE, Integer.TYPE, Integer.TYPE, class$java$awt$image$ImageObserver != null ? class$java$awt$image$ImageObserver : (class$java$awt$image$ImageObserver = class$("java.awt.image.ImageObserver"))};
- this.jdk10 = false;
- (class$java$awt$Graphics != null ? class$java$awt$Graphics : (class$java$awt$Graphics = class$("java.awt.Graphics"))).getMethod("drawImage", var1);
- } catch (Exception var2) {
- this.jdk10 = true;
- }
- } else {
- this.jdk10 = true;
- }
- }
-
- public Panorama(Image var1) {
- this(360, var1);
- }
-
- public Panorama(int var1, Image var2) {
- this(360, var2, 300, 200);
- }
-
- public Panorama(int var1, Image var2, int var3, int var4) {
- this();
- this.degrees = var1;
- this.theImage = var2;
- this.field_11 = var3;
- this.field_12 = var4;
- ((Applet)this).resize(this.field_11, this.field_12);
- }
-
- public void start() {
- if (this.thrMain == null) {
- this.thrMain = new Thread(this);
- this.thrMain.start();
- }
-
- }
-
- public void stop() {
- if (this.thrMain != null) {
- this.thrMain.stop();
- this.thrMain = null;
- }
-
- }
-
- public void run() {
- this.gMain = ((Component)this).getGraphics();
-
- while(true) {
- if (this.autoRotateOn && !this.mouseMoving) {
- this.needDetail = this.renderRate;
- this.moveX = this.rotateSpeed;
- }
-
- if (!this.alreadyPainting) {
- ((Component)this).repaint();
- }
-
- try {
- Thread.sleep(50L);
- } catch (InterruptedException var1) {
- this.stop();
- }
- }
- }
-
- public Dimension preferredSize() {
- return new Dimension(300, 200);
- }
-
- public void setAutoRotate(int var1) {
- this.autoRotate = var1 != 0;
- this.autoRotateOn = this.autoRotate;
- this.rotateSpeed = var1;
- }
-
- public void init() {
- String var1 = ((Applet)this).getParameter("autorotate");
- if (var1 != null) {
- this.setAutoRotate(Integer.parseInt(var1));
- } else {
- this.setAutoRotate(0);
- }
-
- var1 = ((Applet)this).getParameter("degrees");
- if (var1 != null) {
- this.degrees = Integer.parseInt(var1);
- } else {
- this.degrees = 360;
- }
-
- this.theImage = ((Applet)this).getImage(((Applet)this).getDocumentBase(), ((Applet)this).getParameter("image"));
- this.field_11 = ((Component)this).size().width;
- this.field_12 = ((Component)this).size().height;
- this.mouseMoving = false;
- String var2 = ((Applet)this).getParameter("map");
- if (var2 != null) {
- this.openImageMap(var2);
- }
-
- }
-
- private synchronized void createScreenImage() {
- if (this.screenImage == null) {
- MediaTracker var1 = new MediaTracker(this);
- var1.addImage(this.theImage, 0);
-
- try {
- var1.waitForID(0);
- } catch (Exception var2) {
- }
-
- this.field_5 = this.field_11;
- this.field_7 = this.theImage.getWidth(this);
- this.field_6 = this.field_12;
- this.field_8 = this.theImage.getHeight(this);
- this.screenImage = ((Component)this).createImage(this.field_7 + this.field_11 + this.field_7 / 4, this.field_8);
- this.screenG = this.screenImage.getGraphics();
- this.screenG.drawImage(this.theImage, this.field_11, 0, this);
- this.screenG.drawImage(this.theImage, this.field_11 + this.field_7, 0, this);
- this.screenG.setFont(new Font("Helvetica", 0, 11));
- this.screenFM = this.screenG.getFontMetrics();
- this.initialise();
- }
- }
-
- private void initialise() {
- int var1 = (int)((double)this.field_7 / ((double)(this.degrees / 180) * 3.1415926));
- this.resetView();
- if (this.field_5 > this.field_0.length) {
- this.field_5 = this.field_0.length;
- }
-
- if (this.field_8 > this.field_1.length) {
- this.field_8 = this.field_1.length;
- }
-
- for(int var3 = 0; var3 < this.field_5; ++var3) {
- for(int var4 = 0; var4 < this.field_8; ++var4) {
- double var5 = (double)(var3 - this.field_5 / 2);
- double var7 = (double)(this.field_8 / 2 - var4);
- double var9 = (double)var1 * Math.atan(var5 / (double)var1);
- double var11 = var5 * var5;
- var11 += (double)(var1 * var1);
- var11 = Math.sqrt(var11);
- double var13 = var7 * (double)var1 / var11;
- this.field_0[var3][var4] = (int)var9;
- this.field_1[var3][var4] = (int)var13;
- }
- }
-
- int var2 = 0;
- int var15 = this.field_5;
-
- while(true) {
- --var15;
- if (var15 < 0) {
- this.renderRate = 1;
- this.interlace = true;
- this.needDetail = this.renderRate;
- return;
- }
-
- if (this.field_1[var15][0] == var2) {
- this.field_2[var15] = this.field_2[var15 + 1] + 1;
- } else {
- var2 = this.field_1[var15][0];
- this.field_2[var15] = 1;
- }
- }
- }
-
- public void update(Graphics var1) {
- this.paint(var1);
- }
-
- public void paint(Graphics var1) {
- if (!this.alreadyPainting) {
- this.alreadyPainting = true;
- if (this.screenImage == null) {
- var1.setFont(new Font("Helvetica", 20, 0));
- String var2 = "Panorama Loading...";
- FontMetrics var3 = var1.getFontMetrics();
- int var4 = var3.stringWidth(var2);
- int var5 = var3.getHeight();
- var1.setColor(Color.lightGray);
- var1.fillRect(0, 0, this.field_11, this.field_12);
- var1.setColor(Color.white);
- var1.drawString(var2, (this.field_11 - var4) / 2, (this.field_12 + var5) / 2);
- var1.setColor(Color.black);
- var1.drawString(var2, (this.field_11 - var4) / 2 + 2, (this.field_12 + var5) / 2 + 2);
- var1.setColor(Color.lightGray);
- var1.drawString(var2, (this.field_11 - var4) / 2 + 1, (this.field_12 + var5) / 2 + 1);
- if (!this.imageLoading) {
- this.imageLoading = true;
- this.createScreenImage();
- ((Component)this).repaint();
- }
- } else {
- if (this.jdk10) {
- this.oldPaint(var1);
- } else {
- this.renderImage(var1, 1, 0, this.interlace);
- }
-
- if (this.hyperLink != -1) {
- this.drawTip(this.tip[this.hyperLink]);
- }
-
- var1.drawImage(this.screenImage, 0, 0, this);
- }
-
- if (this.moveX != 0 && this.field_5 > 0) {
- this.moveHoriz(this.moveX * this.field_7 / (this.field_5 << 4));
- }
-
- if (this.moveY != 0 && this.field_5 > 0) {
- this.moveVert(this.moveY * this.field_7 / (this.field_5 << 4));
- }
-
- if (this.moveX != 0 || this.moveY != 0) {
- this.needDetail = this.renderRate;
- }
-
- this.alreadyPainting = false;
- }
- }
-
- public void oldPaint(Graphics var1) {
- long var2 = 0L;
- long var4 = 0L;
- long var6 = 10000L;
- var2 = System.currentTimeMillis();
- this.oldRenderImage(var1, this.renderRate, this.needDetail, this.interlace);
- var4 = System.currentTimeMillis();
- if (var6 > var4 - var2) {
- var6 = var4 - var2;
- }
-
- if (this.renderRate < 8 && var6 > 100L && var4 != var2) {
- ++this.renderRate;
- }
-
- this.rotateAmount = this.rotateSpeed * (int)var6 / 50;
- }
-
- private void oldRenderImage(Graphics var1, int var2, int var3, boolean var4) {
- int var6 = 1;
- int var5 = var3 * this.field_8 / (this.field_8 - this.field_6);
-
- for(int var7 = 0; var7 < this.field_5; var7 += var6) {
- if (this.field_2[var7] > var3) {
- var6 = this.field_2[var7];
- } else {
- var6 = var3;
- }
-
- for(int var8 = 0; var8 < this.field_6; var8 += var5) {
- int var9 = this.field_3 + this.field_0[var7][this.field_4 + var8];
- int var10 = this.field_8 / 2 - this.field_1[var7][this.field_4 + var8];
- if (var9 >= this.field_7) {
- var9 -= this.field_7;
- } else if (var9 < 0) {
- var9 += this.field_7;
- }
-
- if (var7 + var6 < this.field_11) {
- this.screenG.copyArea(var9 + this.field_11, var10, var6, var5, var7 - var9 - this.field_11, var8 - var10);
- } else {
- this.screenG.copyArea(var9 + this.field_11, var10, this.field_11 - var7, var5, var7 - var9 - this.field_11, var8 - var10);
- }
- }
- }
-
- }
-
- public void renderImage(Graphics var1, int var2, int var3, boolean var4) {
- boolean var6 = true;
- boolean var7 = true;
-
- for(int var5 = var3; var5 < this.field_5; var5 += this.field_2[var5]) {
- int var8 = this.field_3 + this.field_0[var5][this.field_4 + this.field_6];
- int var9 = this.field_8 / 2 - this.field_1[var5][this.field_4 + this.field_6];
- if (var8 >= this.field_7) {
- var8 -= this.field_7;
- } else if (var8 < 0) {
- var8 += this.field_7;
- }
-
- this.screenG.drawImage(this.screenImage, var5, 0, var5 + this.field_2[var5], this.field_12, var8 + this.field_11, this.field_8 / 2 - this.field_1[var5][this.field_4], var8 + this.field_2[var5] + this.field_11, var9, this);
- }
-
- }
-
- public boolean mouseDown(Event var1, int var2, int var3) {
- this.mouseMoving = true;
- this.mxOrig = this.field_9 = var2;
- this.myOrig = this.field_10 = var3;
- this.moveX = this.moveY = 0;
- this.checkCursor(var2, var3);
- return true;
- }
-
- public boolean mouseUp(Event var1, int var2, int var3) {
- if (this.mxOrig == var2 && this.myOrig == var3 && this.autoRotate) {
- this.autoRotateOn = !this.autoRotateOn;
- }
-
- this.mouseMoving = false;
- this.needDetail = 1;
- this.moveX = this.moveY = 0;
- this.checkCursor(var2, var3);
- if (this.mxOrig == var2 && this.myOrig == var3 && this.hyperLink != -1) {
- this.openDoc(this.href[this.hyperLink]);
- }
-
- return false;
- }
-
- private void openDoc(String var1) {
- try {
- URL var2 = new URL(((Applet)this).getDocumentBase(), var1);
- ((Applet)this).getAppletContext().showDocument(var2, "_self");
- } catch (MalformedURLException var3) {
- ((Applet)this).getAppletContext().showStatus("Bad URL: " + var1);
- }
- }
-
- public boolean mouseDrag(Event var1, int var2, int var3) {
- if (var2 != this.field_9) {
- this.moveX += var2 - this.field_9;
- }
-
- if (var3 != this.field_10) {
- this.moveY += var3 - this.field_10;
- }
-
- this.field_9 = var2;
- this.field_10 = var3;
- return true;
- }
-
- public boolean mouseMove(Event var1, int var2, int var3) {
- this.checkCursor(var2, var3);
- return true;
- }
-
- public void resetView() {
- this.field_3 = this.field_7 / 2;
- this.field_4 = this.field_8 / 2 - this.field_6 / 2;
- }
-
- private void moveVert(int var1) {
- if (this.field_4 + var1 >= 0 && this.field_4 + var1 < this.field_8 - this.field_6) {
- this.field_4 += var1;
- }
-
- }
-
- private void moveHoriz(int var1) {
- this.field_3 += var1;
- if (this.field_3 < 0) {
- this.field_3 += this.field_7;
- } else {
- if (this.field_3 >= this.field_7) {
- this.field_3 -= this.field_7;
- }
-
- }
- }
-
- public int getHorizontalPos() {
- return this.field_3;
- }
-
- private void openImageMap(String var1) {
- String var2 = "";
- String var3 = "";
- String var4 = "";
- boolean var5 = false;
-
- try {
- InputStream var8 = ((Applet)this).getDocumentBase().openStream();
- this.mapIn = new DataInputStream(new BufferedInputStream(var8));
-
- for(String var10 = this.mapIn.readLine(); var10 != null; var10 = this.mapIn.readLine()) {
- if (var10.toUpperCase().indexOf("<MAP") != -1) {
- if (var10.toUpperCase().indexOf("NAME=\"" + var1.toUpperCase() + "\"") != -1) {
- var3 = var10;
- var5 = true;
- }
- } else if (var5) {
- var3 = var3 + var10;
- }
-
- if (var10.indexOf("</MAP") != -1) {
- var5 = false;
- }
- }
- } catch (IOException var9) {
- System.out.println("IO Error: " + ((Throwable)var9).getMessage());
- }
-
- if (var3.length() > 0) {
- for(int var6 = var3.toUpperCase().indexOf("<AREA") + "<AREA".length(); var6 >= "<AREA".length(); var6 = var3.toUpperCase().indexOf("<AREA") + "<AREA".length()) {
- int var7 = var3.indexOf(">", var6);
- var4 = var3.substring(var6, var7);
- if (var7 > var6) {
- this.createArea(var4, this.polyCount++);
- }
-
- var3 = var3.substring(var6);
- }
- }
-
- }
-
- private void createArea(String var1, int var2) {
- Polygon var3 = null;
- String var4 = "";
- String var5 = "";
- String var6 = "";
- String var7 = "";
- if (var1.length() > 0) {
- var4 = this.getAttr(var1, "COORDS");
- var5 = this.getAttr(var1, "SHAPE").toUpperCase();
- var6 = this.getAttr(var1, "ALT");
- var7 = this.getAttr(var1, "HREF");
- if (var5.equals("RECT")) {
- var3 = this.aRect(var4);
- } else if (var5.equals("POLYGON")) {
- var3 = this.aPolygon(var4);
- } else if (var5.equals("CIRCLE")) {
- var3 = this.aCircle(var4);
- }
- }
-
- this.hyperArea[var2] = var3;
- this.tip[var2] = var6;
- this.href[var2] = var7;
- }
-
- private String getAttr(String var1, String var2) {
- int var4 = var1.toUpperCase().indexOf(var2.toUpperCase() + "=\"") + (var2 + "=\"").length();
- String var3 = "";
- if (var4 >= (var2 + "=\"").length()) {
- int var5 = var1.indexOf("\"", var4);
- var3 = var1.substring(var4, var5);
- }
-
- return var3;
- }
-
- private Polygon aRect(String var1) {
- int[] var2 = new int[4];
- int[] var3 = new int[4];
- this.getPoints(var1);
- var2[0] = this.pointx[0];
- var2[1] = this.pointx[1];
- var2[2] = var2[1];
- var2[3] = var2[0];
- var3[0] = this.pointy[0];
- var3[1] = this.pointy[0];
- var3[2] = this.pointy[1];
- var3[3] = var3[2];
- return new Polygon(var2, var3, 4);
- }
-
- private Polygon aCircle(String var1) {
- String var2 = var1 + ",0";
- int[] var6 = new int[8];
- int[] var7 = new int[8];
- this.getPoints(var2);
- int var3 = this.pointx[0];
- int var4 = this.pointy[0];
- int var5 = this.pointx[1];
-
- for(int var8 = 0; var8 < var6.length; ++var8) {
- var6[var8] = var3 + (int)((double)var5 * Math.cos(6.2831852 * (double)var8 / (double)var6.length));
- var7[var8] = var4 + (int)((double)var5 * Math.sin(6.2831852 * (double)var8 / (double)var6.length));
- }
-
- return new Polygon(var6, var7, var6.length);
- }
-
- private Polygon aPolygon(String var1) {
- this.getPoints(var1);
- return new Polygon(this.pointx, this.pointy, this.coordNo);
- }
-
- private void getPoints(String var1) {
- String var2 = var1 + ",";
- int var3 = var2.indexOf(44);
-
- for(this.coordNo = 0; var3 != -1; var3 = var2.indexOf(44)) {
- this.pointx[this.coordNo] = Integer.parseInt(var2.substring(0, var3));
- var2 = var2.substring(var3 + 1).trim();
- var3 = var2.indexOf(44);
- this.pointy[this.coordNo++] = Integer.parseInt(var2.substring(0, var3));
- var2 = var2.substring(var3 + 1).trim();
- }
-
- }
-
- private void checkCursor(int var1, int var2) {
- if (this.mouseMoving) {
- if (!this.jdk10) {
- ((Component)this).setCursor(Cursor.getPredefinedCursor(13));
- }
-
- this.hyperLink = -1;
- } else {
- int var3 = this.field_3 + this.field_0[var1][this.field_4 + var2];
- int var4 = this.field_8 / 2 - this.field_1[var1][this.field_4 + var2];
- if (var3 >= this.field_7) {
- var3 -= this.field_7;
- } else if (var3 < 0) {
- var3 += this.field_7;
- }
-
- Point var5 = new Point(var3, var4);
-
- for(int var6 = 0; var6 < this.polyCount; ++var6) {
- if (this.hyperArea[var6].inside(var5.x, var5.y)) {
- if (!this.jdk10) {
- ((Component)this).setCursor(Cursor.getPredefinedCursor(12));
- }
-
- this.hyperLink = var6;
- ((Component)this).repaint();
- return;
- }
- }
-
- if (!this.jdk10) {
- ((Component)this).setCursor(Cursor.getDefaultCursor());
- }
-
- if (this.hyperLink != -1) {
- ((Component)this).repaint();
- }
-
- this.hyperLink = -1;
- }
- }
-
- private void drawTip(String var1) {
- byte var13 = 1;
- int var14 = 2 * this.field_11 / 3;
- int var6 = this.screenFM.getAscent();
- int var7 = this.screenFM.getHeight() - this.screenFM.getAscent();
- int var5 = var6 + var7 + (var13 << 1);
- int var11 = 0;
- byte var9 = 0;
- int var12 = var7;
- int var10 = this.field_12 + 1;
- byte var2 = 20;
- int var3 = 20;
- String var17 = var1;
-
- String var20;
- for(var20 = ""; !var17.equals(""); var17 = var20) {
- int var8 = this.screenFM.stringWidth(var17);
- int var19 = var17.length();
- var20 = "";
- if (var8 > var14) {
- int var15 = var17.length() * var14 / var8;
- String var16 = var17.substring(0, var15);
- var19 = var16.lastIndexOf(32);
- var20 = var17.substring(var19 + 1, var17.length());
- var17 = var17.substring(0, var19 + 1);
- }
-
- int var4 = this.screenFM.stringWidth(var17) + (var7 << 1) + (var13 << 1);
- if (var4 > var11) {
- var11 = var4;
- }
-
- var12 = var12 + var7 + var6;
- var9 = var2;
- if (var3 < var10) {
- var10 = var3;
- }
-
- this.screenG.setColor(this.tipColour);
- this.screenG.fillRect(var2, var3, var11, var5);
- this.screenG.setColor(Color.black);
- this.screenG.drawString(var17, var2 + var7 + var13, var3 + var6 + var13);
- var3 = var3 + var7 + var6;
- }
-
- this.screenG.drawRect(var9, var10, var11, var12);
- }
-
- // $FF: synthetic method
- static Class class$(String var0) {
- try {
- return Class.forName(var0);
- } catch (ClassNotFoundException var2) {
- throw new NoClassDefFoundError(((Throwable)var2).getMessage());
- }
- }
- }
-