home *** CD-ROM | disk | FTP | other *** search
- import java.awt.Canvas;
- import java.awt.Color;
- import java.awt.Component;
- import java.awt.Dimension;
- import java.awt.Event;
- import java.awt.Graphics;
- import java.awt.Image;
- import java.awt.image.ColorModel;
- import java.awt.image.DirectColorModel;
- import java.io.IOException;
-
- class vncCanvas extends Canvas {
- // $FF: renamed from: v vncviewer
- vncviewer field_0;
- rfbProto rfb;
- // $FF: renamed from: cm java.awt.image.ColorModel
- ColorModel field_1;
- Color[] colors;
- Image rawPixelsImage;
- animatedMemoryImageSource amis;
- byte[] pixels;
- // $FF: renamed from: sg java.awt.Graphics
- Graphics field_2;
- Graphics sg2;
- Image paintImage;
- Graphics pig;
- Graphics pig2;
- boolean needToResetClip;
-
- vncCanvas(vncviewer var1) throws IOException {
- this.field_0 = var1;
- this.rfb = this.field_0.rfb;
- this.field_1 = new DirectColorModel(8, 7, 56, 192);
- this.rfb.writeSetPixelFormat(8, 8, false, true, 7, 7, 3, 0, 3, 6);
- this.colors = new Color[256];
-
- for(int var2 = 0; var2 < 256; ++var2) {
- this.colors[var2] = new Color(this.field_1.getRGB(var2));
- }
-
- this.pixels = new byte[this.rfb.framebufferWidth * this.rfb.framebufferHeight];
- this.amis = new animatedMemoryImageSource(this.rfb.framebufferWidth, this.rfb.framebufferHeight, this.field_1, this.pixels);
- this.rawPixelsImage = ((Component)this).createImage(this.amis);
- this.paintImage = this.field_0.createImage(this.rfb.framebufferWidth, this.rfb.framebufferHeight);
- this.pig = this.paintImage.getGraphics();
- }
-
- public Dimension preferredSize() {
- return new Dimension(this.rfb.framebufferWidth, this.rfb.framebufferHeight);
- }
-
- public Dimension minimumSize() {
- return new Dimension(this.rfb.framebufferWidth, this.rfb.framebufferHeight);
- }
-
- public void update(Graphics var1) {
- }
-
- public void paint(Graphics var1) {
- var1.drawImage(this.paintImage, 0, 0, this);
- }
-
- public void processNormalProtocol() throws IOException {
- this.rfb.writeFramebufferUpdateRequest(0, 0, this.rfb.framebufferWidth, this.rfb.framebufferHeight, false);
- this.field_2 = ((Component)this).getGraphics();
- this.needToResetClip = false;
-
- while(true) {
- int var1 = this.rfb.readServerMessageType();
- switch (var1) {
- case 0:
- this.rfb.readFramebufferUpdate();
- int var20 = 0;
-
- for(; var20 < this.rfb.updateNRects; ++var20) {
- this.rfb.readFramebufferUpdateRectHdr();
- if (this.needToResetClip && this.rfb.updateRectEncoding != 0) {
- try {
- this.field_2.setClip(0, 0, this.rfb.framebufferWidth, this.rfb.framebufferHeight);
- this.pig.setClip(0, 0, this.rfb.framebufferWidth, this.rfb.framebufferHeight);
- } catch (NoSuchMethodError var19) {
- }
-
- this.needToResetClip = false;
- }
-
- switch (this.rfb.updateRectEncoding) {
- case 0:
- this.drawRawRect(this.rfb.updateRectX, this.rfb.updateRectY, this.rfb.updateRectW, this.rfb.updateRectH);
- break;
- case 1:
- this.rfb.readCopyRect();
- this.pig.copyArea(this.rfb.copyRectSrcX, this.rfb.copyRectSrcY, this.rfb.updateRectW, this.rfb.updateRectH, this.rfb.updateRectX - this.rfb.copyRectSrcX, this.rfb.updateRectY - this.rfb.copyRectSrcY);
- if (this.field_0.options.copyRectFast) {
- this.field_2.copyArea(this.rfb.copyRectSrcX, this.rfb.copyRectSrcY, this.rfb.updateRectW, this.rfb.updateRectH, this.rfb.updateRectX - this.rfb.copyRectSrcX, this.rfb.updateRectY - this.rfb.copyRectSrcY);
- } else {
- this.field_2.drawImage(this.paintImage, 0, 0, this);
- }
- break;
- case 2:
- int var22 = this.rfb.is.readInt();
- int var24 = this.rfb.is.read();
- this.field_2.translate(this.rfb.updateRectX, this.rfb.updateRectY);
- this.field_2.setColor(this.colors[var24]);
- this.field_2.fillRect(0, 0, this.rfb.updateRectW, this.rfb.updateRectH);
- this.pig.translate(this.rfb.updateRectX, this.rfb.updateRectY);
- this.pig.setColor(this.colors[var24]);
- this.pig.fillRect(0, 0, this.rfb.updateRectW, this.rfb.updateRectH);
-
- for(int var40 = 0; var40 < var22; ++var40) {
- int var27 = this.rfb.is.read();
- int var30 = this.rfb.is.readUnsignedShort();
- int var33 = this.rfb.is.readUnsignedShort();
- int var36 = this.rfb.is.readUnsignedShort();
- int var38 = this.rfb.is.readUnsignedShort();
- this.field_2.setColor(this.colors[var27]);
- this.field_2.fillRect(var30, var33, var36, var38);
- this.pig.setColor(this.colors[var27]);
- this.pig.fillRect(var30, var33, var36, var38);
- }
-
- this.field_2.translate(-this.rfb.updateRectX, -this.rfb.updateRectY);
- this.pig.translate(-this.rfb.updateRectX, -this.rfb.updateRectY);
- break;
- case 3:
- default:
- throw new IOException("Unknown RFB rectangle encoding " + this.rfb.updateRectEncoding);
- case 4:
- int var21 = this.rfb.is.readInt();
- int var23 = this.rfb.is.read();
- this.field_2.translate(this.rfb.updateRectX, this.rfb.updateRectY);
- this.field_2.setColor(this.colors[var23]);
- this.field_2.fillRect(0, 0, this.rfb.updateRectW, this.rfb.updateRectH);
- this.pig.translate(this.rfb.updateRectX, this.rfb.updateRectY);
- this.pig.setColor(this.colors[var23]);
- this.pig.fillRect(0, 0, this.rfb.updateRectW, this.rfb.updateRectH);
-
- for(int var39 = 0; var39 < var21; ++var39) {
- int var26 = this.rfb.is.read();
- int var29 = this.rfb.is.read();
- int var32 = this.rfb.is.read();
- int var35 = this.rfb.is.read();
- int var37 = this.rfb.is.read();
- this.field_2.setColor(this.colors[var26]);
- this.field_2.fillRect(var29, var32, var35, var37);
- this.pig.setColor(this.colors[var26]);
- this.pig.fillRect(var29, var32, var35, var37);
- }
-
- this.field_2.translate(-this.rfb.updateRectX, -this.rfb.updateRectY);
- this.pig.translate(-this.rfb.updateRectX, -this.rfb.updateRectY);
- break;
- case 5:
- int var3 = 0;
- int var4 = 0;
-
- for(int var9 = this.rfb.updateRectY; var9 < this.rfb.updateRectY + this.rfb.updateRectH; var9 += 16) {
- for(int var10 = this.rfb.updateRectX; var10 < this.rfb.updateRectX + this.rfb.updateRectW; var10 += 16) {
- int var11 = 16;
- int var12 = 16;
- if (this.rfb.updateRectX + this.rfb.updateRectW - var10 < 16) {
- var11 = this.rfb.updateRectX + this.rfb.updateRectW - var10;
- }
-
- if (this.rfb.updateRectY + this.rfb.updateRectH - var9 < 16) {
- var12 = this.rfb.updateRectY + this.rfb.updateRectH - var9;
- }
-
- int var13 = this.rfb.is.read();
- if ((var13 & 1) != 0) {
- this.drawRawRect(var10, var9, var11, var12);
- } else {
- if (this.needToResetClip) {
- try {
- this.field_2.setClip(0, 0, this.rfb.framebufferWidth, this.rfb.framebufferHeight);
- this.pig.setClip(0, 0, this.rfb.framebufferWidth, this.rfb.framebufferHeight);
- } catch (NoSuchMethodError var18) {
- }
-
- this.needToResetClip = false;
- }
-
- if ((var13 & 2) != 0) {
- var3 = this.rfb.is.read();
- }
-
- this.field_2.setColor(this.colors[var3]);
- this.field_2.fillRect(var10, var9, var11, var12);
- this.pig.setColor(this.colors[var3]);
- this.pig.fillRect(var10, var9, var11, var12);
- if ((var13 & 4) != 0) {
- var4 = this.rfb.is.read();
- }
-
- if ((var13 & 8) != 0) {
- int var14 = this.rfb.is.read();
- this.field_2.translate(var10, var9);
- this.pig.translate(var10, var9);
- if ((var13 & 16) != 0) {
- for(int var15 = 0; var15 < var14; ++var15) {
- var4 = this.rfb.is.read();
- int var16 = this.rfb.is.read();
- int var17 = this.rfb.is.read();
- int var5 = var16 >> 4;
- int var6 = var16 & 15;
- int var7 = (var17 >> 4) + 1;
- int var8 = (var17 & 15) + 1;
- this.field_2.setColor(this.colors[var4]);
- this.field_2.fillRect(var5, var6, var7, var8);
- this.pig.setColor(this.colors[var4]);
- this.pig.fillRect(var5, var6, var7, var8);
- }
- } else {
- this.field_2.setColor(this.colors[var4]);
- this.pig.setColor(this.colors[var4]);
-
- for(int var41 = 0; var41 < var14; ++var41) {
- int var42 = this.rfb.is.read();
- int var43 = this.rfb.is.read();
- int var25 = var42 >> 4;
- int var28 = var42 & 15;
- int var31 = (var43 >> 4) + 1;
- int var34 = (var43 & 15) + 1;
- this.field_2.fillRect(var25, var28, var31, var34);
- this.pig.fillRect(var25, var28, var31, var34);
- }
- }
-
- this.field_2.translate(-var10, -var9);
- this.pig.translate(-var10, -var9);
- }
- }
- }
- }
- }
- }
-
- this.rfb.writeFramebufferUpdateRequest(0, 0, this.rfb.framebufferWidth, this.rfb.framebufferHeight, true);
- break;
- case 1:
- throw new IOException("Can't handle SetColourMapEntries message");
- case 2:
- System.out.print('\u0007');
- break;
- case 3:
- String var2 = this.rfb.readServerCutText();
- this.field_0.clipboard.setCutText(var2);
- break;
- default:
- throw new IOException("Unknown RFB message type " + var1);
- }
- }
- }
-
- void drawRawRect(int var1, int var2, int var3, int var4) throws IOException {
- if (this.field_0.options.drawEachPixelForRawRects) {
- for(int var9 = var2; var9 < var2 + var4; ++var9) {
- for(int var6 = var1; var6 < var1 + var3; ++var6) {
- int var7 = this.rfb.is.read();
- this.field_2.setColor(this.colors[var7]);
- this.field_2.fillRect(var6, var9, 1, 1);
- this.pig.setColor(this.colors[var7]);
- this.pig.fillRect(var6, var9, 1, 1);
- }
- }
-
- } else {
- for(int var5 = var2; var5 < var2 + var4; ++var5) {
- this.rfb.is.readFully(this.pixels, var5 * this.rfb.framebufferWidth + var1, var3);
- }
-
- this.amis.newPixels(var1, var2, var3, var4);
-
- try {
- this.field_2.setClip(var1, var2, var3, var4);
- this.pig.setClip(var1, var2, var3, var4);
- this.needToResetClip = true;
- } catch (NoSuchMethodError var8) {
- this.sg2 = this.field_2.create();
- this.field_2.clipRect(var1, var2, var3, var4);
- this.pig2 = this.pig.create();
- this.pig.clipRect(var1, var2, var3, var4);
- }
-
- this.field_2.drawImage(this.rawPixelsImage, 0, 0, this);
- this.pig.drawImage(this.rawPixelsImage, 0, 0, this);
- if (this.sg2 != null) {
- this.field_2.dispose();
- this.field_2 = this.sg2;
- this.sg2 = null;
- this.pig.dispose();
- this.pig = this.pig2;
- this.pig2 = null;
- }
-
- }
- }
-
- public boolean handleEvent(Event var1) {
- if (this.rfb != null && this.rfb.inNormalProtocol) {
- try {
- switch (var1.id) {
- case 401:
- case 402:
- case 403:
- case 404:
- this.rfb.writeKeyEvent(var1);
- break;
- case 501:
- case 502:
- case 503:
- case 506:
- if (this.field_0.gotFocus) {
- ((Component)this).requestFocus();
- }
-
- this.rfb.writePointerEvent(var1);
- }
- } catch (Exception var3) {
- ((Throwable)var3).printStackTrace();
- }
-
- return true;
- } else {
- return false;
- }
- }
- }
-