OSDN Git Service

アイコンボタンまわりのHiDPI対応
authorseraphy <seraphy@users.osdn.me>
Sun, 13 Jan 2019 03:51:25 +0000 (12:51 +0900)
committerseraphy <seraphy@users.osdn.me>
Sun, 13 Jan 2019 03:51:25 +0000 (12:51 +0900)
src/main/java/charactermanaj/ui/ColorDialog.java
src/main/java/charactermanaj/ui/ImageSelectPanel.java
src/main/java/charactermanaj/ui/MainFrame.java
src/main/java/charactermanaj/ui/PreviewPanel.java
src/main/java/charactermanaj/util/UIHelper.java

index f68b53e..524c14b 100644 (file)
@@ -78,6 +78,7 @@ import charactermanaj.model.PartsCategory;
 import charactermanaj.model.PartsIdentifier;
 import charactermanaj.ui.model.ColorChangeEvent;
 import charactermanaj.ui.model.ColorChangeListener;
+import charactermanaj.ui.util.ScaleSupport;
 import charactermanaj.ui.util.SpinnerWheelSupportListener;
 import charactermanaj.util.ErrorMessageHelper;
 import charactermanaj.util.LocalizedResourcePropertyLoader;
@@ -172,6 +173,8 @@ public class ColorDialog extends JDialog {
                captionBase = caption + name;
                setTitle(captionBase);
 
+               ScaleSupport scaleSupport = ScaleSupport.getInstance(this);
+
                // ダイアログを非表示にする.
                final AbstractAction actHide = new AbstractAction() {
                        private static final long serialVersionUID = 1L;
index 514ce96..5b1cc70 100644 (file)
@@ -461,10 +461,9 @@ public class ImageSelectPanel extends JPanel {
                btnPanelGrp.add(toolBar, BorderLayout.NORTH);
 
                if (partsCategory.isMultipleSelectable()) {
-                       UIHelper uiUty = UIHelper.getInstance();
-                       JButton upBtn = uiUty.createTransparentButton("icons/arrow_up.png", "icons/arrow_up2.png");
-                       JButton downBtn = uiUty.createTransparentButton("icons/arrow_down.png", "icons/arrow_down2.png");
-                       JButton sortBtn = uiUty.createTransparentButton("icons/sort.png", "icons/sort2.png");
+                       JButton upBtn = uiUtl.createTransparentButton("icons/arrow_up.png", "icons/arrow_up2.png");
+                       JButton downBtn = uiUtl.createTransparentButton("icons/arrow_down.png", "icons/arrow_down2.png");
+                       JButton sortBtn = uiUtl.createTransparentButton("icons/sort.png", "icons/sort2.png");
 
                        upBtn.setToolTipText(strings.getProperty("tooltip.up"));
                        downBtn.setToolTipText(strings.getProperty("tooltip.down"));
index 7cb5cd2..87dcf17 100644 (file)
@@ -422,8 +422,14 @@ public class MainFrame extends JFrame
                                }
                        });
 
+                       // アイコンスケールの設定
+                       ScaleSupport scaleSupport = ScaleSupport.getInstance(this);
+                       UIHelper uiUtl = UIHelper.getInstance();
+                       uiUtl.setScaleX(scaleSupport.getManualScaleX());
+                       uiUtl.setScaleY(scaleSupport.getManualScaleY());
+
                        // アイコンの設定
-                       icon = UIHelper.getInstance().getImage("icons/icon.png");
+                       icon = uiUtl.getImage("icons/icon.png");
                        setIconImage(icon);
 
                        // 画面コンポーネント作成
@@ -695,7 +701,9 @@ public class MainFrame extends JFrame
                PartsImageDirectoryWatchAgentFactory agentFactory = PartsImageDirectoryWatchAgentFactory.getFactory();
                watchAgent = agentFactory.getAgent(characterData);
 
-               previewPane = new PreviewPanel();
+               ScaleSupport scaleSupport = ScaleSupport.getInstance(this);
+
+               previewPane = new PreviewPanel(scaleSupport);
                previewPane.setTitle(defaultPartsSetTitle);
                previewPane.addPreviewPanelListener(new PreviewPanelListener() {
                        public void addFavorite(PreviewPanelEvent e) {
@@ -741,8 +749,6 @@ public class MainFrame extends JFrame
 
                imageSelectPanels = new ImageSelectPanelList();
 
-               ScaleSupport scaleSupport = ScaleSupport.getInstance(this);
-
                JPanel imgSelectPanelsPanel = new JPanel();
                BoxLayout bl = new BoxLayout(imgSelectPanelsPanel, BoxLayout.PAGE_AXIS);
                imgSelectPanelsPanel.setLayout(bl);
index ceaa51c..2b0f71b 100644 (file)
@@ -69,6 +69,7 @@ import charactermanaj.Main;
 import charactermanaj.graphics.filters.BackgroundColorFilter;
 import charactermanaj.graphics.filters.BackgroundColorFilter.BackgroundColorMode;
 import charactermanaj.model.AppConfig;
+import charactermanaj.ui.util.ScaleSupport;
 import charactermanaj.ui.util.ScrollPaneDragScrollSupport;
 import charactermanaj.util.LocalizedResourcePropertyLoader;
 import charactermanaj.util.UIHelper;
@@ -221,7 +222,7 @@ public class PreviewPanel extends JPanel {
        private LinkedList<PreviewPanelListener> listeners = new LinkedList<PreviewPanelListener>();
 
 
-       public PreviewPanel() {
+       public PreviewPanel(ScaleSupport scaleSupport) {
                setLayout(new BorderLayout());
 
                final AppConfig appConfig = AppConfig.getInstance();
@@ -1836,7 +1837,7 @@ class PreviewControlPanel extends JPanel {
                final Properties strings = LocalizedResourcePropertyLoader.getCachedInstance()
                                .getLocalizedProperties(STRINGS_RESOURCE);
 
-               UIHelper uiHelper = UIHelper.getInstance();
+               final UIHelper uiHelper = UIHelper.getInstance();
 
                // ピンアイコン
                Icon pinIcon = uiHelper.createTwoStateIcon(
@@ -1849,10 +1850,10 @@ class PreviewControlPanel extends JPanel {
                // 円ボタン型チェックボックス用アイコンの実装
                final Icon stateIcon = new Icon() {
                        public int getIconHeight() {
-                               return 12;
+                               return (int)(12 * uiHelper.getScaleX());
                        }
                        public int getIconWidth() {
-                               return 6;
+                               return (int)(6 * uiHelper.getScaleY());
                        };
                        public void paintIcon(Component c, Graphics g, int x, int y) {
                                boolean sw = false;
index 3c858ad..5a84197 100644 (file)
@@ -3,6 +3,7 @@ package charactermanaj.util;
 import java.awt.Component;
 import java.awt.Container;
 import java.awt.Graphics;
+import java.awt.Image;
 import java.awt.image.BufferedImage;
 import java.io.IOException;
 import java.net.URL;
@@ -34,6 +35,26 @@ public final class UIHelper {
                return singleton;
        }
 
+       private double scaleX = 1;
+
+       private double scaleY = 1;
+
+       public void setScaleX(double scaleX) {
+               this.scaleX = scaleX;
+       }
+
+       public double getScaleX() {
+               return scaleX;
+       }
+
+       public void setScaleY(double scaleY) {
+               this.scaleY = scaleY;
+       }
+
+       public double getScaleY() {
+               return scaleY;
+       }
+
        /**
         * 指定したコンテナに含まれる指定したコンポーネント型のすべてのコンポーネントを返す.<br>
         * 一つも該当するものがなければ空を返す
@@ -102,13 +123,14 @@ public final class UIHelper {
                                }
                                int w = iconImage.getWidth();
                                int h = iconImage.getHeight();
-                               g.drawImage(iconImage, x, y, w, h, 0, 0, w, h, null);
+                               g.drawImage(iconImage, x, y,
+                                               (int)(w * scaleX), (int)(h * scaleY), 0, 0, w, h, null);
                        }
                        public int getIconHeight() {
-                               return pinIcon1.getHeight();
+                               return (int)(pinIcon1.getHeight() * scaleY);
                        }
                        public int getIconWidth() {
-                               return pinIcon1.getWidth();
+                               return (int)(pinIcon1.getWidth() * scaleX);
                        }
                };
 
@@ -126,7 +148,7 @@ public final class UIHelper {
                        throw new IllegalArgumentException();
                }
                JButton btn = new JButton();
-               btn.setIcon(new ImageIcon(getImage(iconName)));
+               btn.setIcon(createImageIcon(iconName));
 
                return btn;
        }
@@ -152,11 +174,11 @@ public final class UIHelper {
                if (normal == null || normal.length() == 0) {
                        throw new IllegalArgumentException();
                }
-               ImageIcon normIcon = new ImageIcon(getImage(normal));
+               ImageIcon normIcon = createImageIcon(normal);
                JButton btn = new JButton(normIcon);
 
                if (rollover != null && rollover.length() != 0) {
-                       ImageIcon rolloverIcon = new ImageIcon(getImage(rollover));
+                       ImageIcon rolloverIcon = createImageIcon(rollover);
                        btn.setRolloverEnabled(true);
                        btn.setRolloverIcon(rolloverIcon);
                        btn.setPressedIcon(rolloverIcon);
@@ -170,6 +192,26 @@ public final class UIHelper {
        }
 
        /**
+        * イメージアイコンを取得する。
+        * 設定されているスケールに拡大されたイメージでアイコンが設定される。
+        * @param name アイコンリソース名
+        * @return スケール済みのイメージアイコン
+        */
+       public ImageIcon createImageIcon(String name) {
+               Image img;
+               if (scaleX != 1 || scaleY != 1) {
+                       BufferedImage bimg = getImage(name);
+                       img = bimg.getScaledInstance(
+                                       (int)(bimg.getWidth() * scaleX),
+                                       (int)(bimg.getHeight() * scaleY),
+                                       Image.SCALE_DEFAULT);
+               } else {
+                       img = getImage(name);
+               }
+               return new ImageIcon(img);
+       }
+
+       /**
         * リソースから画像を取得する.<br>
         * 画像が取得できない場合は実行時例外を返す.<br>
         * @param name リソース