diff src/main/java/jp/ac/u_ryukyu/treevnc/TreeRFBProto.java @ 410:da1d6d6b4981

Enable retina scale to fit screen
author innparusu
date Thu, 19 Nov 2015 15:19:29 +0900
parents cdab1354e227
children 4a925e55afd6
line wrap: on
line diff
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/TreeRFBProto.java	Thu Nov 19 14:43:30 2015 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/TreeRFBProto.java	Thu Nov 19 15:19:29 2015 +0900
@@ -79,6 +79,7 @@
 
     private byte[] originalInitData = null;
     private boolean childrenMulticast = true;
+    private int retinaScale;
 
     public TreeRFBProto(boolean isTreeManager, ViewerInterface viewer) {
         rThread = new RequestScreenThread(this);
@@ -216,8 +217,9 @@
                                     int frameSizeHeight = buf.getInt();
                                     int port = buf.getInt();
                                     int shareScreenNumber = buf.getInt();
+                                    int scale = buf.getInt();
                                     System.out.println("Root server change request :" + newHostName + " : " + port);
-                                    changeVNCServer(viewer, newHostName, port, frameSizeWidth, frameSizeHeight, shareScreenNumber, id, is, os);
+                                    changeVNCServer(viewer, newHostName, port, frameSizeWidth, frameSizeHeight, shareScreenNumber, scale, id, is, os);
                                 } else {
                                     continue;
                                 }
@@ -795,14 +797,15 @@
      * @param is
      * @param os
      */
-    public void changeVNCServer(ViewerInterface vncProxyService, String hostName, int port, int width, int height, int shareScreenNumber, short newVNCServerId, Reader is, Writer os)
+    public void changeVNCServer(ViewerInterface vncProxyService, String hostName, int port, int width, int height, int shareScreenNumber,  int scale, short newVNCServerId, Reader is, Writer os)
             throws IOException {
 
         this.frameSizeWidth = width;
         this.frameSizeHeight = height;
         this.shareScreenNumber = shareScreenNumber;
-        singleWidth = frameSizeWidth;
-        singleHeight = frameSizeHeight;
+        this.singleWidth = frameSizeWidth;
+        this.singleHeight = frameSizeHeight;
+        this.retinaScale = scale;
         if (newVNCServerId == -1) {
             // change to the tree vnc root on other network.
             vncProxyService.changeToDirectConnectedServer(hostName, is, os);
@@ -910,6 +913,12 @@
         return shareScreenNumber;
     }
 
+
+    public int getRetinaScale() {
+        return retinaScale;
+    }
+
+
     public boolean hasParent() {
         return id != -1;
     }
@@ -925,7 +934,8 @@
      */
     public void exchangeDirectConnectedServer(Reader previousReader, Writer previousWriter) {
         String adr = viewer.getRfb().getMyAddress();
-        ScreenChangeRequest scr = new ScreenChangeRequest(adr, ConnectionParams.DEFAULT_VNC_ROOT, (short) -1, singleWidth, singleHeight, shareScreenNumber);
+        int scale = viewer.getRfb().getRetinaScale();
+        ScreenChangeRequest scr = new ScreenChangeRequest(adr, ConnectionParams.DEFAULT_VNC_ROOT, (short) -1, singleWidth, singleHeight, shareScreenNumber, scale);
         try {
             scr.send(previousWriter);
         } catch (TransportException e) {