# HG changeset patch # User Tatsuki IHA # Date 1466592752 -32400 # Node ID effba48b76f3124dde452c647f573c0e3640fa04 # Parent 34277b436cacedfd7b7a7d311b162af3f210ce85 Fix position diff -r 34277b436cac -r effba48b76f3 src/main/java/jp/ac/u_ryukyu/treevnc/test/IsRetina.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/test/IsRetina.java Wed Jun 22 19:11:37 2016 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/test/IsRetina.java Wed Jun 22 19:52:32 2016 +0900 @@ -3,37 +3,55 @@ import java.awt.*; import java.awt.image.BufferedImage; import java.lang.reflect.Field; +import java.util.ArrayList; /** * Created by one on 15/08/18. */ public class IsRetina { - public static final int isRetina = getRetinaScale(); - private static int getRetinaScale() { -//other OS and JVM specific checks... + public static int getRetinaScale(int shareScreenNumber) { int scale = 1; GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); - final GraphicsDevice device = env.getDefaultScreenDevice(); + final GraphicsDevice[] devices = env.getScreenDevices(); try { - Field field = device.getClass().getDeclaredField("scale"); + Field field = devices[shareScreenNumber].getClass().getDeclaredField("scale"); if (field != null) { field.setAccessible(true); - Object retinaScale = field.get(device); + Object retinaScale = field.get(devices[shareScreenNumber]); if (retinaScale instanceof Integer) { - scale = ((Integer)retinaScale).intValue(); + scale = (Integer) retinaScale; return scale; } } } catch (Exception ignore) {} - //... return scale; } + public static ArrayList getScreenRectangles() { + // New screen server has one or more screens. + // Screens are numbered in the order from left. + // put screens in an ArrayList. + ArrayList rectangles = new ArrayList(); + GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); + GraphicsDevice[] gs = ge.getScreenDevices(); + int screenNumber = 0; + for (GraphicsDevice gd : gs) { + for (GraphicsConfiguration r : gd.getConfigurations()) { + System.out.println("Retina scale :" + getRetinaScale(screenNumber)); + Rectangle rect = r.getBounds(); + System.out.println("screen "+ screenNumber +":"+rect); + rectangles.add(rect); + } + screenNumber++; + } + return rectangles; + } + public static void main(String args[]) { - System.out.println(isRetina); + getScreenRectangles(); } } diff -r 34277b436cac -r effba48b76f3 src/viewer_swing/java/com/glavsoft/viewer/Viewer.java --- a/src/viewer_swing/java/com/glavsoft/viewer/Viewer.java Wed Jun 22 19:11:37 2016 +0900 +++ b/src/viewer_swing/java/com/glavsoft/viewer/Viewer.java Wed Jun 22 19:52:32 2016 +0900 @@ -507,8 +507,8 @@ int screenNumber = 0; for (Rectangle rect : rectangles) { int scale = retinaScale(screenNumber); - int x = rect.x < 0 ? rect.x * scale : rect.x; - int y = rect.y < 0 ? rect.y * scale : rect.y; + int x = rect.x == -rect.width ? rect.x * scale : rect.x; + int y = rect.y == -rect.height ? rect.y * scale : rect.y; if (x < offsetx) offsetx = x; if (y < offsety) offsety = y; screenNumber++;