# HG changeset patch # User one # Date 1373360896 -32400 # Node ID 225e3873d75f4413c722ab1f7a034201c3d7595a # Parent b0c7fad4c695192a0983221fe2d25cdfc3f4feb5 Modified to be able to specify the region of the screen in the argument. diff -r b0c7fad4c695 -r 225e3873d75f dist/tightvnc-jviewer-2.5.0/tightvnc-jviewer.jar Binary file dist/tightvnc-jviewer-2.5.0/tightvnc-jviewer.jar has changed diff -r b0c7fad4c695 -r 225e3873d75f src/main/java/com/glavsoft/rfb/encoding/decoder/FramebufferUpdateRectangle.java --- a/src/main/java/com/glavsoft/rfb/encoding/decoder/FramebufferUpdateRectangle.java Tue Jun 18 19:15:21 2013 +0900 +++ b/src/main/java/com/glavsoft/rfb/encoding/decoder/FramebufferUpdateRectangle.java Tue Jul 09 18:08:16 2013 +0900 @@ -43,6 +43,7 @@ public int width; public int height; private EncodingType encodingType; + private boolean firstFlag=false; public FramebufferUpdateRectangle() { // nop @@ -56,8 +57,14 @@ public void fill(Reader reader) throws TransportException { x = reader.readUInt16(); y = reader.readUInt16(); - width = reader.readUInt16(); - height = reader.readUInt16(); + if(!firstFlag) { + width = reader.readUInt16()-2; + height = reader.readUInt16()-2; + firstFlag=true; + } else { + width = reader.readUInt16(); + height = reader.readUInt16(); + } int encoding = reader.readInt32(); encodingType = EncodingType.byId(encoding); } diff -r b0c7fad4c695 -r 225e3873d75f src/main/java/com/glavsoft/rfb/protocol/Protocol.java --- a/src/main/java/com/glavsoft/rfb/protocol/Protocol.java Tue Jun 18 19:15:21 2013 +0900 +++ b/src/main/java/com/glavsoft/rfb/protocol/Protocol.java Tue Jul 09 18:08:16 2013 +0900 @@ -67,6 +67,7 @@ private Thread senderThread; private Thread receiverThread; private byte[] initData; + private boolean isRetina = false; public Protocol(Reader reader, Writer writer, IPasswordRetriever passwordRetriever, ProtocolSettings settings) { @@ -78,7 +79,7 @@ decoders.instantiateDecodersWhenNeeded(settings.encodings); state = new HandshakeState(this); } - + @Override public void changeStateTo(ProtocolState state) { this.state = state; @@ -117,19 +118,17 @@ @Override public int getFbWidth() { - //return 1000; return fbWidth; } @Override public void setFbWidth(int fbWidth) { - // this.fbWidth = 1002; - this.fbWidth = fbWidth; + if(!isRetina) + this.fbWidth = fbWidth; } @Override public int getFbHeight() { - //return 500; return fbHeight; } @@ -145,8 +144,8 @@ @Override public void setFbHeight(int fbHeight) { - // this.fbHeight = 502; - this.fbHeight = fbHeight; + if(!isRetina) + this.fbHeight = fbHeight; } @Override @@ -265,8 +264,8 @@ @Override public void sendRefreshMessage() { - // sendMessage(new FramebufferUpdateRequestMessage(0, 0, fbWidth, fbHeight, false)); - sendMessage(new FramebufferUpdateRequestMessage(0, 0, 1000, 500, false)); +// sendMessage(new FramebufferUpdateRequestMessage(0, 0, fbWidth, fbHeight, false)); + sendMessage(new FramebufferUpdateRequestMessage(0, 0, 1006, 506, false)); logger.fine("sent: full FB Refresh"); } @@ -361,4 +360,9 @@ receiverThread.start(); } + public void setScreenSizeRetina(int fbWidth, int fbHeight) { + isRetina = true; + this.fbWidth = fbWidth; + this.fbHeight = fbHeight; + } } diff -r b0c7fad4c695 -r 225e3873d75f src/main/java/jp/ac/u_ryukyu/treevnc/server/VncProxyService.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/server/VncProxyService.java Tue Jun 18 19:15:21 2013 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/server/VncProxyService.java Tue Jul 09 18:08:16 2013 +0900 @@ -57,7 +57,8 @@ private VncProxyService prevVps; static VncProxyService currentVps; - + private int fbWidth = 0; + private int fbHeight = 0; // public AcceptClient acc; private void initProxy(Parser parser) { @@ -97,7 +98,7 @@ String[] mainArgs = argv; System.out.println(mainArgs.length); // input into arguments Decision - + Parser parser = new Parser(); ParametersHandler.completeParserOptions(parser); @@ -167,6 +168,8 @@ new PasswordChooser(passwordFromParams, connectionParams, containerFrame, this), settings); + if(fbWidth!=0) + workingProtocol.setScreenSizeRetina(fbWidth, fbHeight); workingProtocol.handshake(); rfb.setProtocolContext(workingProtocol); // input into change parents @@ -245,16 +248,22 @@ thread = new Thread(getCast); thread.start(); } + + public void proxyStart(String[] argv,int width,int height) { + fbWidth = width; + fbHeight = height; + proxyStart(argv); + } + public void proxyStart(String[] argv) { String[] mainArgs = argv; System.out.println(mainArgs.length); // input into arguments Decision - Parser parser = new Parser(); ParametersHandler.completeParserOptions(parser); - - parser.parse(argv); + if(fbWidth==0) + parser.parse(argv); if (parser.isSet(ParametersHandler.ARG_HELP)) { printUsage(parser.optionsUsage()); System.exit(0); diff -r b0c7fad4c695 -r 225e3873d75f src/viewer_swing/java/com/glavsoft/viewer/TreeViewer.java --- a/src/viewer_swing/java/com/glavsoft/viewer/TreeViewer.java Tue Jun 18 19:15:21 2013 +0900 +++ b/src/viewer_swing/java/com/glavsoft/viewer/TreeViewer.java Tue Jul 09 18:08:16 2013 +0900 @@ -6,6 +6,8 @@ public class TreeViewer { private boolean treeProxy; private boolean viewer; + private int width; + private int height; public static void main(String[] args) { new TreeViewer().vncStart(args); @@ -15,7 +17,7 @@ modeSelect(args); if (treeProxy) { VncProxyService vps = new VncProxyService(); - vps.proxyStart(args); + vps.proxyStart(args,width,height); } else if (viewer) { Viewer v = new Viewer(); v.startViewer(args); @@ -33,12 +35,38 @@ viewer = true; } else if ("-r".equals(args[i])) { treeProxy = true; + } else if ("-retina".equals(args[i])) { + treeProxy = true; + if(getParameter(args,i)) + i = i + 2; } else { System.out.println("(default) TreeVNCClient\n" - + "-p TreeVNCProxy\n" - + "-v VNCViewer\n" - + "-r TreeVNCProxy for RemoteHost. you should input parameter host and port"); + + "-p: TreeVNCProxy\n" + + "-v: VNCViewer\n" + + "-r: TreeVNCProxy for RemoteHost. you should input parameter host and port\n" + + "-retina whidth heght: TreeVNC proxy for retina.this mode can select screen range."); } } } + + private boolean getParameter(String[] args, int i) { + if(isInteger(args[++i])&&isInteger(args[++i])) { + width = Integer.parseInt(args[--i]); + height = Integer.parseInt(args[++i]); + return true; + } else { + width = 1920; + height = 1080; + return false; + } + } + + private boolean isInteger(String num) { + try { + int n = Integer.parseInt(num); + return true; + } catch (NumberFormatException e) { + return false; + } + } }