mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 02:30:08 -08:00
- added GUI scale support for dialog titles; - added GUI scale support for hints tool; - fixed broken font in chat and game logs on settings change; - fixed wrong size of pick choice dialog in some use cases;
This commit is contained in:
parent
1578ab7946
commit
8186b35dfb
9 changed files with 56 additions and 26 deletions
|
|
@ -92,9 +92,6 @@ public class ChatPanelBasic extends javax.swing.JPanel {
|
||||||
|
|
||||||
protected boolean startMessageDone = false;
|
protected boolean startMessageDone = false;
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates new form ChatPanel
|
|
||||||
*/
|
|
||||||
public ChatPanelBasic() {
|
public ChatPanelBasic() {
|
||||||
initComponents();
|
initComponents();
|
||||||
txtConversation.enableHyperlinksAndCardPopups();
|
txtConversation.enableHyperlinksAndCardPopups();
|
||||||
|
|
@ -117,7 +114,7 @@ public class ChatPanelBasic extends javax.swing.JPanel {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void changeGUISize(Font font) {
|
public void changeGUISize(Font font) {
|
||||||
txtConversation.setFont(font);
|
txtConversation.changeGUISize(font);
|
||||||
txtMessage.setFont(font);
|
txtMessage.setFont(font);
|
||||||
if (jScrollPaneTxt != null) {
|
if (jScrollPaneTxt != null) {
|
||||||
jScrollPaneTxt.setFont(font);
|
jScrollPaneTxt.setFont(font);
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ public class ColorPane extends MageEditorPane {
|
||||||
* @param color
|
* @param color
|
||||||
*/
|
*/
|
||||||
public void setExtBackgroundColor(Color color) {
|
public void setExtBackgroundColor(Color color) {
|
||||||
|
// TODO: research, maybe no needs in good opaque + background settings
|
||||||
setBackground(new Color(0, 0, 0, 0));
|
setBackground(new Color(0, 0, 0, 0));
|
||||||
JPanel jPanel = new JPanel();
|
JPanel jPanel = new JPanel();
|
||||||
jPanel.setBackground(color);
|
jPanel.setBackground(color);
|
||||||
|
|
@ -32,6 +33,7 @@ public class ColorPane extends MageEditorPane {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setExtBackgroundColor(BackgroundPainter backgroundPainter) {
|
public void setExtBackgroundColor(BackgroundPainter backgroundPainter) {
|
||||||
|
// TODO: research, maybe no needs in good opaque + background settings
|
||||||
setBackground(new Color(0, 0, 0, 0));
|
setBackground(new Color(0, 0, 0, 0));
|
||||||
JXPanel jPanel = new JXPanel();
|
JXPanel jPanel = new JXPanel();
|
||||||
jPanel.setBackgroundPainter(backgroundPainter);
|
jPanel.setBackgroundPainter(backgroundPainter);
|
||||||
|
|
@ -46,6 +48,7 @@ public class ColorPane extends MageEditorPane {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void paintChildren(Graphics g) {
|
public void paintChildren(Graphics g) {
|
||||||
|
// TODO: research, maybe no needs in good opaque + background settings
|
||||||
super.paintComponent(g);
|
super.paintComponent(g);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -56,6 +59,7 @@ public class ColorPane extends MageEditorPane {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void paintComponent(Graphics g) {
|
public void paintComponent(Graphics g) {
|
||||||
|
// TODO: research, maybe no needs in good opaque + background settings
|
||||||
super.paintChildren(g);
|
super.paintChildren(g);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,10 @@ import mage.view.PlaneView;
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import javax.swing.event.HyperlinkEvent;
|
import javax.swing.event.HyperlinkEvent;
|
||||||
import javax.swing.text.*;
|
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.*;
|
||||||
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseAdapter;
|
||||||
import java.awt.event.MouseEvent;
|
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
|
// improved style: browser's url style with underline on mouse over and hand cursor
|
||||||
kit.getStyleSheet().addRule(" a { text-decoration: none; } ");
|
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;
|
hyperlinkEnabled = true;
|
||||||
addHyperlinkHandlers();
|
addHyperlinkHandlers();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -517,7 +517,15 @@ public class CardHintsHelperDialog extends MageDialog implements MageDesktopIcon
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setGUISize(Font font) {
|
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.setFont(font);
|
||||||
this.scrollView.getVerticalScrollBar().setPreferredSize(new Dimension(GUISizeHelper.scrollBarSize, 0));
|
this.scrollView.getVerticalScrollBar().setPreferredSize(new Dimension(GUISizeHelper.scrollBarSize, 0));
|
||||||
this.scrollView.getHorizontalScrollBar().setPreferredSize(new Dimension(0, GUISizeHelper.scrollBarSize));
|
this.scrollView.getHorizontalScrollBar().setPreferredSize(new Dimension(0, GUISizeHelper.scrollBarSize));
|
||||||
|
|
|
||||||
|
|
@ -52,11 +52,7 @@ public class PickChoiceDialog extends MageDialog {
|
||||||
this.textSubMessage.enableTextLabelMode();
|
this.textSubMessage.enableTextLabelMode();
|
||||||
|
|
||||||
// pick choice shared in multiple dialogs, so modify window size only one time
|
// 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)
|
this.setSize(GUISizeHelper.dialogGuiScaleSize(this.getSize()));
|
||||||
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.listChoices.setModel(new DefaultListModel<KeyValueItem>());
|
this.listChoices.setModel(new DefaultListModel<KeyValueItem>());
|
||||||
this.setModal(true);
|
this.setModal(true);
|
||||||
|
|
|
||||||
|
|
@ -436,6 +436,7 @@ public final class GamePanel extends javax.swing.JPanel {
|
||||||
handContainer.setPreferredSize(newDimension);
|
handContainer.setPreferredSize(newDimension);
|
||||||
handContainer.setMaximumSize(newDimension);
|
handContainer.setMaximumSize(newDimension);
|
||||||
|
|
||||||
|
// stack
|
||||||
newDimension = new Dimension(
|
newDimension = new Dimension(
|
||||||
newStackWidth,
|
newStackWidth,
|
||||||
MageActionCallback.getHandOrStackMargins(Zone.STACK).getHeight() + GUISizeHelper.handCardDimension.height + GUISizeHelper.scrollBarSize
|
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.setMaximumSize(newDimension);
|
||||||
stackObjects.changeGUISize(); // must call to cards fit
|
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());
|
newDimension = new Dimension(newStackWidth, (int) pnlShortCuts.getPreferredSize().getHeight());
|
||||||
pnlShortCuts.setPreferredSize(newDimension);
|
pnlShortCuts.setPreferredSize(newDimension);
|
||||||
pnlShortCuts.setMinimumSize(newDimension);
|
pnlShortCuts.setMinimumSize(newDimension);
|
||||||
|
|
@ -1401,6 +1407,7 @@ public final class GamePanel extends javax.swing.JPanel {
|
||||||
|
|
||||||
// open new
|
// open new
|
||||||
CardHintsHelperDialog newDialog = new CardHintsHelperDialog();
|
CardHintsHelperDialog newDialog = new CardHintsHelperDialog();
|
||||||
|
newDialog.setSize(GUISizeHelper.dialogGuiScaleSize(newDialog.getSize()));
|
||||||
newDialog.setGameData(this.lastGameData.game, this.gameId, this.bigCard);
|
newDialog.setGameData(this.lastGameData.game, this.gameId, this.bigCard);
|
||||||
cardHintsWindows.put(code + UUID.randomUUID(), newDialog);
|
cardHintsWindows.put(code + UUID.randomUUID(), newDialog);
|
||||||
MageFrame.getDesktop().add(newDialog, JLayeredPane.PALETTE_LAYER);
|
MageFrame.getDesktop().add(newDialog, JLayeredPane.PALETTE_LAYER);
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,6 @@ import mage.view.PlayerView;
|
||||||
import mage.view.UserRequestMessage;
|
import mage.view.UserRequestMessage;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import javax.swing.GroupLayout.Alignment;
|
|
||||||
import javax.swing.LayoutStyle.ComponentPlacement;
|
|
||||||
import javax.swing.event.ChangeListener;
|
import javax.swing.event.ChangeListener;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.event.*;
|
import java.awt.event.*;
|
||||||
|
|
@ -77,10 +75,6 @@ public class PlayAreaPanel extends javax.swing.JPanel {
|
||||||
battlefieldPanel.cleanUp();
|
battlefieldPanel.cleanUp();
|
||||||
playerPanel.cleanUp();
|
playerPanel.cleanUp();
|
||||||
|
|
||||||
for (ActionListener al : btnCheat.getActionListeners()) {
|
|
||||||
btnCheat.removeActionListener(al);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Taken form : https://community.oracle.com/thread/2183145
|
// 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
|
// removed the internal focus of a popupMenu data to allow GC before another popup menu is selected
|
||||||
for (ChangeListener listener : MenuSelectionManager.defaultManager().getChangeListeners()) {
|
for (ChangeListener listener : MenuSelectionManager.defaultManager().getChangeListeners()) {
|
||||||
|
|
@ -514,7 +508,6 @@ public class PlayAreaPanel extends javax.swing.JPanel {
|
||||||
this.playerId = player.getPlayerId();
|
this.playerId = player.getPlayerId();
|
||||||
this.playerName = player.getName();
|
this.playerName = player.getName();
|
||||||
this.isMe = player.getControlled();
|
this.isMe = player.getControlled();
|
||||||
this.btnCheat.setVisible(SessionHandler.isTestMode());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public final void update(GameView game, PlayerView player, Set<UUID> possibleTargets) {
|
public final void update(GameView game, PlayerView player, Set<UUID> possibleTargets) {
|
||||||
|
|
@ -536,17 +529,14 @@ public class PlayAreaPanel extends javax.swing.JPanel {
|
||||||
private void initComponents() {
|
private void initComponents() {
|
||||||
setBorder(BorderFactory.createLineBorder(new Color(0, 0, 0, 0)));
|
setBorder(BorderFactory.createLineBorder(new Color(0, 0, 0, 0)));
|
||||||
playerPanel = new PlayerPanelExt(GUISizeHelper.playerPanelGuiScale);
|
playerPanel = new PlayerPanelExt(GUISizeHelper.playerPanelGuiScale);
|
||||||
btnCheat = new javax.swing.JButton(); // TODO: not used? Delete
|
|
||||||
battlefieldPanel = new mage.client.game.BattlefieldPanel();
|
battlefieldPanel = new mage.client.game.BattlefieldPanel();
|
||||||
battlefieldPanel.setTopPanelBattlefield(options.topRow);
|
battlefieldPanel.setTopPanelBattlefield(options.topRow);
|
||||||
battlefieldPanel.setPreferredSize(new Dimension(Short.MAX_VALUE, Short.MAX_VALUE));
|
battlefieldPanel.setPreferredSize(new Dimension(Short.MAX_VALUE, Short.MAX_VALUE));
|
||||||
|
|
||||||
btnCheat.setText("Cheat");
|
|
||||||
btnCheat.addActionListener(evt -> btnCheatActionPerformed(evt));
|
|
||||||
|
|
||||||
this.setLayout(new BorderLayout());
|
this.setLayout(new BorderLayout());
|
||||||
this.add(playerPanel, BorderLayout.WEST);
|
this.add(playerPanel, BorderLayout.WEST);
|
||||||
this.add(battlefieldPanel, BorderLayout.CENTER);
|
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) {
|
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 mage.client.game.BattlefieldPanel battlefieldPanel;
|
||||||
private javax.swing.JButton btnCheat;
|
|
||||||
//private javax.swing.JScrollPane jScrollPane1;
|
//private javax.swing.JScrollPane jScrollPane1;
|
||||||
private PlayerPanelExt playerPanel;
|
private PlayerPanelExt playerPanel;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -125,6 +125,10 @@ public class PlayersChatPanel extends javax.swing.JPanel {
|
||||||
|
|
||||||
jTabbedPaneText.setFont(GUISizeHelper.tableFont);
|
jTabbedPaneText.setFont(GUISizeHelper.tableFont);
|
||||||
jSplitPane1.setDividerSize(GUISizeHelper.dividerBarSize);
|
jSplitPane1.setDividerSize(GUISizeHelper.dividerBarSize);
|
||||||
|
|
||||||
|
// chats and logs
|
||||||
|
colorPaneSystem.changeGUISize(GUISizeHelper.chatFont);
|
||||||
|
jScrollPaneTalk.changeGUISize(GUISizeHelper.chatFont);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSplitDividerLocation(int location) {
|
public void setSplitDividerLocation(int location) {
|
||||||
|
|
|
||||||
|
|
@ -104,6 +104,10 @@ public final class GUISizeHelper {
|
||||||
// for auto-sizeable dialogs - use scale logic (example: player panel, pick choice, pick ability, etc)
|
// for auto-sizeable dialogs - use scale logic (example: player panel, pick choice, pick ability, etc)
|
||||||
dialogGuiScale = dialogFontSize / 14.0f;
|
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
|
// app - tables
|
||||||
tableFont = new java.awt.Font("Arial", 0, dialogFontSize);
|
tableFont = new java.awt.Font("Arial", 0, dialogFontSize);
|
||||||
tableRowHeight = dialogFontSize + 4;
|
tableRowHeight = dialogFontSize + 4;
|
||||||
|
|
@ -233,6 +237,14 @@ public final class GUISizeHelper {
|
||||||
return value * scaleMod;
|
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) {
|
public static String textToHtmlWithSize(String text, Font font) {
|
||||||
return textToHtmlWithSize(text, font.getSize());
|
return textToHtmlWithSize(text, font.getSize());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue