comparison src/main/java/jp/ac/u_ryukyu/treevnc/test/IsRetina.java @ 457:effba48b76f3

Fix position
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Wed, 22 Jun 2016 19:52:32 +0900
parents 0aab561a8cf4
children
comparison
equal deleted inserted replaced
456:34277b436cac 457:effba48b76f3
1 package jp.ac.u_ryukyu.treevnc.test; 1 package jp.ac.u_ryukyu.treevnc.test;
2 2
3 import java.awt.*; 3 import java.awt.*;
4 import java.awt.image.BufferedImage; 4 import java.awt.image.BufferedImage;
5 import java.lang.reflect.Field; 5 import java.lang.reflect.Field;
6 import java.util.ArrayList;
6 7
7 /** 8 /**
8 * Created by one on 15/08/18. 9 * Created by one on 15/08/18.
9 */ 10 */
10 public class IsRetina { 11 public class IsRetina {
11 public static final int isRetina = getRetinaScale();
12 12
13 private static int getRetinaScale() { 13 public static int getRetinaScale(int shareScreenNumber) {
14 //other OS and JVM specific checks...
15 int scale = 1; 14 int scale = 1;
16 GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); 15 GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
17 final GraphicsDevice device = env.getDefaultScreenDevice(); 16 final GraphicsDevice[] devices = env.getScreenDevices();
18 17
19 try { 18 try {
20 Field field = device.getClass().getDeclaredField("scale"); 19 Field field = devices[shareScreenNumber].getClass().getDeclaredField("scale");
21 20
22 if (field != null) { 21 if (field != null) {
23 field.setAccessible(true); 22 field.setAccessible(true);
24 Object retinaScale = field.get(device); 23 Object retinaScale = field.get(devices[shareScreenNumber]);
25 24
26 if (retinaScale instanceof Integer) { 25 if (retinaScale instanceof Integer) {
27 scale = ((Integer)retinaScale).intValue(); 26 scale = (Integer) retinaScale;
28 return scale; 27 return scale;
29 } 28 }
30 } 29 }
31 } catch (Exception ignore) {} 30 } catch (Exception ignore) {}
32 //...
33 return scale; 31 return scale;
34 } 32 }
35 33
34 public static ArrayList<Rectangle> getScreenRectangles() {
35 // New screen server has one or more screens.
36 // Screens are numbered in the order from left.
37 // put screens in an ArrayList.
38 ArrayList<Rectangle> rectangles = new ArrayList<Rectangle>();
39 GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
40 GraphicsDevice[] gs = ge.getScreenDevices();
41 int screenNumber = 0;
42 for (GraphicsDevice gd : gs) {
43 for (GraphicsConfiguration r : gd.getConfigurations()) {
44 System.out.println("Retina scale :" + getRetinaScale(screenNumber));
45 Rectangle rect = r.getBounds();
46 System.out.println("screen "+ screenNumber +":"+rect);
47 rectangles.add(rect);
48 }
49 screenNumber++;
50 }
51 return rectangles;
52 }
53
36 public static void main(String args[]) { 54 public static void main(String args[]) {
37 System.out.println(isRetina); 55 getScreenRectangles();
38 } 56 }
39 } 57 }