view src/main/java/jp/ac/u_ryukyu/treevnc/test/IsRetina.java @ 542:9ed3bfbf81de deployApp tip

make branch
author e165729 <e165729@ie.u-ryukyu.ac.jp>
date Sun, 13 Oct 2019 16:03:36 +0900
parents effba48b76f3
children
line wrap: on
line source

package jp.ac.u_ryukyu.treevnc.test;

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 int getRetinaScale(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;
    }

    public static ArrayList<Rectangle> getScreenRectangles() {
        // New screen server has one or more screens.
        // Screens are numbered in the order from left.
        // put screens in an ArrayList.
        ArrayList<Rectangle> rectangles = new ArrayList<Rectangle>();
        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[]) {
        getScreenRectangles();
    }
}