From 35505b29bb6c9fe2f431b2f569e4d1939c4ac70c Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Fri, 19 Feb 2016 01:56:15 +0100 Subject: [PATCH] Some more changes to GUI to better support high screen resolutions. --- .../mage/client/dialog/PreferencesDialog.form | 41 +++++----- .../mage/client/dialog/PreferencesDialog.java | 55 +++++++------- .../main/java/mage/client/game/GamePanel.java | 74 +++++++++++++++---- .../java/mage/client/util/GUISizeHelper.java | 20 +---- 4 files changed, 114 insertions(+), 76 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.form b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.form index efd01d0832b..34b27572110 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.form +++ b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.form @@ -1653,7 +1653,7 @@ - + @@ -1673,8 +1673,8 @@ - - + + @@ -1756,16 +1756,17 @@ - + - - + + - + - + + @@ -1775,18 +1776,24 @@ + + + - + - - + + + + + @@ -2594,11 +2601,11 @@ - - + + - + @@ -2689,11 +2696,11 @@ - - + + - + diff --git a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java index a31f8cc44a5..1f6396b88d1 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java @@ -99,7 +99,7 @@ public class PreferencesDialog extends javax.swing.JDialog { public static final String KEY_GUI_CARD_EDITOR_SIZE = "guiCardEditorSize"; public static final String KEY_GUI_CARD_OFFSET_SIZE = "guiCardOffsetSize"; - public static final String KEY_GUI_SYMBOL_SIZE = "guiSymbolSize"; + public static final String KEY_GUI_STACK_WIDTH = "guiStackWidth"; public static final String KEY_GUI_TOOLTIP_SIZE = "guiTooltipSize"; public static final String KEY_GUI_DIALOG_FONT_SIZE = "guiDialogFontSize"; public static final String KEY_GUI_FEEDBACK_AREA_SIZE = "guiFeedbackAreaSize"; @@ -388,8 +388,8 @@ public class PreferencesDialog extends javax.swing.JDialog { labelCardSizeOtherZones = new javax.swing.JLabel(); sliderCardSizeBattlefield = new javax.swing.JSlider(); labelCardSizeBattlefield = new javax.swing.JLabel(); - sliderSymbolSize = new javax.swing.JSlider(); - labelSymbolSize = new javax.swing.JLabel(); + sliderStackWidth = new javax.swing.JSlider(); + labelStackWidth = new javax.swing.JLabel(); sliderGameFeedbackArea = new javax.swing.JSlider(); labelGameFeedback = new javax.swing.JLabel(); sliderTooltipSize = new javax.swing.JSlider(); @@ -918,7 +918,7 @@ public class PreferencesDialog extends javax.swing.JDialog { sliderCardSizeHand.setPaintLabels(true); sliderCardSizeHand.setPaintTicks(true); sliderCardSizeHand.setSnapToTicks(true); - sliderCardSizeHand.setToolTipText("The size of the card in hand"); + sliderCardSizeHand.setToolTipText("The size of the card images in hand and on the stack"); sliderCardSizeHand.setValue(14); sliderCardSizeHand.setBorder(javax.swing.BorderFactory.createEtchedBorder()); sliderCardSizeHand.setMinimumSize(new java.awt.Dimension(150, 40)); @@ -931,8 +931,8 @@ public class PreferencesDialog extends javax.swing.JDialog { guiSizeGame.add(sliderCardSizeHand, gridBagConstraints); labelCardSizeHand.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - labelCardSizeHand.setText("Cards hand"); - labelCardSizeHand.setToolTipText("The size of the card in hand"); + labelCardSizeHand.setText("Hand cards and stack objects"); + labelCardSizeHand.setToolTipText("The size of the card images in hand and on the stack"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; @@ -999,34 +999,37 @@ public class PreferencesDialog extends javax.swing.JDialog { gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; guiSizeGame.add(labelCardSizeBattlefield, gridBagConstraints); - sliderSymbolSize.setMajorTickSpacing(5); - sliderSymbolSize.setMaximum(50); - sliderSymbolSize.setMinimum(10); - sliderSymbolSize.setMinorTickSpacing(1); - sliderSymbolSize.setPaintLabels(true); - sliderSymbolSize.setPaintTicks(true); - sliderSymbolSize.setSnapToTicks(true); - sliderSymbolSize.setToolTipText("The size of symbols"); - sliderSymbolSize.setBorder(javax.swing.BorderFactory.createEtchedBorder()); - sliderSymbolSize.setMinimumSize(new java.awt.Dimension(150, 40)); + sliderStackWidth.setMajorTickSpacing(20); + sliderStackWidth.setMaximum(90); + sliderStackWidth.setMinimum(10); + sliderStackWidth.setMinorTickSpacing(5); + sliderStackWidth.setPaintLabels(true); + sliderStackWidth.setPaintTicks(true); + sliderStackWidth.setSnapToTicks(true); + sliderStackWidth.setToolTipText("The % size of the stack object area in relation to the hand card area size."); + sliderStackWidth.setValue(30); + sliderStackWidth.setBorder(javax.swing.BorderFactory.createEtchedBorder()); + sliderStackWidth.setMinimumSize(new java.awt.Dimension(150, 40)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2); - guiSizeGame.add(sliderSymbolSize, gridBagConstraints); + guiSizeGame.add(sliderStackWidth, gridBagConstraints); + sliderStackWidth.getAccessibleContext().setAccessibleDescription("The stack width in relation to the hand area width"); - labelSymbolSize.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - labelSymbolSize.setText("Symbol size"); - labelSymbolSize.setToolTipText("The size of symbols"); + labelStackWidth.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); + labelStackWidth.setText("Stack %width relatated to hand"); + labelStackWidth.setToolTipText("The % size of the stack object area in relation to the hand card area size."); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; gridBagConstraints.ipadx = 3; gridBagConstraints.ipady = 3; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; - guiSizeGame.add(labelSymbolSize, gridBagConstraints); + guiSizeGame.add(labelStackWidth, gridBagConstraints); + labelStackWidth.getAccessibleContext().setAccessibleDescription("The stack width in relation to the hand area width"); sliderGameFeedbackArea.setMajorTickSpacing(5); sliderGameFeedbackArea.setMaximum(50); @@ -2366,8 +2369,8 @@ public class PreferencesDialog extends javax.swing.JDialog { save(prefs, dialog.sliderEditorCardOffset, KEY_GUI_CARD_OFFSET_SIZE, "true", "false", UPDATE_CACHE_POLICY); sizeGUIChanged = true; } - if (getCachedValue(KEY_GUI_SYMBOL_SIZE, 14) != dialog.sliderSymbolSize.getValue()) { - save(prefs, dialog.sliderSymbolSize, KEY_GUI_SYMBOL_SIZE, "true", "false", UPDATE_CACHE_POLICY); + if (getCachedValue(KEY_GUI_STACK_WIDTH, 30) != dialog.sliderStackWidth.getValue()) { + save(prefs, dialog.sliderStackWidth, KEY_GUI_STACK_WIDTH, "true", "false", UPDATE_CACHE_POLICY); sizeGUIChanged = true; } if (getCachedValue(KEY_GUI_TOOLTIP_SIZE, 14) != dialog.sliderTooltipSize.getValue()) { @@ -2874,7 +2877,7 @@ public class PreferencesDialog extends javax.swing.JDialog { load(prefs, dialog.sliderCardSizeHand, KEY_GUI_CARD_HAND_SIZE, "14"); load(prefs, dialog.sliderEditorCardSize, KEY_GUI_CARD_EDITOR_SIZE, "14"); load(prefs, dialog.sliderEditorCardOffset, KEY_GUI_CARD_OFFSET_SIZE, "14"); - load(prefs, dialog.sliderSymbolSize, KEY_GUI_SYMBOL_SIZE, "14"); + load(prefs, dialog.sliderStackWidth, KEY_GUI_STACK_WIDTH, "14"); load(prefs, dialog.sliderDialogFont, KEY_GUI_DIALOG_FONT_SIZE, "14"); load(prefs, dialog.sliderTooltipSize, KEY_GUI_TOOLTIP_SIZE, "14"); load(prefs, dialog.sliderGameFeedbackArea, KEY_GUI_FEEDBACK_AREA_SIZE, "14"); @@ -3367,7 +3370,7 @@ public class PreferencesDialog extends javax.swing.JDialog { private javax.swing.JLabel labelEditorCardSize; private javax.swing.JLabel labelGameFeedback; private javax.swing.JLabel labelPreferedImageLanguage; - private javax.swing.JLabel labelSymbolSize; + private javax.swing.JLabel labelStackWidth; private javax.swing.JLabel labelTooltipSize; private javax.swing.JLabel lblProxyPassword; private javax.swing.JLabel lblProxyPort; @@ -3398,7 +3401,7 @@ public class PreferencesDialog extends javax.swing.JDialog { private javax.swing.JSlider sliderEditorCardSize; private javax.swing.JSlider sliderFontSize; private javax.swing.JSlider sliderGameFeedbackArea; - private javax.swing.JSlider sliderSymbolSize; + private javax.swing.JSlider sliderStackWidth; private javax.swing.JSlider sliderTooltipSize; private javax.swing.JPanel sounds_backgroundMusic; private javax.swing.JPanel sounds_clips; diff --git a/Mage.Client/src/main/java/mage/client/game/GamePanel.java b/Mage.Client/src/main/java/mage/client/game/GamePanel.java index 772fe8a8cb8..80b72b2f1f9 100644 --- a/Mage.Client/src/main/java/mage/client/game/GamePanel.java +++ b/Mage.Client/src/main/java/mage/client/game/GamePanel.java @@ -71,6 +71,7 @@ import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.KeyStroke; +import javax.swing.SwingUtilities; import javax.swing.SwingWorker; import javax.swing.border.Border; import javax.swing.border.EmptyBorder; @@ -155,7 +156,7 @@ public final class GamePanel extends javax.swing.JPanel { private static final Logger logger = Logger.getLogger(GamePanel.class); private static final String YOUR_HAND = "Your hand"; private static final int X_PHASE_WIDTH = 55; - private static final int STACK_MIN_CARDS_OFFSET_Y = 7; + private static final int STACK_MIN_CARDS_OFFSET_Y = 7; // TODO: Size bui GUISize value private static final String CMD_AUTO_ORDER_FIRST = "cmdAutoOrderFirst"; private static final String CMD_AUTO_ORDER_LAST = "cmdAutoOrderLast"; @@ -216,7 +217,7 @@ public final class GamePanel extends javax.swing.JPanel { this.feedbackPanel.setConnectedChatPanel(this.userChatPanel); - this.stack.setMinOffsetY(STACK_MIN_CARDS_OFFSET_Y); + this.stackObjects.setMinOffsetY(STACK_MIN_CARDS_OFFSET_Y); // Override layout (I can't edit generated code) this.setLayout(new BorderLayout()); @@ -228,7 +229,7 @@ public final class GamePanel extends javax.swing.JPanel { Map myUi = getUIComponents(jLayeredBackgroundPane); Plugins.getInstance().updateGamePanel(myUi); - // Enlarge jlayeredpane on resize + // Enlarge jlayeredpane on resize of game panel addComponentListener(new ComponentAdapter() { @Override public void componentResized(ComponentEvent e) { @@ -254,6 +255,26 @@ public final class GamePanel extends javax.swing.JPanel { } }); + // Resize the width of the stack area if the size of the play area is chnaged + ComponentAdapter componentAdapterPlayField = new ComponentAdapter() { + @Override + public void componentResized(ComponentEvent e) { + Thread worker = new Thread() { + @Override + public void run() { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + setGUISize(); + } + }); + } + }; + worker.start(); + + } + }; + jPanel3.addComponentListener(componentAdapterPlayField); } private Map getUIComponents(JLayeredPane jLayeredPane) { @@ -280,7 +301,7 @@ public final class GamePanel extends javax.swing.JPanel { this.removeListener(); this.handContainer.cleanUp(); - this.stack.cleanUp(); + this.stackObjects.cleanUp(); for (Map.Entry playAreaPanelEntry : players.entrySet()) { playAreaPanelEntry.getValue().CleanUp(); } @@ -333,8 +354,7 @@ public final class GamePanel extends javax.swing.JPanel { playAreaPanel.changeGUISize(); } - stack.setPreferredSize(new java.awt.Dimension(Config.dimensions.frameWidth, Config.dimensions.frameHeight + 25)); - + stackObjects.changeGUISize(); feedbackPanel.changeGUISize(); for (CardInfoWindowDialog cardInfoWindowDialog : exiles.values()) { @@ -349,12 +369,32 @@ public final class GamePanel extends javax.swing.JPanel { for (CardInfoWindowDialog cardInfoWindowDialog : graveyardWindows.values()) { cardInfoWindowDialog.changeGUISize(); } + this.revalidate(); + this.repaint(); } private void setGUISize() { jSplitPane0.setDividerSize(GUISizeHelper.dividerBarSize); jSplitPane1.setDividerSize(GUISizeHelper.dividerBarSize); jSplitPane2.setDividerSize(GUISizeHelper.dividerBarSize); + + stackObjects.setCardDimension(GUISizeHelper.handCardDimension); + int newStackWidth = jPanel3.getWidth() * GUISizeHelper.stackWidth / 100; + if (newStackWidth < 360) { + newStackWidth = 360; + } + Dimension newDimension = new Dimension(jPanel3.getWidth() - newStackWidth, (int) GUISizeHelper.handCardDimension.height + GUISizeHelper.scrollBarSize); + handContainer.setPreferredSize(newDimension); + handContainer.setMaximumSize(newDimension); + newDimension = new Dimension(newStackWidth, (int) GUISizeHelper.handCardDimension.height + GUISizeHelper.scrollBarSize); + stackObjects.setPreferredSize(newDimension); + stackObjects.setMinimumSize(newDimension); + stackObjects.setMaximumSize(newDimension); + newDimension = new Dimension(newStackWidth, (int) pnlShortCuts.getPreferredSize().getHeight()); + pnlShortCuts.setPreferredSize(newDimension); + pnlShortCuts.setMinimumSize(newDimension); + pnlShortCuts.setMaximumSize(newDimension); + } private void saveDividerLocations() { @@ -831,7 +871,7 @@ public final class GamePanel extends javax.swing.JPanel { } private void displayStack(GameView game, BigCard bigCard, FeedbackPanel feedbackPanel, UUID gameId) { - this.stack.loadCards(game.getStack(), bigCard, gameId, true); + this.stackObjects.loadCards(game.getStack(), bigCard, gameId, true); } /** @@ -1222,7 +1262,6 @@ public final class GamePanel extends javax.swing.JPanel { btnStopWatching = new javax.swing.JButton(); bigCard = new mage.client.cards.BigCard(); - stack = new mage.client.cards.Cards(); pnlReplay = new javax.swing.JPanel(); btnStopReplay = new javax.swing.JButton(); btnNextPlay = new javax.swing.JButton(); @@ -1241,9 +1280,13 @@ public final class GamePanel extends javax.swing.JPanel { gameChatPanel.setMinimumSize(new java.awt.Dimension(100, 48)); jSplitPane2 = new javax.swing.JSplitPane(); handContainer = new HandPanel(); - handCards = new HashMap<>(); + pnlShortCuts.setOpaque(false); + pnlShortCuts.setPreferredSize(new Dimension(400, 72)); + + stackObjects = new mage.client.cards.Cards(); + jSplitPane1.setBorder(null); jSplitPane1.setDividerSize(7); jSplitPane1.setResizeWeight(1.0); @@ -1257,8 +1300,6 @@ public final class GamePanel extends javax.swing.JPanel { restoreDividerLocations(); - pnlShortCuts.setOpaque(false); - pnlShortCuts.setPreferredSize(new Dimension(400, 72)); lblPhase.setLabelFor(txtPhase); lblPhase.setText("Phase:"); @@ -1558,7 +1599,7 @@ public final class GamePanel extends javax.swing.JPanel { } }); - stack.setBackgroundColor(new Color(0, 0, 0, 0)); + stackObjects.setBackgroundColor(new Color(0, 0, 0, 40)); btnStopReplay.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/control_stop.png"))); btnStopReplay.addActionListener(new java.awt.event.ActionListener() { @@ -1739,8 +1780,8 @@ public final class GamePanel extends javax.swing.JPanel { .addComponent(handContainer, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ) .addGroup(gl_jPanel3.createParallelGroup(Alignment.LEADING) - .addComponent(pnlShortCuts, 400, 400, 400) - .addComponent(stack, 400, 400, 400) + .addComponent(pnlShortCuts, 360, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE) + .addComponent(stackObjects, 360, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE) ) ) .addGap(0) @@ -1762,7 +1803,7 @@ public final class GamePanel extends javax.swing.JPanel { .addGroup(gl_jPanel3.createSequentialGroup() .addGap(2) .addComponent(pnlShortCuts, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) - .addComponent(stack, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addComponent(stackObjects, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) ) .addGroup(gl_jPanel3.createSequentialGroup() .addComponent(helper, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) @@ -2179,7 +2220,8 @@ public final class GamePanel extends javax.swing.JPanel { private javax.swing.JLabel txtTurn; private Map handCards; - private mage.client.cards.Cards stack; + + private mage.client.cards.Cards stackObjects; private HandPanel handContainer; private javax.swing.JSplitPane jSplitPane2; diff --git a/Mage.Client/src/main/java/mage/client/util/GUISizeHelper.java b/Mage.Client/src/main/java/mage/client/util/GUISizeHelper.java index 0aa26ff4edc..2eee2a19a10 100644 --- a/Mage.Client/src/main/java/mage/client/util/GUISizeHelper.java +++ b/Mage.Client/src/main/java/mage/client/util/GUISizeHelper.java @@ -56,6 +56,8 @@ public class GUISizeHelper { public static Font gameDialogAreaFontSmall = new java.awt.Font("Arial", 0, 12); public static Dimension handCardDimension; + public static int stackWidth; + public static Dimension otherZonesCardDimension; public static Dimension battlefieldCardDimension; @@ -105,28 +107,12 @@ public class GUISizeHelper { chatFont = new java.awt.Font("Arial", 0, chatFontSize); symbolChatSize = chatFontSize; - int symbolSize = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_GUI_SYMBOL_SIZE, 14); - // Set basic symbol size - if (symbolSize < 25) { - basicSymbolSize = "small"; - } else if (symbolSize < 45) { - basicSymbolSize = "medium"; - } else { - basicSymbolSize = "large"; - } - if (symbolSize < 16) { - symbolPaySize = 15; - symbolCardSize = 15; - } else { - symbolPaySize = symbolSize; - symbolCardSize = symbolSize; - } - cardTooltipFontSize = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_GUI_TOOLTIP_SIZE, 14); symbolTooltipSize = cardTooltipFontSize; int handCardSize = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_GUI_CARD_HAND_SIZE, 14); handCardDimension = new Dimension(CARD_IMAGE_WIDTH * handCardSize / 42, CARD_IMAGE_HEIGHT * handCardSize / 42); + stackWidth = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_GUI_STACK_WIDTH, 30); int otherZonesCardSize = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_GUI_CARD_OTHER_ZONES_SIZE, 14); otherZonesCardDimension = new Dimension(CARD_IMAGE_WIDTH * otherZonesCardSize / 42, CARD_IMAGE_HEIGHT * otherZonesCardSize / 42);