# HG changeset patch # User Tatsuki IHA # Date 1466590297 -32400 # Node ID 34277b436cacedfd7b7a7d311b162af3f210ce85 # Parent 6f3d3da4094054ced760a95e0f52b60d3b383738 Using retina scale to share screnn if minus postion diff -r 6f3d3da40940 -r 34277b436cac src/viewer_swing/java/com/glavsoft/viewer/CuiViewer.java --- a/src/viewer_swing/java/com/glavsoft/viewer/CuiViewer.java Wed Jun 22 12:29:57 2016 +0900 +++ b/src/viewer_swing/java/com/glavsoft/viewer/CuiViewer.java Wed Jun 22 19:11:37 2016 +0900 @@ -309,6 +309,11 @@ } @Override + public int retinaScale(int shareScreenNumber) { + return 1; + } + + @Override public void setFitScreen() { } } diff -r 6f3d3da40940 -r 34277b436cac src/viewer_swing/java/com/glavsoft/viewer/Viewer.java --- a/src/viewer_swing/java/com/glavsoft/viewer/Viewer.java Wed Jun 22 12:29:57 2016 +0900 +++ b/src/viewer_swing/java/com/glavsoft/viewer/Viewer.java Wed Jun 22 19:11:37 2016 +0900 @@ -40,6 +40,7 @@ import java.awt.event.WindowListener; import java.io.IOException; import java.io.InputStream; +import java.lang.reflect.Field; import java.net.Socket; import java.util.ArrayList; import java.util.jar.Attributes; @@ -487,9 +488,12 @@ GraphicsDevice[] gs = ge.getScreenDevices(); for (GraphicsDevice gd : gs) { + int screenNumber = 0; for (GraphicsConfiguration r : gd.getConfigurations()) { Rectangle rect = r.getBounds(); + //System.out.println("screen "+ screenNumber +":"+rect); rectangles.add(rect); + screenNumber++; } } return rectangles; @@ -500,13 +504,38 @@ // compute offset to make them positive int offsetx = 0; int offsety = 0; + int screenNumber = 0; for (Rectangle rect : rectangles) { - if (rect.x < offsetx) offsetx = rect.x; - if (rect.y < offsety) offsety = rect.y; + int scale = retinaScale(screenNumber); + int x = rect.x < 0 ? rect.x * scale : rect.x; + int y = rect.y < 0 ? rect.y * scale : rect.y; + if (x < offsetx) offsetx = x; + if (y < offsety) offsety = y; + screenNumber++; } return new Point(-offsetx,-offsety); } + public int retinaScale(int shareScreenNumber) { + int scale = 1; + GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); + final GraphicsDevice[] devices = env.getScreenDevices(); + + try { + Field field = devices[shareScreenNumber].getClass().getDeclaredField("scale"); + + if (field != null) { + field.setAccessible(true); + Object retinaScale = field.get(devices[shareScreenNumber]); + + if (retinaScale instanceof Integer) { + scale = (Integer) retinaScale; + return scale; + } + } + } catch (Exception ignore) {} + return scale; + } @Override public void setFitScreen() { diff -r 6f3d3da40940 -r 34277b436cac src/viewer_swing/java/com/glavsoft/viewer/ViewerInterface.java --- a/src/viewer_swing/java/com/glavsoft/viewer/ViewerInterface.java Wed Jun 22 12:29:57 2016 +0900 +++ b/src/viewer_swing/java/com/glavsoft/viewer/ViewerInterface.java Wed Jun 22 19:11:37 2016 +0900 @@ -53,6 +53,8 @@ public Point getScreenOffset(ArrayList rectangles); + public int retinaScale(int shareScreenNumber); + public ConnectionPresenter getConnectionPresenter(); public void setConnectionPresenter(ConnectionPresenter connectionPresenter); diff -r 6f3d3da40940 -r 34277b436cac src/viewer_swing/java/com/glavsoft/viewer/swing/SwingViewerWindow.java --- a/src/viewer_swing/java/com/glavsoft/viewer/swing/SwingViewerWindow.java Wed Jun 22 12:29:57 2016 +0900 +++ b/src/viewer_swing/java/com/glavsoft/viewer/swing/SwingViewerWindow.java Wed Jun 22 19:11:37 2016 +0900 @@ -923,7 +923,7 @@ int singleHeight = (int) (rectangle1.getHeight()); int x = (int) (rectangle1.getX()) + offset.x; // convert double to int int y = (int) (rectangle1.getY()) + offset.y; - int scale = retinaScale(shareScreenNumber); + int scale = viewer.retinaScale(shareScreenNumber); showScreenInfo("request screen change", 0, x, y, singleWidth, singleHeight, scale); if (viewer.getRfb().isTreeManager()) { changeVncServer(viewer, x, y, singleWidth * scale, singleHeight * scale, scale, viewer.getRfb().getId()); @@ -938,27 +938,6 @@ } } - private int retinaScale(int shareScreenNumber) { - int scale = 1; - GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); - final GraphicsDevice[] devices = env.getScreenDevices(); - - try { - Field field = devices[shareScreenNumber].getClass().getDeclaredField("scale"); - - if (field != null) { - field.setAccessible(true); - Object retinaScale = field.get(devices[shareScreenNumber]); - - if (retinaScale instanceof Integer) { - scale = (Integer) retinaScale; - return scale; - } - } - } catch (Exception ignore) {} - return scale; - } - private boolean scanPort(String adr, int port) { try { Socket socket = new Socket(adr, port); @@ -984,7 +963,7 @@ int thisScreenWidth = (int) rectangles.get(thisScreenNumber).getWidth(); int thisScreenHeight = (int) rectangles.get(thisScreenNumber).getHeight(); - int thisRetinaScale = retinaScale(thisScreenNumber); + int thisRetinaScale = viewer.retinaScale(thisScreenNumber); final int thatScreenX = presenter.getX(); final int thatScreenY = presenter.getY();