home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1999 April / PCO0499.ISO / filesbbs / mac / vnc-mac.hqx / binary / Server / VNCServer.rsrc / JAVA_134_vncCanvas.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-01-25  |  6.1 KB  |  329 lines

  1. import java.awt.Canvas;
  2. import java.awt.Color;
  3. import java.awt.Component;
  4. import java.awt.Dimension;
  5. import java.awt.Event;
  6. import java.awt.Graphics;
  7. import java.awt.Image;
  8. import java.awt.image.ColorModel;
  9. import java.awt.image.DirectColorModel;
  10. import java.io.IOException;
  11.  
  12. class vncCanvas extends Canvas {
  13.    // $FF: renamed from: v vncviewer
  14.    vncviewer field_0;
  15.    rfbProto rfb;
  16.    // $FF: renamed from: cm java.awt.image.ColorModel
  17.    ColorModel field_1;
  18.    Color[] colors;
  19.    Image rawPixelsImage;
  20.    animatedMemoryImageSource amis;
  21.    byte[] pixels;
  22.    // $FF: renamed from: sg java.awt.Graphics
  23.    Graphics field_2;
  24.    Graphics sg2;
  25.    Image paintImage;
  26.    Graphics pig;
  27.    Graphics pig2;
  28.    boolean needToResetClip;
  29.  
  30.    vncCanvas(vncviewer var1) throws IOException {
  31.       this.field_0 = var1;
  32.       this.rfb = this.field_0.rfb;
  33.       this.field_1 = new DirectColorModel(8, 7, 56, 192);
  34.       this.rfb.writeSetPixelFormat(8, 8, false, true, 7, 7, 3, 0, 3, 6);
  35.       this.colors = new Color[256];
  36.  
  37.       for(int var2 = 0; var2 < 256; ++var2) {
  38.          this.colors[var2] = new Color(this.field_1.getRGB(var2));
  39.       }
  40.  
  41.       this.pixels = new byte[this.rfb.framebufferWidth * this.rfb.framebufferHeight];
  42.       this.amis = new animatedMemoryImageSource(this.rfb.framebufferWidth, this.rfb.framebufferHeight, this.field_1, this.pixels);
  43.       this.rawPixelsImage = ((Component)this).createImage(this.amis);
  44.       this.paintImage = this.field_0.createImage(this.rfb.framebufferWidth, this.rfb.framebufferHeight);
  45.       this.pig = this.paintImage.getGraphics();
  46.    }
  47.  
  48.    public Dimension preferredSize() {
  49.       return new Dimension(this.rfb.framebufferWidth, this.rfb.framebufferHeight);
  50.    }
  51.  
  52.    public Dimension minimumSize() {
  53.       return new Dimension(this.rfb.framebufferWidth, this.rfb.framebufferHeight);
  54.    }
  55.  
  56.    public void update(Graphics var1) {
  57.    }
  58.  
  59.    public void paint(Graphics var1) {
  60.       var1.drawImage(this.paintImage, 0, 0, this);
  61.    }
  62.  
  63.    public void processNormalProtocol() throws IOException {
  64.       this.rfb.writeFramebufferUpdateRequest(0, 0, this.rfb.framebufferWidth, this.rfb.framebufferHeight, false);
  65.       this.field_2 = ((Component)this).getGraphics();
  66.       this.needToResetClip = false;
  67.  
  68.       while(true) {
  69.          int var1 = this.rfb.readServerMessageType();
  70.          switch (var1) {
  71.             case 0:
  72.                this.rfb.readFramebufferUpdate();
  73.                int var20 = 0;
  74.  
  75.                for(; var20 < this.rfb.updateNRects; ++var20) {
  76.                   this.rfb.readFramebufferUpdateRectHdr();
  77.                   if (this.needToResetClip && this.rfb.updateRectEncoding != 0) {
  78.                      try {
  79.                         this.field_2.setClip(0, 0, this.rfb.framebufferWidth, this.rfb.framebufferHeight);
  80.                         this.pig.setClip(0, 0, this.rfb.framebufferWidth, this.rfb.framebufferHeight);
  81.                      } catch (NoSuchMethodError var19) {
  82.                      }
  83.  
  84.                      this.needToResetClip = false;
  85.                   }
  86.  
  87.                   switch (this.rfb.updateRectEncoding) {
  88.                      case 0:
  89.                         this.drawRawRect(this.rfb.updateRectX, this.rfb.updateRectY, this.rfb.updateRectW, this.rfb.updateRectH);
  90.                         break;
  91.                      case 1:
  92.                         this.rfb.readCopyRect();
  93.                         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);
  94.                         if (this.field_0.options.copyRectFast) {
  95.                            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);
  96.                         } else {
  97.                            this.field_2.drawImage(this.paintImage, 0, 0, this);
  98.                         }
  99.                         break;
  100.                      case 2:
  101.                         int var22 = this.rfb.is.readInt();
  102.                         int var24 = this.rfb.is.read();
  103.                         this.field_2.translate(this.rfb.updateRectX, this.rfb.updateRectY);
  104.                         this.field_2.setColor(this.colors[var24]);
  105.                         this.field_2.fillRect(0, 0, this.rfb.updateRectW, this.rfb.updateRectH);
  106.                         this.pig.translate(this.rfb.updateRectX, this.rfb.updateRectY);
  107.                         this.pig.setColor(this.colors[var24]);
  108.                         this.pig.fillRect(0, 0, this.rfb.updateRectW, this.rfb.updateRectH);
  109.  
  110.                         for(int var40 = 0; var40 < var22; ++var40) {
  111.                            int var27 = this.rfb.is.read();
  112.                            int var30 = this.rfb.is.readUnsignedShort();
  113.                            int var33 = this.rfb.is.readUnsignedShort();
  114.                            int var36 = this.rfb.is.readUnsignedShort();
  115.                            int var38 = this.rfb.is.readUnsignedShort();
  116.                            this.field_2.setColor(this.colors[var27]);
  117.                            this.field_2.fillRect(var30, var33, var36, var38);
  118.                            this.pig.setColor(this.colors[var27]);
  119.                            this.pig.fillRect(var30, var33, var36, var38);
  120.                         }
  121.  
  122.                         this.field_2.translate(-this.rfb.updateRectX, -this.rfb.updateRectY);
  123.                         this.pig.translate(-this.rfb.updateRectX, -this.rfb.updateRectY);
  124.                         break;
  125.                      case 3:
  126.                      default:
  127.                         throw new IOException("Unknown RFB rectangle encoding " + this.rfb.updateRectEncoding);
  128.                      case 4:
  129.                         int var21 = this.rfb.is.readInt();
  130.                         int var23 = this.rfb.is.read();
  131.                         this.field_2.translate(this.rfb.updateRectX, this.rfb.updateRectY);
  132.                         this.field_2.setColor(this.colors[var23]);
  133.                         this.field_2.fillRect(0, 0, this.rfb.updateRectW, this.rfb.updateRectH);
  134.                         this.pig.translate(this.rfb.updateRectX, this.rfb.updateRectY);
  135.                         this.pig.setColor(this.colors[var23]);
  136.                         this.pig.fillRect(0, 0, this.rfb.updateRectW, this.rfb.updateRectH);
  137.  
  138.                         for(int var39 = 0; var39 < var21; ++var39) {
  139.                            int var26 = this.rfb.is.read();
  140.                            int var29 = this.rfb.is.read();
  141.                            int var32 = this.rfb.is.read();
  142.                            int var35 = this.rfb.is.read();
  143.                            int var37 = this.rfb.is.read();
  144.                            this.field_2.setColor(this.colors[var26]);
  145.                            this.field_2.fillRect(var29, var32, var35, var37);
  146.                            this.pig.setColor(this.colors[var26]);
  147.                            this.pig.fillRect(var29, var32, var35, var37);
  148.                         }
  149.  
  150.                         this.field_2.translate(-this.rfb.updateRectX, -this.rfb.updateRectY);
  151.                         this.pig.translate(-this.rfb.updateRectX, -this.rfb.updateRectY);
  152.                         break;
  153.                      case 5:
  154.                         int var3 = 0;
  155.                         int var4 = 0;
  156.  
  157.                         for(int var9 = this.rfb.updateRectY; var9 < this.rfb.updateRectY + this.rfb.updateRectH; var9 += 16) {
  158.                            for(int var10 = this.rfb.updateRectX; var10 < this.rfb.updateRectX + this.rfb.updateRectW; var10 += 16) {
  159.                               int var11 = 16;
  160.                               int var12 = 16;
  161.                               if (this.rfb.updateRectX + this.rfb.updateRectW - var10 < 16) {
  162.                                  var11 = this.rfb.updateRectX + this.rfb.updateRectW - var10;
  163.                               }
  164.  
  165.                               if (this.rfb.updateRectY + this.rfb.updateRectH - var9 < 16) {
  166.                                  var12 = this.rfb.updateRectY + this.rfb.updateRectH - var9;
  167.                               }
  168.  
  169.                               int var13 = this.rfb.is.read();
  170.                               if ((var13 & 1) != 0) {
  171.                                  this.drawRawRect(var10, var9, var11, var12);
  172.                               } else {
  173.                                  if (this.needToResetClip) {
  174.                                     try {
  175.                                        this.field_2.setClip(0, 0, this.rfb.framebufferWidth, this.rfb.framebufferHeight);
  176.                                        this.pig.setClip(0, 0, this.rfb.framebufferWidth, this.rfb.framebufferHeight);
  177.                                     } catch (NoSuchMethodError var18) {
  178.                                     }
  179.  
  180.                                     this.needToResetClip = false;
  181.                                  }
  182.  
  183.                                  if ((var13 & 2) != 0) {
  184.                                     var3 = this.rfb.is.read();
  185.                                  }
  186.  
  187.                                  this.field_2.setColor(this.colors[var3]);
  188.                                  this.field_2.fillRect(var10, var9, var11, var12);
  189.                                  this.pig.setColor(this.colors[var3]);
  190.                                  this.pig.fillRect(var10, var9, var11, var12);
  191.                                  if ((var13 & 4) != 0) {
  192.                                     var4 = this.rfb.is.read();
  193.                                  }
  194.  
  195.                                  if ((var13 & 8) != 0) {
  196.                                     int var14 = this.rfb.is.read();
  197.                                     this.field_2.translate(var10, var9);
  198.                                     this.pig.translate(var10, var9);
  199.                                     if ((var13 & 16) != 0) {
  200.                                        for(int var15 = 0; var15 < var14; ++var15) {
  201.                                           var4 = this.rfb.is.read();
  202.                                           int var16 = this.rfb.is.read();
  203.                                           int var17 = this.rfb.is.read();
  204.                                           int var5 = var16 >> 4;
  205.                                           int var6 = var16 & 15;
  206.                                           int var7 = (var17 >> 4) + 1;
  207.                                           int var8 = (var17 & 15) + 1;
  208.                                           this.field_2.setColor(this.colors[var4]);
  209.                                           this.field_2.fillRect(var5, var6, var7, var8);
  210.                                           this.pig.setColor(this.colors[var4]);
  211.                                           this.pig.fillRect(var5, var6, var7, var8);
  212.                                        }
  213.                                     } else {
  214.                                        this.field_2.setColor(this.colors[var4]);
  215.                                        this.pig.setColor(this.colors[var4]);
  216.  
  217.                                        for(int var41 = 0; var41 < var14; ++var41) {
  218.                                           int var42 = this.rfb.is.read();
  219.                                           int var43 = this.rfb.is.read();
  220.                                           int var25 = var42 >> 4;
  221.                                           int var28 = var42 & 15;
  222.                                           int var31 = (var43 >> 4) + 1;
  223.                                           int var34 = (var43 & 15) + 1;
  224.                                           this.field_2.fillRect(var25, var28, var31, var34);
  225.                                           this.pig.fillRect(var25, var28, var31, var34);
  226.                                        }
  227.                                     }
  228.  
  229.                                     this.field_2.translate(-var10, -var9);
  230.                                     this.pig.translate(-var10, -var9);
  231.                                  }
  232.                               }
  233.                            }
  234.                         }
  235.                   }
  236.                }
  237.  
  238.                this.rfb.writeFramebufferUpdateRequest(0, 0, this.rfb.framebufferWidth, this.rfb.framebufferHeight, true);
  239.                break;
  240.             case 1:
  241.                throw new IOException("Can't handle SetColourMapEntries message");
  242.             case 2:
  243.                System.out.print('\u0007');
  244.                break;
  245.             case 3:
  246.                String var2 = this.rfb.readServerCutText();
  247.                this.field_0.clipboard.setCutText(var2);
  248.                break;
  249.             default:
  250.                throw new IOException("Unknown RFB message type " + var1);
  251.          }
  252.       }
  253.    }
  254.  
  255.    void drawRawRect(int var1, int var2, int var3, int var4) throws IOException {
  256.       if (this.field_0.options.drawEachPixelForRawRects) {
  257.          for(int var9 = var2; var9 < var2 + var4; ++var9) {
  258.             for(int var6 = var1; var6 < var1 + var3; ++var6) {
  259.                int var7 = this.rfb.is.read();
  260.                this.field_2.setColor(this.colors[var7]);
  261.                this.field_2.fillRect(var6, var9, 1, 1);
  262.                this.pig.setColor(this.colors[var7]);
  263.                this.pig.fillRect(var6, var9, 1, 1);
  264.             }
  265.          }
  266.  
  267.       } else {
  268.          for(int var5 = var2; var5 < var2 + var4; ++var5) {
  269.             this.rfb.is.readFully(this.pixels, var5 * this.rfb.framebufferWidth + var1, var3);
  270.          }
  271.  
  272.          this.amis.newPixels(var1, var2, var3, var4);
  273.  
  274.          try {
  275.             this.field_2.setClip(var1, var2, var3, var4);
  276.             this.pig.setClip(var1, var2, var3, var4);
  277.             this.needToResetClip = true;
  278.          } catch (NoSuchMethodError var8) {
  279.             this.sg2 = this.field_2.create();
  280.             this.field_2.clipRect(var1, var2, var3, var4);
  281.             this.pig2 = this.pig.create();
  282.             this.pig.clipRect(var1, var2, var3, var4);
  283.          }
  284.  
  285.          this.field_2.drawImage(this.rawPixelsImage, 0, 0, this);
  286.          this.pig.drawImage(this.rawPixelsImage, 0, 0, this);
  287.          if (this.sg2 != null) {
  288.             this.field_2.dispose();
  289.             this.field_2 = this.sg2;
  290.             this.sg2 = null;
  291.             this.pig.dispose();
  292.             this.pig = this.pig2;
  293.             this.pig2 = null;
  294.          }
  295.  
  296.       }
  297.    }
  298.  
  299.    public boolean handleEvent(Event var1) {
  300.       if (this.rfb != null && this.rfb.inNormalProtocol) {
  301.          try {
  302.             switch (var1.id) {
  303.                case 401:
  304.                case 402:
  305.                case 403:
  306.                case 404:
  307.                   this.rfb.writeKeyEvent(var1);
  308.                   break;
  309.                case 501:
  310.                case 502:
  311.                case 503:
  312.                case 506:
  313.                   if (this.field_0.gotFocus) {
  314.                      ((Component)this).requestFocus();
  315.                   }
  316.  
  317.                   this.rfb.writePointerEvent(var1);
  318.             }
  319.          } catch (Exception var3) {
  320.             ((Throwable)var3).printStackTrace();
  321.          }
  322.  
  323.          return true;
  324.       } else {
  325.          return false;
  326.       }
  327.    }
  328. }
  329.