372
|
1 package jp.ac.u_ryukyu.treevnc.test;
|
|
2
|
|
3 import java.awt.*;
|
|
4 import java.awt.image.BufferedImage;
|
|
5 import java.lang.reflect.Field;
|
457
|
6 import java.util.ArrayList;
|
372
|
7
|
|
8 /**
|
|
9 * Created by one on 15/08/18.
|
|
10 */
|
|
11 public class IsRetina {
|
|
12
|
457
|
13 public static int getRetinaScale(int shareScreenNumber) {
|
409
|
14 int scale = 1;
|
373
|
15 GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
|
457
|
16 final GraphicsDevice[] devices = env.getScreenDevices();
|
372
|
17
|
373
|
18 try {
|
457
|
19 Field field = devices[shareScreenNumber].getClass().getDeclaredField("scale");
|
372
|
20
|
373
|
21 if (field != null) {
|
|
22 field.setAccessible(true);
|
457
|
23 Object retinaScale = field.get(devices[shareScreenNumber]);
|
372
|
24
|
409
|
25 if (retinaScale instanceof Integer) {
|
457
|
26 scale = (Integer) retinaScale;
|
409
|
27 return scale;
|
372
|
28 }
|
373
|
29 }
|
|
30 } catch (Exception ignore) {}
|
409
|
31 return scale;
|
372
|
32 }
|
|
33
|
457
|
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
|
372
|
54 public static void main(String args[]) {
|
457
|
55 getScreenRectangles();
|
372
|
56 }
|
|
57 }
|