1 package charactermanaj.ui.util;
3 import java.awt.Component;
4 import java.awt.Dimension;
5 import java.awt.GraphicsConfiguration;
6 import java.awt.GraphicsDevice;
7 import java.awt.GraphicsEnvironment;
8 import java.awt.Toolkit;
9 import java.awt.geom.AffineTransform;
14 * Java8であれば自動スケールがかかっていないので、マニュアルでスケール倍して座標を補正する。
15 * Java11であれば自動スケールがかかっている。
17 public class ScaleSupport {
19 private static final float scale;
21 private double scaleX;
23 private double scaleY;
25 private double manualScaleX;
27 private double manualScaleY;
30 Toolkit tk = Toolkit.getDefaultToolkit();
31 int resolution = tk.getScreenResolution();
33 float dpi = System.getProperty("os.name").startsWith("Windows") ? 96f : 72f;
34 scale = resolution / dpi;
37 private ScaleSupport(double scaleX, double scaleY) {
40 manualScaleX = scale / scaleX;
41 manualScaleY = scale / scaleX;
45 * コンポーネントのグラフィクス設定からスケールを取得する。
46 * まだ画面に関連付けられていない場合はnullを返す。
50 public static ScaleSupport getInstance(Component comp) {
51 GraphicsConfiguration gconf = comp.getGraphicsConfiguration();
55 return getInstance(gconf);
58 public static ScaleSupport getDefault() {
59 GraphicsEnvironment genv = GraphicsEnvironment.getLocalGraphicsEnvironment();
60 GraphicsDevice gdev = genv.getDefaultScreenDevice();
61 return getInstance(gdev.getDefaultConfiguration());
64 public static ScaleSupport getInstance(GraphicsConfiguration gconf) {
65 AffineTransform trans = gconf.getDefaultTransform();
66 double scaleX = trans.getScaleX();
67 double scaleY = trans.getScaleY();
68 return new ScaleSupport(scaleX, scaleY);
71 public double getDefaultScaleX() {
75 public double getDefaultScaleY() {
79 public double getManualScaleX() {
83 public double getManualScaleY() {
87 public Dimension manualScaled(Dimension dim) {
88 return new Dimension((int) (dim.getWidth() * manualScaleX), (int) (dim.getHeight() * manualScaleY));