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);