diff --git a/Mage.Client/src/main/java/mage/client/chat/ChatPanelBasic.java b/Mage.Client/src/main/java/mage/client/chat/ChatPanelBasic.java index e05fe58586b..3e8c8ccaff2 100644 --- a/Mage.Client/src/main/java/mage/client/chat/ChatPanelBasic.java +++ b/Mage.Client/src/main/java/mage/client/chat/ChatPanelBasic.java @@ -92,9 +92,6 @@ public class ChatPanelBasic extends javax.swing.JPanel { protected boolean startMessageDone = false; - /** - * Creates new form ChatPanel - */ public ChatPanelBasic() { initComponents(); txtConversation.enableHyperlinksAndCardPopups(); @@ -117,7 +114,7 @@ public class ChatPanelBasic extends javax.swing.JPanel { } public void changeGUISize(Font font) { - txtConversation.setFont(font); + txtConversation.changeGUISize(font); txtMessage.setFont(font); if (jScrollPaneTxt != null) { jScrollPaneTxt.setFont(font); diff --git a/Mage.Client/src/main/java/mage/client/components/ColorPane.java b/Mage.Client/src/main/java/mage/client/components/ColorPane.java index be3a1145aa3..ed70cc9f0a7 100644 --- a/Mage.Client/src/main/java/mage/client/components/ColorPane.java +++ b/Mage.Client/src/main/java/mage/client/components/ColorPane.java @@ -24,6 +24,7 @@ public class ColorPane extends MageEditorPane { * @param color */ public void setExtBackgroundColor(Color color) { + // TODO: research, maybe no needs in good opaque + background settings setBackground(new Color(0, 0, 0, 0)); JPanel jPanel = new JPanel(); jPanel.setBackground(color); @@ -32,6 +33,7 @@ public class ColorPane extends MageEditorPane { } public void setExtBackgroundColor(BackgroundPainter backgroundPainter) { + // TODO: research, maybe no needs in good opaque + background settings setBackground(new Color(0, 0, 0, 0)); JXPanel jPanel = new JXPanel(); jPanel.setBackgroundPainter(backgroundPainter); @@ -46,6 +48,7 @@ public class ColorPane extends MageEditorPane { */ @Override public void paintChildren(Graphics g) { + // TODO: research, maybe no needs in good opaque + background settings super.paintComponent(g); } @@ -56,6 +59,7 @@ public class ColorPane extends MageEditorPane { */ @Override public void paintComponent(Graphics g) { + // TODO: research, maybe no needs in good opaque + background settings super.paintChildren(g); } } diff --git a/Mage.Client/src/main/java/mage/client/components/MageEditorPane.java b/Mage.Client/src/main/java/mage/client/components/MageEditorPane.java index d72fe8f5573..6cd2e782184 100644 --- a/Mage.Client/src/main/java/mage/client/components/MageEditorPane.java +++ b/Mage.Client/src/main/java/mage/client/components/MageEditorPane.java @@ -17,7 +17,10 @@ import mage.view.PlaneView; import javax.swing.*; import javax.swing.event.HyperlinkEvent; import javax.swing.text.*; -import javax.swing.text.html.*; +import javax.swing.text.html.CSS; +import javax.swing.text.html.HTML; +import javax.swing.text.html.HTMLDocument; +import javax.swing.text.html.HTMLEditorKit; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; @@ -52,6 +55,19 @@ public class MageEditorPane extends JEditorPane { // improved style: browser's url style with underline on mouse over and hand cursor kit.getStyleSheet().addRule(" a { text-decoration: none; } "); + + changeGUISize(this.getFont()); + } + + public void changeGUISize(Font font) { + this.setFont(font); + + // workaround to change editor's font at runtime + String bodyRule = "body { " + + " font-family: " + font.getFamily() + "; " + + " font-size: " + font.getSize() + "pt; " + + "}"; + kit.getStyleSheet().addRule(bodyRule); } /** @@ -264,6 +280,4 @@ public class MageEditorPane extends JEditorPane { hyperlinkEnabled = true; addHyperlinkHandlers(); } - - } diff --git a/Mage.Client/src/main/java/mage/client/dialog/CardHintsHelperDialog.java b/Mage.Client/src/main/java/mage/client/dialog/CardHintsHelperDialog.java index 997caf8a730..c7de29cc8b8 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/CardHintsHelperDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/CardHintsHelperDialog.java @@ -517,7 +517,15 @@ public class CardHintsHelperDialog extends MageDialog implements MageDesktopIcon } private void setGUISize(Font font) { - this.hintsView.setFont(font); + this.comboFilterBy.setFont(font); + this.comboGroupBy.setFont(font); + this.search.setFont(font); + this.searchClear.setFont(font); + // workaround to auto-size button + // TODO: add support of big/HQ button image + this.searchClear.setPreferredSize(GUISizeHelper.dialogGuiScaleSize(this.searchClear.getPreferredSize())); + + this.hintsView.changeGUISize(font); this.scrollView.setFont(font); this.scrollView.getVerticalScrollBar().setPreferredSize(new Dimension(GUISizeHelper.scrollBarSize, 0)); this.scrollView.getHorizontalScrollBar().setPreferredSize(new Dimension(0, GUISizeHelper.scrollBarSize)); diff --git a/Mage.Client/src/main/java/mage/client/dialog/PickChoiceDialog.java b/Mage.Client/src/main/java/mage/client/dialog/PickChoiceDialog.java index 296710304e7..01b20e2c1f6 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/PickChoiceDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/PickChoiceDialog.java @@ -52,11 +52,7 @@ public class PickChoiceDialog extends MageDialog { this.textSubMessage.enableTextLabelMode(); // pick choice shared in multiple dialogs, so modify window size only one time - // TODO: implement global window size settings and runtime theme support by gui scale logic (interface like MageThemeSupported:onSizeChanged,onThemeChanged,etc) - float guiScale = GUISizeHelper.gameFeedbackPanelFont.getSize2D() / GUISizeHelper.gameDialogAreaDefaultFontSize; - int newWidth = GUISizeHelper.guiSizeScale(this.getSize().width, guiScale); - int newHeight = GUISizeHelper.guiSizeScale(this.getSize().height, guiScale); - this.setSize(newWidth, newHeight); + this.setSize(GUISizeHelper.dialogGuiScaleSize(this.getSize())); this.listChoices.setModel(new DefaultListModel()); this.setModal(true); 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 63148693c56..ca6b6da2f89 100644 --- a/Mage.Client/src/main/java/mage/client/game/GamePanel.java +++ b/Mage.Client/src/main/java/mage/client/game/GamePanel.java @@ -436,6 +436,7 @@ public final class GamePanel extends javax.swing.JPanel { handContainer.setPreferredSize(newDimension); handContainer.setMaximumSize(newDimension); + // stack newDimension = new Dimension( newStackWidth, MageActionCallback.getHandOrStackMargins(Zone.STACK).getHeight() + GUISizeHelper.handCardDimension.height + GUISizeHelper.scrollBarSize @@ -446,6 +447,11 @@ public final class GamePanel extends javax.swing.JPanel { stackObjects.setMaximumSize(newDimension); stackObjects.changeGUISize(); // must call to cards fit + // game logs and chat + userChatPanel.changeGUISize(GUISizeHelper.chatFont); + gameChatPanel.changeGUISize(GUISizeHelper.chatFont); + + // skip buttons newDimension = new Dimension(newStackWidth, (int) pnlShortCuts.getPreferredSize().getHeight()); pnlShortCuts.setPreferredSize(newDimension); pnlShortCuts.setMinimumSize(newDimension); @@ -1401,6 +1407,7 @@ public final class GamePanel extends javax.swing.JPanel { // open new CardHintsHelperDialog newDialog = new CardHintsHelperDialog(); + newDialog.setSize(GUISizeHelper.dialogGuiScaleSize(newDialog.getSize())); newDialog.setGameData(this.lastGameData.game, this.gameId, this.bigCard); cardHintsWindows.put(code + UUID.randomUUID(), newDialog); MageFrame.getDesktop().add(newDialog, JLayeredPane.PALETTE_LAYER); diff --git a/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java b/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java index 9132a0dc798..a3209317eef 100644 --- a/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java +++ b/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java @@ -11,8 +11,6 @@ import mage.view.PlayerView; import mage.view.UserRequestMessage; import javax.swing.*; -import javax.swing.GroupLayout.Alignment; -import javax.swing.LayoutStyle.ComponentPlacement; import javax.swing.event.ChangeListener; import java.awt.*; import java.awt.event.*; @@ -77,10 +75,6 @@ public class PlayAreaPanel extends javax.swing.JPanel { battlefieldPanel.cleanUp(); playerPanel.cleanUp(); - for (ActionListener al : btnCheat.getActionListeners()) { - btnCheat.removeActionListener(al); - } - // Taken form : https://community.oracle.com/thread/2183145 // removed the internal focus of a popupMenu data to allow GC before another popup menu is selected for (ChangeListener listener : MenuSelectionManager.defaultManager().getChangeListeners()) { @@ -514,7 +508,6 @@ public class PlayAreaPanel extends javax.swing.JPanel { this.playerId = player.getPlayerId(); this.playerName = player.getName(); this.isMe = player.getControlled(); - this.btnCheat.setVisible(SessionHandler.isTestMode()); } public final void update(GameView game, PlayerView player, Set possibleTargets) { @@ -536,17 +529,14 @@ public class PlayAreaPanel extends javax.swing.JPanel { private void initComponents() { setBorder(BorderFactory.createLineBorder(new Color(0, 0, 0, 0))); playerPanel = new PlayerPanelExt(GUISizeHelper.playerPanelGuiScale); - btnCheat = new javax.swing.JButton(); // TODO: not used? Delete battlefieldPanel = new mage.client.game.BattlefieldPanel(); battlefieldPanel.setTopPanelBattlefield(options.topRow); battlefieldPanel.setPreferredSize(new Dimension(Short.MAX_VALUE, Short.MAX_VALUE)); - btnCheat.setText("Cheat"); - btnCheat.addActionListener(evt -> btnCheatActionPerformed(evt)); - this.setLayout(new BorderLayout()); this.add(playerPanel, BorderLayout.WEST); this.add(battlefieldPanel, BorderLayout.CENTER); + this.add(Box.createRigidArea(new Dimension(0, 10)), BorderLayout.SOUTH); // bottom free space } private void btnCheatActionPerformed(java.awt.event.ActionEvent evt) { @@ -577,8 +567,6 @@ public class PlayAreaPanel extends javax.swing.JPanel { } private mage.client.game.BattlefieldPanel battlefieldPanel; - private javax.swing.JButton btnCheat; //private javax.swing.JScrollPane jScrollPane1; private PlayerPanelExt playerPanel; - } diff --git a/Mage.Client/src/main/java/mage/client/table/PlayersChatPanel.java b/Mage.Client/src/main/java/mage/client/table/PlayersChatPanel.java index bf6d503c361..dfc9dbedbff 100644 --- a/Mage.Client/src/main/java/mage/client/table/PlayersChatPanel.java +++ b/Mage.Client/src/main/java/mage/client/table/PlayersChatPanel.java @@ -125,6 +125,10 @@ public class PlayersChatPanel extends javax.swing.JPanel { jTabbedPaneText.setFont(GUISizeHelper.tableFont); jSplitPane1.setDividerSize(GUISizeHelper.dividerBarSize); + + // chats and logs + colorPaneSystem.changeGUISize(GUISizeHelper.chatFont); + jScrollPaneTalk.changeGUISize(GUISizeHelper.chatFont); } public void setSplitDividerLocation(int location) { 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 c7de52cd6c5..619abffaa29 100644 --- a/Mage.Client/src/main/java/mage/client/util/GUISizeHelper.java +++ b/Mage.Client/src/main/java/mage/client/util/GUISizeHelper.java @@ -104,6 +104,10 @@ public final class GUISizeHelper { // for auto-sizeable dialogs - use scale logic (example: player panel, pick choice, pick ability, etc) dialogGuiScale = dialogFontSize / 14.0f; + // app - frame/window title + // nimbus's LaF limited to static title size, so font can't be too big (related code in SynthInternalFrameTitlePane, BasicInternalFrameTitlePane) + UIManager.put("InternalFrame.titleFont", dialogFont.deriveFont(Font.BOLD, Math.min(17, 0.8f * dialogFont.getSize()))); + // app - tables tableFont = new java.awt.Font("Arial", 0, dialogFontSize); tableRowHeight = dialogFontSize + 4; @@ -233,6 +237,14 @@ public final class GUISizeHelper { return value * scaleMod; } + public static int dialogGuiScaleSize(int value) { + return guiSizeScale(value, dialogGuiScale); + } + + public static Dimension dialogGuiScaleSize(Dimension dimension) { + return new Dimension(dialogGuiScaleSize(dimension.width), dialogGuiScaleSize(dimension.height)); + } + public static String textToHtmlWithSize(String text, Font font) { return textToHtmlWithSize(text, font.getSize()); }