Mercurial > hg > Members > riono > TreeVNC_ja_comment
diff src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java @ 448:344a35b7c47f
send both frame buffer size and selected screen size in Disktop size change (INIT_DATA)
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 18 Jun 2016 20:09:46 +0900 |
parents | 3996fde6f8ed |
children | d5bcae14c2cd |
line wrap: on
line diff
--- a/src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java Fri Jun 17 17:06:22 2016 +0900 +++ b/src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java Sat Jun 18 20:09:46 2016 +0900 @@ -46,7 +46,6 @@ import java.io.UnsupportedEncodingException; import java.util.LinkedList; import java.util.Timer; -import java.util.TimerTask; import java.util.logging.Logger; @@ -88,30 +87,17 @@ decoders.setDecoderByType(EncodingType.ZLIB, decoder); decoders.setDecoderByType(EncodingType.ZRLE, decoder); decoders.setDecoderByType(EncodingType.ZRLEE, decoder); - + if(rfb.fixingSize) { + context.setFbWidth(rfb.fixingSizeWidth); + context.setFbHeight(rfb.fixingSizeHeight); + } if(!rfb.getCuiVersion()) { - if (rfb.filterSingleDisplay) { - renderer = repaintController.createRenderer(reader, context.getFbWidth(), context.getFbHeight(), context.getPixelFormat()); - fullscreenFbUpdateIncrementalRequest = new FramebufferUpdateRequestMessage(0, 0, rfb.getSingleWidth(), rfb.getSingleHeight(), false); - } else { - renderer = repaintController.createRenderer(reader, context.getFbWidth(), context.getFbHeight(), context.getPixelFormat()); - fullscreenFbUpdateIncrementalRequest = new FramebufferUpdateRequestMessage(rfb.getX(), rfb.getY(), rfb.frameSizeWidth * rfb.getRetinaScale(), rfb.frameSizeHeight * rfb.getRetinaScale(), false); - } + renderer = repaintController.createRenderer(reader, context.getFbWidth(), context.getFbHeight(), context.getPixelFormat()); + fullscreenFbUpdateIncrementalRequest = new FramebufferUpdateRequestMessage(rfb.getX(), rfb.getY(), rfb.frameSizeWidth, rfb.frameSizeHeight, false); } if(rfb.isTreeManager()) { fullscreenFbUpdateIncrementalRequest.sendFullScreenRequest(); connectionFinished(); - if(rfb.fixingSize) { - timer = new Timer("framebufferUpdate-request-timer", true); - timer.schedule(new TimerTask() { - @Override - public void run() { - context.setFbWidth(rfb.fixingSizeWidth); - context.setFbHeight(rfb.fixingSizeHeight); - context.sendMessage(new FramebufferUpdateRequestMessage(rfb.getX(), rfb.getY(), rfb.frameSizeWidth * rfb.getRetinaScale(), rfb.frameSizeHeight * rfb.getRetinaScale(), true)); - } - }, 0, 100); - } } } @@ -289,14 +275,16 @@ rfb.setCuiVersion(false); renderer = repaintController.createRenderer(reader, rect.width, rect.height, context.getPixelFormat()); if (rfb.hasViewer()){ - setScreenParameter(); + setScreenParameter(rect,rect.width,rect.height); } } else if (rect.getEncodingType() == EncodingType.INIT_DATA) { fullscreenFbUpdateIncrementalRequest = new FramebufferUpdateRequestMessage(rect.x, rect.y, rect.width, rect.height, false); rfb.setCuiVersion(false); // VNCServer is changed, initiarize new screen. - int length = reader.readInt32() - 2; + int length = reader.readInt32() - 6; short id = reader.readInt16(); + int singleWidth = reader.readUInt16(); + int singleHeight = reader.readUInt16(); byte[] initData = new byte[length]; reader.read(initData); String name = new String(initData, 24, length - 24, "UTF-8"); @@ -310,13 +298,13 @@ reader.reset(); // All children multicastqueue should be discarded here. // rfb.clearChildrenTransmission(); - rfb.readSendData(length + 20 + 2, reader, null, rect); // size of UpdateRectangleMessage with initData. + rfb.readSendData(length + 16 + 10, reader, null, rect); // size of UpdateRectangleMessage with initData. if (!(rfb.getCuiVersion())) { renderer = repaintController.createRenderer(reader, rect.width, rect.height, context.getPixelFormat()); } repaintController.setVisible(id != rfb.getId()); if (rfb.hasViewer()){ - setScreenParameter(); + setScreenParameter(rect,singleWidth,singleHeight); } } else if (rect.getEncodingType() == EncodingType.CHECK_DELAY) { int checkDelaySize = 24; @@ -358,13 +346,14 @@ } } - private void setScreenParameter() { + private void setScreenParameter(FramebufferUpdateRectangle rect,int singleWidth ,int singleHeight) { ViewerInterface v = rfb.getViewer(); + rfb.setSingleDisplaySize(singleWidth,singleHeight); ConnectionPresenter cp = v.getConnectionPresenter(); - cp.setX(rfb.getX()); - cp.setY(rfb.getY()); - cp.setFrameSizeWidth(rfb.frameSizeWidth); - cp.setFrameSizeHeight(rfb.frameSizeHeight); + cp.setX(rect.x); + cp.setY(rect.y); + cp.setFrameSizeWidth(rect.width); + cp.setFrameSizeHeight(rect.height); v.setFitScreen(); }