| --- vnc_javasrc.orig/VncCanvas.java 2004-10-10 02:15:54.000000000 -0400 |
| +++ vnc_javasrc/VncCanvas.java 2010-11-30 21:01:15.000000000 -0500 |
| @@ -28,13 +28,14 @@ |
| import java.lang.*; |
| import java.util.zip.*; |
| |
| +import java.util.Collections; |
| |
| // |
| // VncCanvas is a subclass of Canvas which draws a VNC desktop on it. |
| // |
| |
| class VncCanvas extends Canvas |
| - implements KeyListener, MouseListener, MouseMotionListener { |
| + implements KeyListener, MouseListener, MouseMotionListener, MouseWheelListener { |
| |
| VncViewer viewer; |
| RfbProto rfb; |
| @@ -81,6 +82,20 @@ |
| cm8 = new DirectColorModel(8, 7, (7 << 3), (3 << 6)); |
| cm24 = new DirectColorModel(24, 0xFF0000, 0x00FF00, 0x0000FF); |
| |
| + // kludge to not show any Java cursor in the canvas since we are |
| + // showing the soft cursor (should be a user setting...) |
| + Cursor dot = Toolkit.getDefaultToolkit().createCustomCursor( |
| + Toolkit.getDefaultToolkit().createImage(new byte[4]), new Point(0,0), |
| + "dot"); |
| + this.setCursor(dot); |
| + |
| + // while we are at it... get rid of the keyboard traversals that |
| + // make it so we can't type a Tab character: |
| + this.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, |
| + Collections.EMPTY_SET); |
| + this.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, |
| + Collections.EMPTY_SET); |
| + |
| colors = new Color[256]; |
| for (int i = 0; i < 256; i++) |
| colors[i] = new Color(cm8.getRGB(i)); |
| @@ -169,6 +184,7 @@ |
| inputEnabled = true; |
| addMouseListener(this); |
| addMouseMotionListener(this); |
| + addMouseWheelListener(this); |
| if (viewer.showControls) { |
| viewer.buttonPanel.enableRemoteAccessControls(true); |
| } |
| @@ -177,6 +193,7 @@ |
| inputEnabled = false; |
| removeMouseListener(this); |
| removeMouseMotionListener(this); |
| + removeMouseWheelListener(this); |
| if (viewer.showControls) { |
| viewer.buttonPanel.enableRemoteAccessControls(false); |
| } |
| @@ -1190,6 +1207,9 @@ |
| public void mouseDragged(MouseEvent evt) { |
| processLocalMouseEvent(evt, true); |
| } |
| + public void mouseWheelMoved(MouseWheelEvent evt) { |
| + processLocalMouseWheelEvent(evt); |
| + } |
| |
| public void processLocalKeyEvent(KeyEvent evt) { |
| if (viewer.rfb != null && rfb.inNormalProtocol) { |
| @@ -1221,6 +1241,19 @@ |
| evt.consume(); |
| } |
| |
| + public void processLocalMouseWheelEvent(MouseWheelEvent evt) { |
| + if (viewer.rfb != null && rfb.inNormalProtocol) { |
| + synchronized(rfb) { |
| + try { |
| + rfb.writeWheelEvent(evt); |
| + } catch (Exception e) { |
| + e.printStackTrace(); |
| + } |
| + rfb.notify(); |
| + } |
| + } |
| + } |
| + |
| public void processLocalMouseEvent(MouseEvent evt, boolean moved) { |
| if (viewer.rfb != null && rfb.inNormalProtocol) { |
| if (moved) { |
| @@ -1387,9 +1420,9 @@ |
| result = cm8.getRGB(pixBuf[i]); |
| } else { |
| result = 0xFF000000 | |
| - (pixBuf[i * 4 + 1] & 0xFF) << 16 | |
| - (pixBuf[i * 4 + 2] & 0xFF) << 8 | |
| - (pixBuf[i * 4 + 3] & 0xFF); |
| + (pixBuf[i * 4 + 2] & 0xFF) << 16 | |
| + (pixBuf[i * 4 + 1] & 0xFF) << 8 | |
| + (pixBuf[i * 4 + 0] & 0xFF); |
| } |
| } else { |
| result = 0; // Transparent pixel |
| @@ -1403,9 +1436,9 @@ |
| result = cm8.getRGB(pixBuf[i]); |
| } else { |
| result = 0xFF000000 | |
| - (pixBuf[i * 4 + 1] & 0xFF) << 16 | |
| - (pixBuf[i * 4 + 2] & 0xFF) << 8 | |
| - (pixBuf[i * 4 + 3] & 0xFF); |
| + (pixBuf[i * 4 + 2] & 0xFF) << 16 | |
| + (pixBuf[i * 4 + 1] & 0xFF) << 8 | |
| + (pixBuf[i * 4 + 0] & 0xFF); |
| } |
| } else { |
| result = 0; // Transparent pixel |