From 57a9c546302ff5e7e3ee0dfabb5783bcf7df9aa0 Mon Sep 17 00:00:00 2001 From: drdev Date: Sun, 1 Sep 2013 19:35:46 +0000 Subject: [PATCH] Refactor skin colors and support tracking skinned components --- .gitattributes | 1 - src/main/java/forge/control/FControl.java | 11 - src/main/java/forge/gui/CardDetailPanel.java | 10 +- src/main/java/forge/gui/DualListBox.java | 4 +- src/main/java/forge/gui/FNetOverlay.java | 10 +- src/main/java/forge/gui/SOverlayUtils.java | 11 +- .../forge/gui/deckeditor/CDeckEditorUI.java | 9 +- .../gui/deckeditor/views/VCardCatalog.java | 3 +- .../deckeditor/views/VEditorPreferences.java | 10 +- .../gui/deckeditor/views/VProbabilities.java | 15 +- .../gui/deckeditor/views/VStatistics.java | 2 +- .../forge/gui/download/GuiDownloader.java | 3 +- .../java/forge/gui/framework/DragTab.java | 12 +- src/main/java/forge/gui/home/LblGroup.java | 31 +- src/main/java/forge/gui/home/LblHeader.java | 21 +- src/main/java/forge/gui/home/LblMenuItem.java | 38 +- src/main/java/forge/gui/home/PnlGroup.java | 32 +- src/main/java/forge/gui/home/VHomeUI.java | 20 +- .../home/gauntlet/ContestGauntletLister.java | 15 +- .../home/gauntlet/QuickGauntletLister.java | 19 +- .../home/gauntlet/VSubmenuGauntletBuild.java | 2 +- .../gauntlet/VSubmenuGauntletContests.java | 4 +- .../home/gauntlet/VSubmenuGauntletLoad.java | 2 +- .../home/gauntlet/VSubmenuGauntletQuick.java | 6 +- .../java/forge/gui/home/quest/PnlEvent.java | 8 +- .../forge/gui/home/quest/QuestFileLister.java | 23 +- .../home/quest/QuestPreferencesHandler.java | 15 +- .../gui/home/quest/SSubmenuQuestUtil.java | 14 +- .../gui/home/quest/VSubmenuQuestData.java | 4 +- .../gui/home/quest/VSubmenuQuestDecks.java | 2 +- .../gui/home/quest/VSubmenuQuestPrefs.java | 26 +- .../home/sanctioned/VSubmenuConstructed.java | 4 +- .../gui/home/sanctioned/VSubmenuDraft.java | 2 +- .../gui/home/sanctioned/VSubmenuSealed.java | 4 +- .../home/settings/VSubmenuPreferences.java | 15 +- .../home/settings/VSubmenuReleaseNotes.java | 6 +- .../gui/home/variant/VSubmenuArchenemy.java | 2 +- .../gui/home/variant/VSubmenuPlanechase.java | 2 +- .../gui/home/variant/VSubmenuVanguard.java | 2 +- .../java/forge/gui/match/GameLogPanel.java | 7 +- .../java/forge/gui/match/GauntletWinLose.java | 2 +- .../gui/match/QuestWinLoseCardViewer.java | 2 +- .../forge/gui/match/TargetingOverlay.java | 10 +- .../java/forge/gui/match/VAssignDamage.java | 6 +- .../gui/match/nonsingleton/VCommand.java | 5 +- .../forge/gui/match/nonsingleton/VField.java | 19 +- .../java/forge/gui/match/views/VCombat.java | 7 +- src/main/java/forge/gui/match/views/VDev.java | 19 +- .../java/forge/gui/match/views/VDock.java | 19 +- .../java/forge/gui/match/views/VMessage.java | 2 +- .../java/forge/gui/match/views/VPlayers.java | 6 +- .../java/forge/gui/match/views/VStack.java | 60 +- src/main/java/forge/gui/toolbox/FButton.java | 2 +- .../java/forge/gui/toolbox/FCheckBox.java | 2 +- .../forge/gui/toolbox/FComboBoxPanel.java | 7 +- src/main/java/forge/gui/toolbox/FLabel.java | 51 +- src/main/java/forge/gui/toolbox/FList.java | 7 +- src/main/java/forge/gui/toolbox/FPanel.java | 25 +- .../java/forge/gui/toolbox/FRadioButton.java | 2 +- .../java/forge/gui/toolbox/FScrollPane.java | 3 +- .../java/forge/gui/toolbox/FScrollPanel.java | 26 +- src/main/java/forge/gui/toolbox/FSkin.java | 567 ++++++++++++++++-- src/main/java/forge/gui/toolbox/FSpinner.java | 7 +- .../java/forge/gui/toolbox/FTabbedPane.java | 5 +- .../java/forge/gui/toolbox/FTextArea.java | 5 +- .../java/forge/gui/toolbox/FTextField.java | 12 +- .../itemmanager/filters/ItemFilter.java | 3 +- .../toolbox/itemmanager/table/ItemTable.java | 10 +- .../forge/gui/toolbox/special/DeckLister.java | 27 +- .../forge/gui/toolbox/special/PhaseLabel.java | 5 +- .../toolbox/special/PlayerDetailsPanel.java | 14 +- .../forge/properties/ForgeLookAndFeel.java | 166 ----- src/main/java/forge/quest/gui/ViewItem.java | 2 +- src/main/java/forge/quest/gui/ViewStall.java | 2 +- src/main/java/forge/view/FView.java | 10 +- 75 files changed, 932 insertions(+), 612 deletions(-) delete mode 100644 src/main/java/forge/properties/ForgeLookAndFeel.java diff --git a/.gitattributes b/.gitattributes index e1884e336dd..7d59766fe50 100644 --- a/.gitattributes +++ b/.gitattributes @@ -15129,7 +15129,6 @@ src/main/java/forge/net/protocol/toserver/IPacketSrv.java -text src/main/java/forge/net/protocol/toserver/IncorrectPacketSrv.java -text src/main/java/forge/net/protocol/toserver/package-info.java -text src/main/java/forge/package-info.java svneol=native#text/plain -src/main/java/forge/properties/ForgeLookAndFeel.java -text src/main/java/forge/properties/ForgePreferences.java svneol=native#text/plain src/main/java/forge/properties/NewConstants.java svneol=native#text/plain src/main/java/forge/properties/Preferences.java svneol=native#text/plain diff --git a/src/main/java/forge/control/FControl.java b/src/main/java/forge/control/FControl.java index c5a47e38d94..0d9a15c6e24 100644 --- a/src/main/java/forge/control/FControl.java +++ b/src/main/java/forge/control/FControl.java @@ -68,7 +68,6 @@ import forge.gui.menubar.FMenuBar; import forge.gui.menubar.MenuUtil; import forge.gui.toolbox.FSkin; import forge.net.FServer; -import forge.properties.ForgeLookAndFeel; import forge.properties.ForgePreferences; import forge.properties.ForgePreferences.FPref; import forge.properties.NewConstants; @@ -175,11 +174,6 @@ public enum FControl implements KeyEventDispatcher { // Preloads skin components (using progress bar). FSkin.loadFull(); - // This must be done here or at least between the skin being loaded - // and any GUI controls being created. - FSkin.setProgessBarMessage("Setting look and feel..."); - setForgeLookAndFeel(); - createMenuBar(); this.shortcuts = KeyboardShortcuts.attachKeyboardShortcuts(); @@ -223,11 +217,6 @@ public enum FControl implements KeyEventDispatcher { manager.addKeyEventDispatcher(this); } - private void setForgeLookAndFeel() { - ForgeLookAndFeel laf = new ForgeLookAndFeel(); - laf.setForgeLookAndFeel(Singletons.getView().getFrame()); - } - private void createMenuBar() { this.menuBar = new FMenuBar(Singletons.getView().getFrame()); this.menuBar.setVisible(MenuUtil.isMenuBarVisible()); diff --git a/src/main/java/forge/gui/CardDetailPanel.java b/src/main/java/forge/gui/CardDetailPanel.java index e8b40eed3d8..f39dcb0964e 100644 --- a/src/main/java/forge/gui/CardDetailPanel.java +++ b/src/main/java/forge/gui/CardDetailPanel.java @@ -91,8 +91,9 @@ public class CardDetailPanel extends FPanel { labelConstrains.weightx = 1.0; final JPanel cdLabels = new JPanel(new GridLayout(0, 1, 0, 5)); - cdLabels.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME)); - cdLabels.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + final FSkin.JComponentSkin cdLabelsSkin = FSkin.get(cdLabels); + cdLabelsSkin.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME)); + cdLabelsSkin.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); this.nameCostLabel = new FLabel.Builder().build(); this.typeLabel = new FLabel.Builder().build(); this.powerToughnessLabel = new FLabel.Builder().build(); @@ -101,8 +102,9 @@ public class CardDetailPanel extends FPanel { cdLabels.add(this.powerToughnessLabel); final JPanel idr = new JPanel(new GridBagLayout()); - idr.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME)); - idr.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + FSkin.JComponentSkin idrSkin = FSkin.get(idr); + idrSkin.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME)); + idrSkin.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); final GridBagConstraints c1 = new GridBagConstraints(); final GridBagConstraints c2 = new GridBagConstraints(); diff --git a/src/main/java/forge/gui/DualListBox.java b/src/main/java/forge/gui/DualListBox.java index 01cad7c9fba..a1efcb3d9e8 100644 --- a/src/main/java/forge/gui/DualListBox.java +++ b/src/main/java/forge/gui/DualListBox.java @@ -77,8 +77,8 @@ public class DualListBox extends FPanel { setPreferredSize(new Dimension(650, 300)); setLayout(new GridLayout(0, 3)); - setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME)); - setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + this.skin.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME)); + this.skin.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); final Runnable onAdd = new Runnable() { @SuppressWarnings("unchecked") diff --git a/src/main/java/forge/gui/FNetOverlay.java b/src/main/java/forge/gui/FNetOverlay.java index f69636e6bfd..91d4c2a37cc 100644 --- a/src/main/java/forge/gui/FNetOverlay.java +++ b/src/main/java/forge/gui/FNetOverlay.java @@ -7,7 +7,6 @@ import java.awt.event.ActionListener; import java.text.SimpleDateFormat; import java.util.Date; -import javax.swing.BorderFactory; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; @@ -68,10 +67,11 @@ public enum FNetOverlay { * Semi-transparent overlay panel. Should be used with layered panes. */ private FNetOverlay() { + FSkin.JComponentSkin pnlSkin = FSkin.get(pnl); pnl.setOpaque(false); pnl.setVisible(false); - pnl.setBackground(FSkin.getColor(FSkin.Colors.CLR_ZEBRA)); - pnl.setBorder(BorderFactory.createLineBorder(FSkin.getColor(FSkin.Colors.CLR_BORDERS))); + pnlSkin.setBackground(FSkin.getColor(FSkin.Colors.CLR_ZEBRA)); + pnlSkin.setLineBorder(FSkin.getColor(FSkin.Colors.CLR_BORDERS)); pnl.setLayout(new MigLayout("insets 0, gap 0, ax center, wrap 2")); // pnl.add(new FLabel.Builder().text("Loading new game...").fontSize(22).build(), "h 40px!, align center"); @@ -80,7 +80,7 @@ public enum FNetOverlay { txtLog.setOpaque(true); txtLog.setFocusable(true); - txtLog.setBackground(FSkin.getColor(FSkin.Colors.CLR_ZEBRA)); + FSkin.get(txtLog).setBackground(FSkin.getColor(FSkin.Colors.CLR_ZEBRA)); JScrollPane _operationLogScroller = new JScrollPane(txtLog); _operationLogScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); @@ -88,7 +88,7 @@ public enum FNetOverlay { new SmartScroller(_operationLogScroller); pnl.add(_operationLogScroller, "pushx, hmin 24, pushy, growy, growx, gap 2px 2px 2px 0, sx 2"); - txtInput.setBorder(BorderFactory.createLineBorder(FSkin.getColor(FSkin.Colors.CLR_BORDERS))); + FSkin.get(txtInput).setLineBorder(FSkin.getColor(FSkin.Colors.CLR_BORDERS)); pnl.add(txtInput, "pushx, growx, h 26px!, gap 2px 2px 2px 0"); pnl.add(cmdSend, "w 60px!, h 28px!, gap 0 0 2px 0"); diff --git a/src/main/java/forge/gui/SOverlayUtils.java b/src/main/java/forge/gui/SOverlayUtils.java index 218ecdb02b8..e9239794890 100644 --- a/src/main/java/forge/gui/SOverlayUtils.java +++ b/src/main/java/forge/gui/SOverlayUtils.java @@ -12,8 +12,6 @@ import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.Timer; -import javax.swing.border.LineBorder; - import net.miginfocom.swing.MigLayout; import forge.Singletons; import forge.gui.match.TargetingOverlay; @@ -44,7 +42,7 @@ public final class SOverlayUtils { // (which is preset with null layout and close button) final FPanel pnl = new FPanel(); pnl.setLayout(new MigLayout("insets 0, gap 0, ax center, wrap")); - pnl.setBackground(FSkin.getColor(FSkin.Colors.CLR_ACTIVE)); + FSkin.get(pnl).setBackground(FSkin.getColor(FSkin.Colors.CLR_ACTIVE)); pnl.setBounds(new Rectangle(((w - pnlW) / 2), ((h - pnlH) / 2), pnlW, pnlH)); pnl.add(new FLabel.Builder().icon(FSkin.getIcon(FSkin.InterfaceIcons.ICO_LOGO)).build(), @@ -70,7 +68,7 @@ public final class SOverlayUtils { final JLabel lblLoading = new JLabel(""); lblLoading.setOpaque(true); - lblLoading.setBackground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + FSkin.get(lblLoading).setBackground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); lblLoading.setMinimumSize(new Dimension(0, 20)); pnlLoading.setBounds(((w - 170) / 2), ((h - 80) / 2), 170, 80); @@ -104,9 +102,10 @@ public final class SOverlayUtils { final int w = overlay.getWidth(); final JButton btnCloseTopRight = new JButton("X"); + final FSkin.JComponentSkin btnCloseTopRightSkin = FSkin.get(btnCloseTopRight); btnCloseTopRight.setBounds(w - 25, 10, 15, 15); - btnCloseTopRight.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); - btnCloseTopRight.setBorder(new LineBorder(FSkin.getColor(FSkin.Colors.CLR_TEXT), 1)); + btnCloseTopRightSkin.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + btnCloseTopRightSkin.setLineBorder(FSkin.getColor(FSkin.Colors.CLR_TEXT)); btnCloseTopRight.setOpaque(false); btnCloseTopRight.setBackground(new Color(0, 0, 0)); btnCloseTopRight.setFocusPainted(false); diff --git a/src/main/java/forge/gui/deckeditor/CDeckEditorUI.java b/src/main/java/forge/gui/deckeditor/CDeckEditorUI.java index 9a86a026f8b..e8e2d78b9f4 100644 --- a/src/main/java/forge/gui/deckeditor/CDeckEditorUI.java +++ b/src/main/java/forge/gui/deckeditor/CDeckEditorUI.java @@ -439,7 +439,12 @@ public enum CDeckEditorUI implements ICDoc, IMenuProvider { // show a popup with the current search string, highlighted in red if not found popupLabel.setText(searchStr + " (hit Enter for next match, Esc to cancel)"); - popupLabel.setForeground(found ? FSkin.getColor(FSkin.Colors.CLR_TEXT) : new Color(255, 0, 0)); + if (found) { + FSkin.get(popupLabel).setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + } + else { + FSkin.get(popupLabel).setForeground(new Color(255, 0, 0)); + } if (popupShowing) { _setPopupSize(); @@ -448,7 +453,7 @@ public enum CDeckEditorUI implements ICDoc, IMenuProvider { PopupFactory factory = PopupFactory.getSharedInstance(); Point tableLoc = tableView.getTable().getTableHeader().getLocationOnScreen(); popup = factory.getPopup(null, popupLabel, tableLoc.x + 10, tableLoc.y + 10); - SwingUtilities.getRoot(popupLabel).setBackground(FSkin.getColor(FSkin.Colors.CLR_INACTIVE)); + FSkin.get(SwingUtilities.getRoot(popupLabel)).setBackground(FSkin.getColor(FSkin.Colors.CLR_INACTIVE)); popupTimer = new Timer(5000, new ActionListener() { @Override diff --git a/src/main/java/forge/gui/deckeditor/views/VCardCatalog.java b/src/main/java/forge/gui/deckeditor/views/VCardCatalog.java index a8c17e7f16f..3e88b1917fd 100644 --- a/src/main/java/forge/gui/deckeditor/views/VCardCatalog.java +++ b/src/main/java/forge/gui/deckeditor/views/VCardCatalog.java @@ -6,7 +6,6 @@ import java.awt.FlowLayout; import java.util.HashMap; import java.util.Map; -import javax.swing.BorderFactory; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JPanel; @@ -264,7 +263,7 @@ public enum VCardCatalog implements IVDoc { final JPanel pnl = new JPanel(new MigLayout("insets 2, gap 2, h 30!")); pnl.setOpaque(false); - pnl.setBorder(BorderFactory.createMatteBorder(1, 2, 1, 2, FSkin.getColor(FSkin.Colors.CLR_TEXT))); + FSkin.get(pnl).setMatteBorder(1, 2, 1, 2, FSkin.getColor(FSkin.Colors.CLR_TEXT)); pnl.add(component, "h 30!, center"); pnl.add(new FLabel.Builder().text("X").fontSize(10).hoverable(true) diff --git a/src/main/java/forge/gui/deckeditor/views/VEditorPreferences.java b/src/main/java/forge/gui/deckeditor/views/VEditorPreferences.java index b6390d58c88..d674a40ac8f 100644 --- a/src/main/java/forge/gui/deckeditor/views/VEditorPreferences.java +++ b/src/main/java/forge/gui/deckeditor/views/VEditorPreferences.java @@ -4,8 +4,6 @@ import javax.swing.JCheckBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; -import javax.swing.border.MatteBorder; - import net.miginfocom.swing.MigLayout; import forge.gui.deckeditor.controllers.CEditorPreferences; import forge.gui.framework.DragCell; @@ -74,10 +72,10 @@ public enum VEditorPreferences implements IVDoc { //========== Constructor private VEditorPreferences() { - lblStats.setBorder(new MatteBorder(0, 0, 1, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS))); - lblCatalog.setBorder(new MatteBorder(0, 0, 1, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS))); - lblDeck.setBorder(new MatteBorder(0, 0, 1, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS))); - lblDisplay.setBorder(new MatteBorder(0, 0, 1, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS))); + FSkin.get(lblStats).setMatteBorder(0, 0, 1, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS)); + FSkin.get(lblCatalog).setMatteBorder(0, 0, 1, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS)); + FSkin.get(lblDeck).setMatteBorder(0, 0, 1, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS)); + FSkin.get(lblDisplay).setMatteBorder(0, 0, 1, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS)); chbCatalogColor.setFont(FSkin.getFont(12)); chbCatalogRarity.setFont(FSkin.getFont(12)); diff --git a/src/main/java/forge/gui/deckeditor/views/VProbabilities.java b/src/main/java/forge/gui/deckeditor/views/VProbabilities.java index f51470a8afa..55e518ac91c 100644 --- a/src/main/java/forge/gui/deckeditor/views/VProbabilities.java +++ b/src/main/java/forge/gui/deckeditor/views/VProbabilities.java @@ -9,8 +9,6 @@ import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.SwingConstants; -import javax.swing.border.MatteBorder; - import net.miginfocom.swing.MigLayout; import forge.deck.DeckBase; import forge.gui.deckeditor.CDeckEditorUI; @@ -66,10 +64,13 @@ public enum VProbabilities implements IVDoc { scroller.getViewport().setBorder(null); scroller.getVerticalScrollBar().setUnitIncrement(16); - lblSampleHand.setBorder(new MatteBorder(1, 0, 1, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS))); - lblSampleHand.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); - lblRemainingDraws.setBorder(new MatteBorder(1, 0, 1, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS))); - lblRemainingDraws.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + FSkin.JComponentSkin labelSkin = FSkin.get(lblSampleHand); + labelSkin.setMatteBorder(1, 0, 1, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS)); + labelSkin.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + + labelSkin = FSkin.get(lblRemainingDraws); + labelSkin.setMatteBorder(1, 0, 1, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS)); + labelSkin.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); // Core layout pnlContent.add(lblReshuffle, "w 96%!, h 29px!, gap 2% 0 5px 5px"); @@ -188,7 +189,7 @@ public enum VProbabilities implements IVDoc { if (zebra) { lbl.setOpaque(true); - lbl.setBackground(FSkin.getColor(FSkin.Colors.CLR_ZEBRA)); + FSkin.get(lbl).setBackground(FSkin.getColor(FSkin.Colors.CLR_ZEBRA)); } return lbl; diff --git a/src/main/java/forge/gui/deckeditor/views/VStatistics.java b/src/main/java/forge/gui/deckeditor/views/VStatistics.java index 5f3c2f0652a..b850b134afe 100644 --- a/src/main/java/forge/gui/deckeditor/views/VStatistics.java +++ b/src/main/java/forge/gui/deckeditor/views/VStatistics.java @@ -258,7 +258,7 @@ public enum VStatistics implements IVDoc { if (zebra) { lbl.setOpaque(true); - lbl.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + FSkin.get(lbl).setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); } return lbl; diff --git a/src/main/java/forge/gui/download/GuiDownloader.java b/src/main/java/forge/gui/download/GuiDownloader.java index 2ce359fcd83..b8d3d7d35a0 100644 --- a/src/main/java/forge/gui/download/GuiDownloader.java +++ b/src/main/java/forge/gui/download/GuiDownloader.java @@ -44,7 +44,6 @@ import javax.swing.JTextField; import javax.swing.SwingConstants; import javax.swing.SwingUtilities; import javax.swing.SwingWorker; -import javax.swing.border.LineBorder; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; @@ -130,7 +129,7 @@ public abstract class GuiDownloader extends DefaultBoundedRangeModel implements radProxySocks.addChangeListener(new ProxyHandler(2)); radProxyNone.setSelected(true); - btnClose.setBorder(new LineBorder(FSkin.getColor(FSkin.Colors.CLR_TEXT), 1)); + FSkin.get(btnClose).setLineBorder(FSkin.getColor(FSkin.Colors.CLR_TEXT)); btnStart.setFont(FSkin.getFont(18)); btnStart.setVisible(false); diff --git a/src/main/java/forge/gui/framework/DragTab.java b/src/main/java/forge/gui/framework/DragTab.java index 6ca416becf7..d82b939e98a 100644 --- a/src/main/java/forge/gui/framework/DragTab.java +++ b/src/main/java/forge/gui/framework/DragTab.java @@ -15,6 +15,7 @@ import forge.gui.toolbox.FSkin; */ @SuppressWarnings("serial") public final class DragTab extends JLabel implements ILocalRepaint { + private final FSkin.JComponentSkin skin; private boolean selected = false; private int priority = 10; @@ -27,11 +28,12 @@ public final class DragTab extends JLabel implements ILocalRepaint { */ public DragTab(final String title0) { super(title0); + skin = FSkin.get(this); setToolTipText(title0); setOpaque(false); setSelected(false); setBorder(new EmptyBorder(2, 5, 2, 5)); - setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + skin.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); this.addMouseListener(SRearrangingUtil.getRearrangeClickEvent()); this.addMouseMotionListener(SRearrangingUtil.getRearrangeDragEvent()); @@ -76,15 +78,15 @@ public final class DragTab extends JLabel implements ILocalRepaint { @Override public void paintComponent(final Graphics g) { if (!selected) { - g.setColor(FSkin.getColor(FSkin.Colors.CLR_INACTIVE)); + skin.setGraphicsColor(g, FSkin.getColor(FSkin.Colors.CLR_INACTIVE)); g.fillRoundRect(0, 0, getWidth() - 1, getHeight() * 2, 6, 6); - g.setColor(FSkin.getColor(FSkin.Colors.CLR_BORDERS)); + skin.setGraphicsColor(g, FSkin.getColor(FSkin.Colors.CLR_BORDERS)); g.drawRoundRect(0, 0, getWidth() - 1, getHeight() * 2, 6, 6); } else { - g.setColor(FSkin.getColor(FSkin.Colors.CLR_ACTIVE)); + skin.setGraphicsColor(g, FSkin.getColor(FSkin.Colors.CLR_ACTIVE)); g.fillRoundRect(0, 0, getWidth() - 1, getHeight() * 2, 6, 6); - g.setColor(FSkin.getColor(FSkin.Colors.CLR_BORDERS)); + skin.setGraphicsColor(g, FSkin.getColor(FSkin.Colors.CLR_BORDERS)); g.drawRoundRect(0, 0, getWidth() - 1, getHeight() * 2, 6, 6); } diff --git a/src/main/java/forge/gui/home/LblGroup.java b/src/main/java/forge/gui/home/LblGroup.java index dbe21cb5699..63eb90dd828 100644 --- a/src/main/java/forge/gui/home/LblGroup.java +++ b/src/main/java/forge/gui/home/LblGroup.java @@ -1,9 +1,7 @@ package forge.gui.home; -import java.awt.Color; import java.awt.Component; import java.awt.Dimension; -import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.MouseAdapter; @@ -14,6 +12,8 @@ import javax.swing.JLabel; import forge.Singletons; import forge.gui.framework.ILocalRepaint; import forge.gui.toolbox.FSkin; +import forge.gui.toolbox.FSkin.JComponentSkin; +import forge.gui.toolbox.FSkin.SkinColor; import forge.properties.ForgePreferences.FPref; /** @@ -28,12 +28,13 @@ public class LblGroup extends JLabel implements ILocalRepaint { private boolean hovered = false; - private final Color clrTheme = FSkin.getColor(FSkin.Colors.CLR_THEME); - private final Color l20 = FSkin.stepColor(clrTheme, 20); - private final Color l25 = FSkin.stepColor(clrTheme, 25); - private final Color l40 = FSkin.stepColor(clrTheme, 40); - private final Color d20 = FSkin.stepColor(clrTheme, -20); - private final Color d80 = FSkin.stepColor(clrTheme, -80); + private final JComponentSkin skin; + private final SkinColor clrTheme = FSkin.getColor(FSkin.Colors.CLR_THEME); + private final SkinColor l20 = clrTheme.stepColor(20); + private final SkinColor l25 = clrTheme.stepColor(25); + private final SkinColor l40 = clrTheme.stepColor(40); + private final SkinColor d20 = clrTheme.stepColor(-20); + private final SkinColor d80 = clrTheme.stepColor(-80); /** * Custom JLabel for title of menu item groups. @@ -44,9 +45,10 @@ public class LblGroup extends JLabel implements ILocalRepaint { public LblGroup(final EMenuGroup e0) { super(" " + e0.getTitle()); - + + skin = FSkin.get(this); this.setFont(FSkin.getBoldFont(14)); - this.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + skin.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); this.addMouseListener(new MouseAdapter() { @Override @@ -128,16 +130,15 @@ public class LblGroup extends JLabel implements ILocalRepaint { int w = getWidth(); int h = getHeight(); - g.setColor(l20); + skin.setGraphicsColor(g, l20); g.fillRect(0, 0, getWidth(), getHeight()); - GradientPaint edge = new GradientPaint(w - 10, 0, l25, w, 0, d80, false); - g2d.setPaint(edge); + skin.setGraphicsGradientPaint(g2d, w - 10, 0, l25, w, 0, d80); g2d.fillRect(w - 10, 0, w, h); - g2d.setColor(l40); + skin.setGraphicsColor(g, l40); g2d.drawLine(0, 0, w - 6, 0); - g2d.setColor(d20); + skin.setGraphicsColor(g, d20); g2d.drawLine(0, h - 1, w - 6, h - 1); } diff --git a/src/main/java/forge/gui/home/LblHeader.java b/src/main/java/forge/gui/home/LblHeader.java index 74198272004..596ea8231f8 100644 --- a/src/main/java/forge/gui/home/LblHeader.java +++ b/src/main/java/forge/gui/home/LblHeader.java @@ -1,6 +1,5 @@ package forge.gui.home; -import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; @@ -8,16 +7,19 @@ import javax.swing.JLabel; import javax.swing.border.EmptyBorder; import forge.gui.toolbox.FSkin; +import forge.gui.toolbox.FSkin.JComponentSkin; +import forge.gui.toolbox.FSkin.SkinColor; /** * Standardized header label for top of menu display panel. */ @SuppressWarnings("serial") public class LblHeader extends JLabel { - private final Color clr = FSkin.stepColor(FSkin.getColor(FSkin.Colors.CLR_THEME), 0); - private final Color a100 = FSkin.alphaColor(clr, 100); - private final Color d40 = FSkin.stepColor(clr, -40); - private final Color d80 = FSkin.stepColor(clr, -80); + private final JComponentSkin skin; + private final SkinColor clr = FSkin.getColor(FSkin.Colors.CLR_THEME).stepColor(0); + private final SkinColor a100 = clr.alphaColor(100); + private final SkinColor d40 = clr.stepColor(-40); + private final SkinColor d80 = clr.stepColor(-80); /** * Constructor. @@ -25,7 +27,8 @@ public class LblHeader extends JLabel { */ public LblHeader(final String txt0) { super(txt0); - this.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + skin = FSkin.get(this); + skin.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); this.setFont(FSkin.getFont(18)); this.setBorder(new EmptyBorder(5, 30, 0, 0)); } @@ -36,13 +39,13 @@ public class LblHeader extends JLabel { int w = getWidth(); int h = getHeight(); - g2d.setColor(d80); + skin.setGraphicsColor(g2d, d80); g2d.fillRect(0, 5, w, h - 5); - g2d.setColor(a100); + skin.setGraphicsColor(g2d, a100); g2d.fillRect(5, 0, w - 5, h - 5); - g2d.setColor(d40); + skin.setGraphicsColor(g2d, d40); g2d.drawRect(5, 0, w - 6, h - 6); super.paintComponent(g); diff --git a/src/main/java/forge/gui/home/LblMenuItem.java b/src/main/java/forge/gui/home/LblMenuItem.java index f9e380ea61a..79b55a1b62f 100644 --- a/src/main/java/forge/gui/home/LblMenuItem.java +++ b/src/main/java/forge/gui/home/LblMenuItem.java @@ -1,8 +1,6 @@ package forge.gui.home; -import java.awt.Color; import java.awt.Dimension; -import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.MouseAdapter; @@ -13,6 +11,8 @@ import javax.swing.JLabel; import forge.gui.framework.ICDoc; import forge.gui.framework.ILocalRepaint; import forge.gui.toolbox.FSkin; +import forge.gui.toolbox.FSkin.JComponentSkin; +import forge.gui.toolbox.FSkin.SkinColor; /** * Custom JLabel for an item in the menu. Handles listening @@ -24,14 +24,14 @@ public class LblMenuItem extends JLabel implements ILocalRepaint { private boolean selected = false; private boolean hovered = false; - private final Color clrTheme = FSkin.getColor(FSkin.Colors.CLR_THEME); - private final Color l00 = FSkin.stepColor(clrTheme, 0); - private final Color l20 = FSkin.stepColor(clrTheme, 20); - private final Color d20 = FSkin.stepColor(clrTheme, -20); - private final Color d60 = FSkin.stepColor(clrTheme, -60); - private final Color d80 = FSkin.stepColor(clrTheme, -80); - - private final GradientPaint edge = new GradientPaint(200 - 8, 0, l00, 200, 0, d80, false); + private final JComponentSkin skin; + private final SkinColor clrTheme = FSkin.getColor(FSkin.Colors.CLR_THEME); + private final SkinColor l00 = clrTheme.stepColor(0); + private final SkinColor l20 = clrTheme.stepColor(20); + private final SkinColor d20 = clrTheme.stepColor(-20); + private final SkinColor d60 = clrTheme.stepColor(-60); + private final SkinColor d80 = clrTheme.stepColor(-80); + private final SkinColor alpha100 = l00.alphaColor(100); /** * Custom JLabel for an item in the menu. Handles listening @@ -41,8 +41,10 @@ public class LblMenuItem extends JLabel implements ILocalRepaint { */ public LblMenuItem(final IVSubmenu doc0) { super(" " + doc0.getMenuTitle()); + + skin = FSkin.get(this); this.setFont(FSkin.getFont(14)); - this.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + FSkin.get(this).setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); this.addMouseListener(new MouseAdapter() { @Override @@ -82,23 +84,23 @@ public class LblMenuItem extends JLabel implements ILocalRepaint { int h = getHeight(); if (this.selected) { - g2d.setColor(FSkin.alphaColor(l00, 100)); + skin.setGraphicsColor(g2d, alpha100); g2d.fillRect(0, 0, w, h); - g2d.setColor(d20); + skin.setGraphicsColor(g2d, d20); g2d.drawLine(0, 0, w - 3, 0); - g2d.setColor(l20); + skin.setGraphicsColor(g2d, l20); g2d.drawLine(0, h - 1, w - 3, h - 1); } else if (this.hovered) { - g2d.setColor(d60); + skin.setGraphicsColor(g2d, d60); g2d.fillRect(0, 0, getWidth(), h); - g2d.setPaint(edge); + skin.setGraphicsGradientPaint(g2d, 200 - 8, 0, l00, 200, 0, d80); g2d.fillRect(w - 2, 0, w, h); - g2d.setColor(d20); + skin.setGraphicsColor(g2d, d20); g2d.drawLine(0, 0, w - 3, 0); - g2d.setColor(l20); + skin.setGraphicsColor(g2d, l20); g2d.drawLine(0, h - 1, w - 3, h - 1); } diff --git a/src/main/java/forge/gui/home/PnlGroup.java b/src/main/java/forge/gui/home/PnlGroup.java index c6f913e486a..b3ff239460d 100644 --- a/src/main/java/forge/gui/home/PnlGroup.java +++ b/src/main/java/forge/gui/home/PnlGroup.java @@ -1,7 +1,5 @@ package forge.gui.home; -import java.awt.Color; -import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; @@ -10,6 +8,8 @@ import javax.swing.JPanel; import net.miginfocom.swing.MigLayout; import forge.gui.toolbox.FSkin; +import forge.gui.toolbox.FSkin.JComponentSkin; +import forge.gui.toolbox.FSkin.SkinColor; /** * Custom JPanel for containing LblMenuItem components. @@ -17,20 +17,22 @@ import forge.gui.toolbox.FSkin; */ @SuppressWarnings("serial") public class PnlGroup extends JPanel { - private final Color clrTheme = FSkin.getColor(FSkin.Colors.CLR_THEME); - private final Color l00 = FSkin.stepColor(clrTheme, 0); - private final Color l10 = FSkin.stepColor(clrTheme, 10); - private final Color d20 = FSkin.stepColor(clrTheme, -20); - private final Color d60 = FSkin.stepColor(clrTheme, -60); - private final Color d80 = FSkin.stepColor(clrTheme, -80); + private final JComponentSkin skin; + private final SkinColor clrTheme = FSkin.getColor(FSkin.Colors.CLR_THEME); + private final SkinColor l00 = clrTheme.stepColor(0); + private final SkinColor l10 = clrTheme.stepColor(10); + private final SkinColor d20 = clrTheme.stepColor(-20); + private final SkinColor d60 = clrTheme.stepColor(-60); + private final SkinColor d80 = clrTheme.stepColor(-80); /** * Custom JPanel for containing LblMenuItem components. * Mostly just handles repainting. */ public PnlGroup() { + this.skin = FSkin.get(this); this.setLayout(new MigLayout("insets 10px 0 10px 0, gap 0, wrap")); - this.setBackground(d20); + this.skin.setBackground(d20); this.setOpaque(false); } @@ -44,15 +46,14 @@ public class PnlGroup extends JPanel { final int w = getWidth(); final int h = getHeight(); - g2d.setColor(d20); + skin.setGraphicsColor(g2d, d20); // Selected in this group, don't draw background under selected label. if (getY() < yTop && yTop < getY() + h) { g2d.fillRect(0, 0, w, lbl.getY()); g2d.fillRect(0, lbl.getY() + lbl.getHeight(), w, h); - GradientPaint edge = new GradientPaint(w - 8, 0, l00, w, 0, d80, false); - g2d.setPaint(edge); + skin.setGraphicsGradientPaint(g2d, w - 8, 0, l00, w, 0, d80); g2d.fillRect(w - 6, 0, w, lbl.getY()); g2d.fillRect(w - 6, lbl.getY() + lbl.getHeight(), w, h); } @@ -60,15 +61,14 @@ public class PnlGroup extends JPanel { else { g2d.fillRect(0, 0, w, h); - GradientPaint edge = new GradientPaint(w - 8, 0, l00, w, 0, d80, false); - g2d.setPaint(edge); + skin.setGraphicsGradientPaint(g2d, w - 8, 0, l00, w, 0, d80); g2d.fillRect(w - 6, 0, w, h); } - g2d.setColor(l10); + skin.setGraphicsColor(g2d, l10); g2d.drawLine(0, h - 1, w - 1, h - 1); - g2d.setColor(d60); + skin.setGraphicsColor(g2d, d60); g2d.drawLine(0, 0, w - 1, 0); g2d.dispose(); diff --git a/src/main/java/forge/gui/home/VHomeUI.java b/src/main/java/forge/gui/home/VHomeUI.java index 28b0c72e011..953228c7832 100644 --- a/src/main/java/forge/gui/home/VHomeUI.java +++ b/src/main/java/forge/gui/home/VHomeUI.java @@ -17,9 +17,7 @@ */ package forge.gui.home; -import java.awt.Color; import java.awt.Dimension; -import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.util.ArrayList; @@ -33,6 +31,7 @@ import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.ScrollPaneConstants; import javax.swing.SwingConstants; + import net.miginfocom.swing.MigLayout; import forge.Singletons; import forge.gui.framework.EDocID; @@ -61,6 +60,8 @@ import forge.gui.home.variant.VSubmenuVanguard; import forge.gui.toolbox.FLabel; import forge.gui.toolbox.FScrollPanel; import forge.gui.toolbox.FSkin; +import forge.gui.toolbox.FSkin.JComponentSkin; +import forge.gui.toolbox.FSkin.SkinColor; import forge.properties.NewConstants; import forge.properties.ForgePreferences.FPref; import forge.view.FView; @@ -77,8 +78,8 @@ public enum VHomeUI implements IVTopLevelUI { /** */ SINGLETON_INSTANCE; - private final Color clrTheme = FSkin.getColor(FSkin.Colors.CLR_THEME); - private final Color l00 = FSkin.stepColor(clrTheme, 0); + private final SkinColor clrTheme = FSkin.getColor(FSkin.Colors.CLR_THEME); + private final SkinColor l00 = clrTheme.stepColor(0); private final List> allSubmenus = new ArrayList>(); private final Map allSubmenuLabels = new HashMap(); @@ -188,7 +189,7 @@ public enum VHomeUI implements IVTopLevelUI { } pnlMenu.add(pnlSubmenus, "w 100%!, h 100% - " + pnlMainMenuHeight + "px!"); - pnlDisplay.setBackground(FSkin.alphaColor(l00, 100)); + FSkin.get(pnlDisplay).setBackground(l00.alphaColor(100)); } /** @return {@link forge.gui.toolbox.ExperimentalLabel} */ @@ -279,9 +280,11 @@ public enum VHomeUI implements IVTopLevelUI { } private class PnlMenu extends JPanel { - private final Color d80 = FSkin.stepColor(clrTheme, -80); + private final JComponentSkin skin; + private final SkinColor d80 = clrTheme.stepColor(-80); public PnlMenu() { + this.skin = FSkin.get(this); this.setLayout(new MigLayout("insets 0, gap 0, wrap, hidemode 3")); this.setOpaque(false); } @@ -313,15 +316,14 @@ public enum VHomeUI implements IVTopLevelUI { } } - g2d.setColor(l00); + skin.setGraphicsColor(g2d, l00); g2d.fillRect(0, y1, w, h1); if (h2 > 0) { g2d.fillRect(0, y2, w, h2); } int x = w - 8; - GradientPaint edge = new GradientPaint(x, 0, l00, w, 0, d80, false); - g2d.setPaint(edge); + skin.setGraphicsGradientPaint(g2d, x, 0, l00, w, 0, d80); g2d.fillRect(x, y1, w, h1); if (h2 > 0) { g2d.fillRect(x, y2, w, h2); diff --git a/src/main/java/forge/gui/home/gauntlet/ContestGauntletLister.java b/src/main/java/forge/gui/home/gauntlet/ContestGauntletLister.java index f3847933ff9..ea8bd587cf8 100644 --- a/src/main/java/forge/gui/home/gauntlet/ContestGauntletLister.java +++ b/src/main/java/forge/gui/home/gauntlet/ContestGauntletLister.java @@ -12,8 +12,6 @@ import java.util.List; import javax.swing.JPanel; import javax.swing.SwingConstants; -import javax.swing.border.MatteBorder; - import net.miginfocom.swing.MigLayout; import forge.Command; import forge.gauntlet.GauntletData; @@ -30,7 +28,8 @@ public class ContestGauntletLister extends JPanel { private RowPanel previousSelect; private RowPanel[] rows; private Command cmdRowSelect; - private final Color clrDefault, clrHover, clrActive, clrBorders; + private final Color clrDefault; + private final FSkin.SkinColor clrHover, clrActive, clrBorders; /** */ public ContestGauntletLister() { @@ -61,7 +60,7 @@ public class ContestGauntletLister extends JPanel { // Note: careful with the widths of the rows here; // scroll panes will have difficulty dynamically resizing if 100% width is set. final JPanel rowTitle = new JPanel(); - rowTitle.setBackground(FSkin.getColor(FSkin.Colors.CLR_ZEBRA)); + FSkin.get(rowTitle).setBackground(FSkin.getColor(FSkin.Colors.CLR_ZEBRA)); rowTitle.setLayout(new MigLayout("insets 0, gap 0")); rowTitle.add(new FLabel.Builder().build(), "w 30px!, h 20px!, gap 1% 0 5px 0"); @@ -129,21 +128,21 @@ public class ContestGauntletLister extends JPanel { setOpaque(false); setBackground(new Color(0, 0, 0, 0)); setLayout(new MigLayout("insets 0, gap 0")); - setBorder(new MatteBorder(0, 0, 1, 0, clrBorders)); + FSkin.get(this).setMatteBorder(0, 0, 1, 0, clrBorders); gauntletData = gd0; this.addMouseListener(new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { if (!selected) { - ((RowPanel) e.getSource()).setBackground(clrHover); + FSkin.get(((RowPanel) e.getSource())).setBackground(clrHover); ((RowPanel) e.getSource()).setOpaque(true); } } @Override public void mouseExited(MouseEvent e) { if (!selected) { - ((RowPanel) e.getSource()).setBackground(clrDefault); + FSkin.get(((RowPanel) e.getSource())).setBackground(clrDefault); ((RowPanel) e.getSource()).setOpaque(false); } } @@ -157,7 +156,7 @@ public class ContestGauntletLister extends JPanel { public void setSelected(boolean b0) { selected = b0; setOpaque(b0); - setBackground(b0 ? clrActive : clrHover); + FSkin.get(this).setBackground(b0 ? clrActive : clrHover); } public boolean isSelected() { diff --git a/src/main/java/forge/gui/home/gauntlet/QuickGauntletLister.java b/src/main/java/forge/gui/home/gauntlet/QuickGauntletLister.java index c4cfcc3684f..8f055514dc2 100644 --- a/src/main/java/forge/gui/home/gauntlet/QuickGauntletLister.java +++ b/src/main/java/forge/gui/home/gauntlet/QuickGauntletLister.java @@ -16,8 +16,6 @@ import javax.swing.JButton; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.SwingConstants; -import javax.swing.border.MatteBorder; - import net.miginfocom.swing.MigLayout; import forge.Command; import forge.gauntlet.GauntletData; @@ -35,7 +33,8 @@ public class QuickGauntletLister extends JPanel { private RowPanel previousSelect; private RowPanel[] rows; private Command cmdRowSelect, cmdRowDelete; - private final Color clrDefault, clrHover, clrActive, clrBorders; + private final Color clrDefault; + private final FSkin.SkinColor clrHover, clrActive, clrBorders; /** */ public QuickGauntletLister() { @@ -70,7 +69,7 @@ public class QuickGauntletLister extends JPanel { // Note: careful with the widths of the rows here; // scroll panes will have difficulty dynamically resizing if 100% width is set. final JPanel rowTitle = new JPanel(); - rowTitle.setBackground(FSkin.getColor(FSkin.Colors.CLR_ZEBRA)); + FSkin.get(rowTitle).setBackground(FSkin.getColor(FSkin.Colors.CLR_ZEBRA)); rowTitle.setLayout(new MigLayout("insets 0, gap 0")); rowTitle.add(new FLabel.Builder().build(), "w 30px!, h 20px!, gap 1% 0 5px 0"); @@ -140,14 +139,14 @@ public class QuickGauntletLister extends JPanel { @Override public void mouseEntered(MouseEvent e) { if (!r0.selected) { - r0.setBackground(clrHover); + FSkin.get(r0).setBackground(clrHover); r0.setOpaque(true); } } @Override public void mouseExited(MouseEvent e) { if (!r0.selected) { - r0.setBackground(clrDefault); + FSkin.get(r0).setBackground(clrDefault); r0.setOpaque(false); } } @@ -168,21 +167,21 @@ public class QuickGauntletLister extends JPanel { setOpaque(false); setBackground(new Color(0, 0, 0, 0)); setLayout(new MigLayout("insets 0, gap 0")); - setBorder(new MatteBorder(0, 0, 1, 0, clrBorders)); + FSkin.get(this).setMatteBorder(0, 0, 1, 0, clrBorders); gauntletData = gd0; this.addMouseListener(new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { if (!selected) { - ((RowPanel) e.getSource()).setBackground(clrHover); + FSkin.get(((RowPanel) e.getSource())).setBackground(clrHover); ((RowPanel) e.getSource()).setOpaque(true); } } @Override public void mouseExited(MouseEvent e) { if (!selected) { - ((RowPanel) e.getSource()).setBackground(clrDefault); + FSkin.get(((RowPanel) e.getSource())).setBackground(clrDefault); ((RowPanel) e.getSource()).setOpaque(false); } } @@ -196,7 +195,7 @@ public class QuickGauntletLister extends JPanel { public void setSelected(boolean b0) { selected = b0; setOpaque(b0); - setBackground(b0 ? clrActive : clrHover); + FSkin.get(this).setBackground(b0 ? clrActive : clrHover); } public boolean isSelected() { diff --git a/src/main/java/forge/gui/home/gauntlet/VSubmenuGauntletBuild.java b/src/main/java/forge/gui/home/gauntlet/VSubmenuGauntletBuild.java index ea8eba3ed23..b1c54cbd081 100644 --- a/src/main/java/forge/gui/home/gauntlet/VSubmenuGauntletBuild.java +++ b/src/main/java/forge/gui/home/gauntlet/VSubmenuGauntletBuild.java @@ -116,7 +116,7 @@ public enum VSubmenuGauntletBuild implements IVSubmenu { .text(" ").hoverable(true).build(); private VSubmenuGauntletBuild() { - lblTitle.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + FSkin.get(lblTitle).setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); // File handling panel diff --git a/src/main/java/forge/gui/home/gauntlet/VSubmenuGauntletContests.java b/src/main/java/forge/gui/home/gauntlet/VSubmenuGauntletContests.java index 14a4bb54536..0d6e0fdfc57 100644 --- a/src/main/java/forge/gui/home/gauntlet/VSubmenuGauntletContests.java +++ b/src/main/java/forge/gui/home/gauntlet/VSubmenuGauntletContests.java @@ -59,11 +59,11 @@ public enum VSubmenuGauntletContests implements IVSubmenu { private final StartButton btnStart = new StartButton(); private VSubmenuGauntletLoad() { - lblTitle.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + FSkin.get(lblTitle).setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); scrLoad.setBorder(null); } diff --git a/src/main/java/forge/gui/home/gauntlet/VSubmenuGauntletQuick.java b/src/main/java/forge/gui/home/gauntlet/VSubmenuGauntletQuick.java index 24f99d97b35..bdb0c05c93e 100644 --- a/src/main/java/forge/gui/home/gauntlet/VSubmenuGauntletQuick.java +++ b/src/main/java/forge/gui/home/gauntlet/VSubmenuGauntletQuick.java @@ -81,7 +81,7 @@ public enum VSubmenuGauntletQuick implements IVSubmenu { private final StartButton btnStart = new StartButton(); private VSubmenuGauntletQuick() { - lblTitle.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + FSkin.get(lblTitle).setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); boxUserDecks.setSelected(true); boxQuestDecks.setSelected(true); @@ -95,7 +95,7 @@ public enum VSubmenuGauntletQuick implements IVSubmenu { sliOpponents.setPaintLabels(true); sliOpponents.setSnapToTicks(true); sliOpponents.setOpaque(false); - sliOpponents.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + FSkin.get(sliOpponents).setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); sliOpponents.setFont(FSkin.getFont(12)); @@ -104,7 +104,7 @@ public enum VSubmenuGauntletQuick implements IVSubmenu { scrLoad.getViewport().setOpaque(false); scrLoad.setBorder(null); - pnlOptions.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + FSkin.get(pnlOptions).setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); pnlOptions.add(lblOptions, "h 30px!, w 96%!, gap 2% 0 0 5px"); pnlOptions.add(sliOpponents, "h 40px!, w 96%!, gap 2% 0 0 5px, ax center"); pnlOptions.add(lblDesc1, "w 96%!, gap 2% 0 0 20px"); diff --git a/src/main/java/forge/gui/home/quest/PnlEvent.java b/src/main/java/forge/gui/home/quest/PnlEvent.java index e8b61021ffe..04ef0ee818a 100644 --- a/src/main/java/forge/gui/home/quest/PnlEvent.java +++ b/src/main/java/forge/gui/home/quest/PnlEvent.java @@ -17,6 +17,8 @@ import net.miginfocom.swing.MigLayout; import forge.ImageCache; import forge.gui.toolbox.FRadioButton; import forge.gui.toolbox.FSkin; +import forge.gui.toolbox.FSkin.JComponentSkin; +import forge.gui.toolbox.FSkin.SkinColor; import forge.gui.toolbox.FTextArea; import forge.quest.QuestEvent; @@ -36,9 +38,10 @@ class PnlEvent extends JPanel { private final int hImg = 100; private final int hRfl = 20; + private final JComponentSkin skin; private final Color clr1 = new Color(255, 0, 255, 100); private final Color clr2 = new Color(255, 255, 0, 0); - private final Color clr3 = FSkin.alphaColor(FSkin.getColor(FSkin.Colors.CLR_THEME2), 200); + private final SkinColor clr3 = FSkin.getColor(FSkin.Colors.CLR_THEME2).alphaColor(200); /** * Panels for displaying duels and challenges.
@@ -49,6 +52,7 @@ class PnlEvent extends JPanel { */ public PnlEvent(final QuestEvent e0) { super(); + this.skin = FSkin.get(this); this.event = e0; img = ImageCache.getIcon(e0).getImage(); @@ -93,7 +97,7 @@ class PnlEvent extends JPanel { @Override public void paintComponent(final Graphics g) { Graphics2D g2d = (Graphics2D) g.create(); - g2d.setPaint(new GradientPaint(0, 0, clr3, getWidth(), 0, clr2)); + skin.setGraphicsGradientPaint(g2d, 0, 0, clr3, getWidth(), 0, clr2); g2d.fillRect(0, 0, getWidth(), getHeight()); // Padding here diff --git a/src/main/java/forge/gui/home/quest/QuestFileLister.java b/src/main/java/forge/gui/home/quest/QuestFileLister.java index 50b84861d9b..9af18b5c78c 100644 --- a/src/main/java/forge/gui/home/quest/QuestFileLister.java +++ b/src/main/java/forge/gui/home/quest/QuestFileLister.java @@ -14,8 +14,6 @@ import javax.swing.JButton; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.SwingConstants; -import javax.swing.border.MatteBorder; - import net.miginfocom.swing.MigLayout; import forge.Command; import forge.gui.toolbox.FLabel; @@ -33,7 +31,8 @@ public class QuestFileLister extends JPanel { private RowPanel previousSelect; private RowPanel[] rows; private Command cmdRowSelect, cmdRowDelete, cmdRowEdit; - private final Color clrDefault, clrHover, clrActive, clrBorders; + private final Color clrDefault; + private final FSkin.SkinColor clrHover, clrActive, clrBorders; /** */ public QuestFileLister() { @@ -81,7 +80,7 @@ public class QuestFileLister extends JPanel { // Note: careful with the widths of the rows here; // scroll panes will have difficulty dynamically resizing if 100% width is set. final JPanel rowTitle = new JPanel(); - rowTitle.setBackground(FSkin.getColor(FSkin.Colors.CLR_ZEBRA)); + FSkin.get(rowTitle).setBackground(FSkin.getColor(FSkin.Colors.CLR_ZEBRA)); rowTitle.setLayout(new MigLayout("insets 0, gap 0")); rowTitle.add(new FLabel.Builder().text("Delete").fontAlign(SwingConstants.CENTER).build(), "w 15%!, h 20px!, gap 0 0 5px 0"); rowTitle.add(new FLabel.Builder().text("Rename").fontAlign(SwingConstants.CENTER).build(), "w 15%!, h 20px!, gap 0 0 5px 0"); @@ -131,14 +130,14 @@ public class QuestFileLister extends JPanel { @Override public void mouseEntered(MouseEvent e) { if (!r0.selected) { - r0.setBackground(clrHover); + FSkin.get(r0).setBackground(clrHover); r0.setOpaque(true); } } @Override public void mouseExited(MouseEvent e) { if (!r0.selected) { - r0.setBackground(clrDefault); + FSkin.get(r0).setBackground(clrDefault); r0.setOpaque(false); } } @@ -167,14 +166,14 @@ public class QuestFileLister extends JPanel { @Override public void mouseEntered(MouseEvent e) { if (!r0.selected) { - r0.setBackground(clrHover); + FSkin.get(r0).setBackground(clrHover); r0.setOpaque(true); } } @Override public void mouseExited(MouseEvent e) { if (!r0.selected) { - r0.setBackground(clrDefault); + FSkin.get(r0).setBackground(clrDefault); r0.setOpaque(false); } } @@ -195,21 +194,21 @@ public class QuestFileLister extends JPanel { setOpaque(false); setBackground(new Color(0, 0, 0, 0)); setLayout(new MigLayout("insets 0, gap 0")); - setBorder(new MatteBorder(0, 0, 1, 0, clrBorders)); + FSkin.get(this).setMatteBorder(0, 0, 1, 0, clrBorders); questData = qd0; this.addMouseListener(new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { if (!selected) { - ((RowPanel) e.getSource()).setBackground(clrHover); + FSkin.get(((RowPanel) e.getSource())).setBackground(clrHover); ((RowPanel) e.getSource()).setOpaque(true); } } @Override public void mouseExited(MouseEvent e) { if (!selected) { - ((RowPanel) e.getSource()).setBackground(clrDefault); + FSkin.get(((RowPanel) e.getSource())).setBackground(clrDefault); ((RowPanel) e.getSource()).setOpaque(false); } } @@ -223,7 +222,7 @@ public class QuestFileLister extends JPanel { public void setSelected(boolean b0) { selected = b0; setOpaque(b0); - setBackground(b0 ? clrActive : clrHover); + FSkin.get(this).setBackground(b0 ? clrActive : clrHover); } public boolean isSelected() { diff --git a/src/main/java/forge/gui/home/quest/QuestPreferencesHandler.java b/src/main/java/forge/gui/home/quest/QuestPreferencesHandler.java index fba3b462c20..be50472ea5b 100644 --- a/src/main/java/forge/gui/home/quest/QuestPreferencesHandler.java +++ b/src/main/java/forge/gui/home/quest/QuestPreferencesHandler.java @@ -16,6 +16,7 @@ import net.miginfocom.swing.MigLayout; import forge.Singletons; import forge.gui.toolbox.FLabel; import forge.gui.toolbox.FSkin; +import forge.gui.toolbox.FSkin.JTextComponentSkin; import forge.quest.data.QuestPreferences; import forge.quest.data.QuestPreferences.QPref; @@ -240,7 +241,8 @@ public class QuestPreferencesHandler extends JPanel { private class PrefInput extends JTextField { private final QPref qpref; private final ErrType err; - private final Color clrHover, clrActive, clrText; + private final JTextComponentSkin skin; + private final FSkin.SkinColor clrHover, clrActive, clrText; private boolean isFocus = false; private String previousText = ""; @@ -255,6 +257,7 @@ public class QuestPreferencesHandler extends JPanel { this.qpref = qp0; this.err = e0; + this.skin = FSkin.get(this); this.clrHover = FSkin.getColor(FSkin.Colors.CLR_HOVER); this.clrActive = FSkin.getColor(FSkin.Colors.CLR_ACTIVE); this.clrText = FSkin.getColor(FSkin.Colors.CLR_TEXT); @@ -262,9 +265,9 @@ public class QuestPreferencesHandler extends JPanel { this.setOpaque(false); this.setBorder(null); this.setFont(FSkin.getFont(13)); - this.setForeground(clrText); - this.setCaretColor(clrText); - this.setBackground(clrHover); + this.skin.setForeground(clrText); + this.skin.setCaretColor(clrText); + this.skin.setBackground(clrHover); this.setHorizontalAlignment(SwingConstants.CENTER); this.setText(prefs.getPref(qpref)); this.setPreviousText(prefs.getPref(qpref)); @@ -290,14 +293,14 @@ public class QuestPreferencesHandler extends JPanel { public void focusGained(FocusEvent e) { isFocus = true; setOpaque(true); - setBackground(clrActive); + skin.setBackground(clrActive); } @Override public void focusLost(FocusEvent e) { isFocus = false; setOpaque(false); - setBackground(clrHover); + skin.setBackground(clrHover); // TODO for slight performance improvement // check if value has changed before validating diff --git a/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java b/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java index 81e49e80396..32c515a437c 100644 --- a/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java +++ b/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java @@ -124,10 +124,14 @@ public class SSubmenuQuestUtil { if (view.equals(VSubmenuChallenges.SINGLETON_INSTANCE)) { view.getLblZep().setVisible(qCtrl.getAssets().hasItem(QuestItemType.ZEPPELIN)); - view.getLblZep().setEnabled(qCtrl.getAssets().getItemLevel( - QuestItemType.ZEPPELIN) == 2 ? false : true); - view.getLblZep().setForeground(qCtrl.getAssets().getItemLevel( - QuestItemType.ZEPPELIN) == 2 ? Color.gray : FSkin.getColor(FSkin.Colors.CLR_TEXT)); + if (qCtrl.getAssets().getItemLevel(QuestItemType.ZEPPELIN) == 2) { + view.getLblZep().setEnabled(false); + FSkin.get(view.getLblZep()).setForeground(Color.gray); + } + else { + view.getLblZep().setEnabled(true); + FSkin.get(view.getLblZep()).setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + } } else { view.getLblZep().setVisible(false); @@ -193,7 +197,7 @@ public class SSubmenuQuestUtil { lblCurrentDeck.setText("Build, then select a deck in the \"Decks\" submenu. "); } else { - lblCurrentDeck.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + FSkin.get(lblCurrentDeck).setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); lblCurrentDeck.setText("Your current deck is \"" + SSubmenuQuestUtil.getCurrentDeck().getName() + "\"."); } diff --git a/src/main/java/forge/gui/home/quest/VSubmenuQuestData.java b/src/main/java/forge/gui/home/quest/VSubmenuQuestData.java index c5afdc50199..fea18fcf4f6 100644 --- a/src/main/java/forge/gui/home/quest/VSubmenuQuestData.java +++ b/src/main/java/forge/gui/home/quest/VSubmenuQuestData.java @@ -199,8 +199,8 @@ public enum VSubmenuQuestData implements IVSubmenu { */ @SuppressWarnings("unchecked") private VSubmenuQuestData() { - lblTitle.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); - lblTitleNew.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + FSkin.get(lblTitle).setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + FSkin.get(lblTitleNew).setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); scrQuests.setBorder(null); diff --git a/src/main/java/forge/gui/home/quest/VSubmenuQuestDecks.java b/src/main/java/forge/gui/home/quest/VSubmenuQuestDecks.java index 84cb34c7401..7ec30757743 100644 --- a/src/main/java/forge/gui/home/quest/VSubmenuQuestDecks.java +++ b/src/main/java/forge/gui/home/quest/VSubmenuQuestDecks.java @@ -44,7 +44,7 @@ public enum VSubmenuQuestDecks implements IVSubmenu { * Constructor. */ private VSubmenuQuestDecks() { - lblTitle.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + FSkin.get(lblTitle).setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); scr.setBorder(null); scr.getViewport().setBorder(null); diff --git a/src/main/java/forge/gui/home/quest/VSubmenuQuestPrefs.java b/src/main/java/forge/gui/home/quest/VSubmenuQuestPrefs.java index 603f63190bd..4efd5b7381d 100644 --- a/src/main/java/forge/gui/home/quest/VSubmenuQuestPrefs.java +++ b/src/main/java/forge/gui/home/quest/VSubmenuQuestPrefs.java @@ -25,6 +25,8 @@ import forge.gui.toolbox.FLabel; import forge.gui.toolbox.FPanel; import forge.gui.toolbox.FScrollPane; import forge.gui.toolbox.FSkin; +import forge.gui.toolbox.FSkin.JTextComponentSkin; +import forge.gui.toolbox.FSkin.SkinColor; import forge.quest.data.QuestPreferences; import forge.quest.data.QuestPreferences.QPref; @@ -76,7 +78,7 @@ public enum VSubmenuQuestPrefs implements IVSubmenu { * Constructor. */ private VSubmenuQuestPrefs() { - lblTitle.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + FSkin.get(lblTitle).setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); pnlContent.setOpaque(false); pnlContent.setLayout(new MigLayout("insets 0, gap 0, wrap")); @@ -89,7 +91,7 @@ public enum VSubmenuQuestPrefs implements IVSubmenu { // Rewards panel final FPanel pnlTitleRewards = new FPanel(); pnlTitleRewards.setLayout(new MigLayout("insets 0, align center")); - pnlTitleRewards.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + FSkin.get(pnlTitleRewards).setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); pnlTitleRewards.add(new FLabel.Builder().text("Rewards") .icon(FSkin.getIcon(FSkin.QuestIcons.ICO_COIN)) .fontSize(16).build(), "h 95%!, gap 0 0 2.5% 0"); @@ -101,7 +103,7 @@ public enum VSubmenuQuestPrefs implements IVSubmenu { // Booster panel final FPanel pnlTitleBooster = new FPanel(); pnlTitleBooster.setLayout(new MigLayout("insets 0, align center")); - pnlTitleBooster.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + FSkin.get(pnlTitleBooster).setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); pnlTitleBooster.add(new FLabel.Builder().text("Booster Pack Ratios") .icon(FSkin.getIcon(FSkin.QuestIcons.ICO_BOOK)) .fontSize(16).build(), "h 95%!, gap 0 0 2.5% 0"); @@ -112,7 +114,7 @@ public enum VSubmenuQuestPrefs implements IVSubmenu { // Difficulty table panel final FPanel pnlTitleDifficulty = new FPanel(); pnlTitleDifficulty.setLayout(new MigLayout("insets 0, align center")); - pnlTitleDifficulty.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + FSkin.get(pnlTitleDifficulty).setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); pnlTitleDifficulty.add(new FLabel.Builder().text("Difficulty Adjustments") .icon(FSkin.getIcon(FSkin.QuestIcons.ICO_NOTES)) .fontSize(16).build(), "h 95%!, gap 0 0 2.5% 0"); @@ -123,7 +125,7 @@ public enum VSubmenuQuestPrefs implements IVSubmenu { // Shop panel final FPanel pnlTitleShop = new FPanel(); pnlTitleShop.setLayout(new MigLayout("insets 0, align center")); - pnlTitleShop.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + FSkin.get(pnlTitleShop).setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); pnlTitleShop.add(new FLabel.Builder().text("Shop Preferences") .icon(FSkin.getIcon(FSkin.QuestIcons.ICO_COIN)) .fontSize(16).build(), "h 95%!, gap 0 0 2.5% 0"); @@ -373,7 +375,8 @@ public enum VSubmenuQuestPrefs implements IVSubmenu { public class PrefInput extends JTextField { private final QPref qpref; private final QuestPreferencesErrType err; - private final Color clrHover, clrActive, clrText; + private final JTextComponentSkin skin; + private final SkinColor clrHover, clrActive, clrText; private boolean isFocus = false; private String previousText = ""; @@ -388,6 +391,7 @@ public enum VSubmenuQuestPrefs implements IVSubmenu { this.qpref = qp0; this.err = e0; + this.skin = FSkin.get(this); this.clrHover = FSkin.getColor(FSkin.Colors.CLR_HOVER); this.clrActive = FSkin.getColor(FSkin.Colors.CLR_ACTIVE); this.clrText = FSkin.getColor(FSkin.Colors.CLR_TEXT); @@ -395,9 +399,9 @@ public enum VSubmenuQuestPrefs implements IVSubmenu { this.setOpaque(false); this.setBorder(null); this.setFont(FSkin.getFont(13)); - this.setForeground(clrText); - this.setCaretColor(clrText); - this.setBackground(clrHover); + this.skin.setForeground(clrText); + this.skin.setCaretColor(clrText); + this.skin.setBackground(clrHover); this.setHorizontalAlignment(SwingConstants.CENTER); this.setText(prefs.getPref(qpref)); this.setPreviousText(prefs.getPref(qpref)); @@ -423,14 +427,14 @@ public enum VSubmenuQuestPrefs implements IVSubmenu { public void focusGained(FocusEvent e) { isFocus = true; setOpaque(true); - setBackground(clrActive); + skin.setBackground(clrActive); } @Override public void focusLost(FocusEvent e) { isFocus = false; setOpaque(false); - setBackground(clrHover); + skin.setBackground(clrHover); CSubmenuQuestPrefs.validateAndSave(PrefInput.this); } diff --git a/src/main/java/forge/gui/home/sanctioned/VSubmenuConstructed.java b/src/main/java/forge/gui/home/sanctioned/VSubmenuConstructed.java index c4515e62c9c..87e93819a48 100644 --- a/src/main/java/forge/gui/home/sanctioned/VSubmenuConstructed.java +++ b/src/main/java/forge/gui/home/sanctioned/VSubmenuConstructed.java @@ -48,7 +48,7 @@ public enum VSubmenuConstructed implements IVSubmenu { private VSubmenuConstructed() { - lblTitle.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + FSkin.get(lblTitle).setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); pnlStart = new JPanel(new MigLayout("insets 0, gap 0, wrap 2")); final String strCheckboxConstraints = "pushy, gap 0 20px 0 0"; @@ -59,8 +59,6 @@ public enum VSubmenuConstructed implements IVSubmenu { //pnlStart.add(cbAiVsAi, strCheckboxConstraintsTop); pnlStart.add(cbArtifacts, strCheckboxConstraints); pnlStart.add(cbRemoveSmall, strCheckboxConstraints); - - } /* (non-Javadoc) diff --git a/src/main/java/forge/gui/home/sanctioned/VSubmenuDraft.java b/src/main/java/forge/gui/home/sanctioned/VSubmenuDraft.java index 60eac6d8298..5fcccbbcc1b 100644 --- a/src/main/java/forge/gui/home/sanctioned/VSubmenuDraft.java +++ b/src/main/java/forge/gui/home/sanctioned/VSubmenuDraft.java @@ -79,7 +79,7 @@ public enum VSubmenuDraft implements IVSubmenu { lstAI.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); btnStart.setEnabled(false); - lblTitle.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + FSkin.get(lblTitle).setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); JXButtonPanel grpPanel = new JXButtonPanel(); grpPanel.add(radSingle, "w 200px!, h 30px!"); diff --git a/src/main/java/forge/gui/home/sanctioned/VSubmenuSealed.java b/src/main/java/forge/gui/home/sanctioned/VSubmenuSealed.java index 13f74fe82af..381c73b28ff 100644 --- a/src/main/java/forge/gui/home/sanctioned/VSubmenuSealed.java +++ b/src/main/java/forge/gui/home/sanctioned/VSubmenuSealed.java @@ -79,7 +79,7 @@ public enum VSubmenuSealed implements IVSubmenu { private VSubmenuSealed() { btnStart.setEnabled(false); - lblTitle.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + FSkin.get(lblTitle).setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); } /* (non-Javadoc) @@ -166,7 +166,7 @@ public enum VSubmenuSealed implements IVSubmenu { // Init directions text pane final JTextPane tpnDirections = new JTextPane(); tpnDirections.setOpaque(false); - tpnDirections.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + FSkin.get(tpnDirections).setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); tpnDirections.setFont(FSkin.getFont(15)); tpnDirections.setAlignmentX(SwingConstants.CENTER); tpnDirections.setFocusable(false); diff --git a/src/main/java/forge/gui/home/settings/VSubmenuPreferences.java b/src/main/java/forge/gui/home/settings/VSubmenuPreferences.java index caa1cfa0a2f..aaa3c5f08d7 100644 --- a/src/main/java/forge/gui/home/settings/VSubmenuPreferences.java +++ b/src/main/java/forge/gui/home/settings/VSubmenuPreferences.java @@ -17,11 +17,10 @@ import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.ScrollPaneConstants; import javax.swing.SwingConstants; -import javax.swing.border.MatteBorder; - import net.miginfocom.swing.MigLayout; import org.apache.commons.lang3.StringUtils; + import forge.GameLogEntryType; import forge.Singletons; import forge.control.KeyboardShortcuts; @@ -294,10 +293,11 @@ public enum VSubmenuPreferences implements IVSubmenu { private class SectionLabel extends JLabel { public SectionLabel(final String txt0) { super(txt0); - setBorder(new MatteBorder(0, 0, 1, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS))); + FSkin.JComponentSkin skin = FSkin.get(this); + skin.setMatteBorder(0, 0, 1, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS)); setHorizontalAlignment(SwingConstants.CENTER); setFont(FSkin.getBoldFont(16)); - setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + skin.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); } } @@ -306,8 +306,9 @@ public enum VSubmenuPreferences implements IVSubmenu { private class NoteLabel extends JLabel { public NoteLabel(final String txt0) { super(txt0); + FSkin.JComponentSkin skin = FSkin.get(this); setFont(FSkin.getItalicFont(12)); - setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + skin.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); } } @@ -344,7 +345,7 @@ public enum VSubmenuPreferences implements IVSubmenu { this.addFocusListener(new FocusAdapter() { @Override public void focusGained(final FocusEvent evt) { - KeyboardShortcutField.this.setBackground(FSkin.getColor(FSkin.Colors.CLR_ACTIVE)); + FSkin.get(KeyboardShortcutField.this).setBackground(FSkin.getColor(FSkin.Colors.CLR_ACTIVE)); } @Override @@ -352,7 +353,7 @@ public enum VSubmenuPreferences implements IVSubmenu { Singletons.getModel().getPreferences().setPref(prefKey, getCodeString()); Singletons.getModel().getPreferences().save(); shortcut0.attach(); - KeyboardShortcutField.this.setBackground(Color.white); + FSkin.get(KeyboardShortcutField.this).setBackground(Color.white); } }); } diff --git a/src/main/java/forge/gui/home/settings/VSubmenuReleaseNotes.java b/src/main/java/forge/gui/home/settings/VSubmenuReleaseNotes.java index fad1ba0e78d..29d2c6c6a82 100644 --- a/src/main/java/forge/gui/home/settings/VSubmenuReleaseNotes.java +++ b/src/main/java/forge/gui/home/settings/VSubmenuReleaseNotes.java @@ -66,9 +66,11 @@ public enum VSubmenuReleaseNotes implements IVSubmenu { tar.setWrapStyleWord(true); tar.setEditable(false); tar.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); + + FSkin.JTextComponentSkin tarSkin = FSkin.get(tar); tar.setFont(FSkin.getFixedFont(16)); - tar.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); - tar.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + tarSkin.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + tarSkin.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); scroller = new JScrollPane(tar); pnlMain.add(scroller, "w 100%!, h 100%!"); diff --git a/src/main/java/forge/gui/home/variant/VSubmenuArchenemy.java b/src/main/java/forge/gui/home/variant/VSubmenuArchenemy.java index fa0d6ea23ba..e8216b5530e 100644 --- a/src/main/java/forge/gui/home/variant/VSubmenuArchenemy.java +++ b/src/main/java/forge/gui/home/variant/VSubmenuArchenemy.java @@ -75,7 +75,7 @@ public enum VSubmenuArchenemy implements IVSubmenu { private VSubmenuArchenemy() { - lblTitle.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + FSkin.get(lblTitle).setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); //This listener will look for any of the radio buttons being selected //and call the method that shows/hides tabs appropriately. diff --git a/src/main/java/forge/gui/home/variant/VSubmenuPlanechase.java b/src/main/java/forge/gui/home/variant/VSubmenuPlanechase.java index 15ece3ea382..054f807c9ef 100644 --- a/src/main/java/forge/gui/home/variant/VSubmenuPlanechase.java +++ b/src/main/java/forge/gui/home/variant/VSubmenuPlanechase.java @@ -75,7 +75,7 @@ public enum VSubmenuPlanechase implements IVSubmenu { private VSubmenuPlanechase() { - lblTitle.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + FSkin.get(lblTitle).setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); //This listener will look for any of the radio buttons being selected //and call the method that shows/hides tabs appropriately. diff --git a/src/main/java/forge/gui/home/variant/VSubmenuVanguard.java b/src/main/java/forge/gui/home/variant/VSubmenuVanguard.java index 8855ddbf20d..b786983b5be 100644 --- a/src/main/java/forge/gui/home/variant/VSubmenuVanguard.java +++ b/src/main/java/forge/gui/home/variant/VSubmenuVanguard.java @@ -87,7 +87,7 @@ public enum VSubmenuVanguard implements IVSubmenu { private VSubmenuVanguard() { - lblTitle.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + FSkin.get(lblTitle).setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); Vector humanListData = new Vector(); Vector aiListData = new Vector(); diff --git a/src/main/java/forge/gui/match/GameLogPanel.java b/src/main/java/forge/gui/match/GameLogPanel.java index e9e16ebcc58..6cfd821ac4d 100644 --- a/src/main/java/forge/gui/match/GameLogPanel.java +++ b/src/main/java/forge/gui/match/GameLogPanel.java @@ -1,7 +1,6 @@ package forge.gui.match; import java.awt.AWTEvent; -import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Rectangle; @@ -158,16 +157,16 @@ public class GameLogPanel extends JPanel { tar.setEditable(false); tar.setLineWrap(true); tar.setWrapStyleWord(true); - tar.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + FSkin.get(tar).setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); setTextAreaBackground(tar, useAlternateBackColor); return tar; } private void setTextAreaBackground(JTextArea tar, boolean useAlternateBackColor) { - Color skinColor = FSkin.getColor(FSkin.Colors.CLR_THEME2); + FSkin.SkinColor skinColor = FSkin.getColor(FSkin.Colors.CLR_THEME2); if (useAlternateBackColor) { skinColor = skinColor.darker(); } tar.setOpaque(true); - tar.setBackground(skinColor); + FSkin.get(tar).setBackground(skinColor); } protected final class MyScrollablePanel extends JPanel implements Scrollable { diff --git a/src/main/java/forge/gui/match/GauntletWinLose.java b/src/main/java/forge/gui/match/GauntletWinLose.java index c1fbb264cac..423f71f10a2 100644 --- a/src/main/java/forge/gui/match/GauntletWinLose.java +++ b/src/main/java/forge/gui/match/GauntletWinLose.java @@ -182,7 +182,7 @@ public class GauntletWinLose extends ControlWinLose { final JPanel pnl = this.getView().getPnlCustom(); pnl.setLayout(new MigLayout("insets 0, gap 0, wrap, ax center")); pnl.setOpaque(true); - pnl.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + FSkin.get(pnl).setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); pnl.add(lblTitle, "gap 0 0 20px 10px, ax center"); pnl.add(pnlResults, "w 96%!, growy, pushy, gap 2% 0 0 0"); diff --git a/src/main/java/forge/gui/match/QuestWinLoseCardViewer.java b/src/main/java/forge/gui/match/QuestWinLoseCardViewer.java index 78d34c8cf0e..4245bbbca66 100644 --- a/src/main/java/forge/gui/match/QuestWinLoseCardViewer.java +++ b/src/main/java/forge/gui/match/QuestWinLoseCardViewer.java @@ -67,7 +67,7 @@ public class QuestWinLoseCardViewer extends FPanel { this.setCornerDiameter(20); this.setBorderToggle(false); - this.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + FSkin.get(this).setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); picture.setOpaque(false); scroller.setBorder(null); diff --git a/src/main/java/forge/gui/match/TargetingOverlay.java b/src/main/java/forge/gui/match/TargetingOverlay.java index 21783c71a5c..c2972568501 100644 --- a/src/main/java/forge/gui/match/TargetingOverlay.java +++ b/src/main/java/forge/gui/match/TargetingOverlay.java @@ -66,7 +66,7 @@ public enum TargetingOverlay { pnl.setOpaque(false); pnl.setVisible(false); pnl.setFocusTraversalKeysEnabled(false); - pnl.setBackground(FSkin.getColor(FSkin.Colors.CLR_ZEBRA)); + FSkin.get(pnl).setBackground(FSkin.getColor(FSkin.Colors.CLR_ZEBRA)); } /** @return {@link javax.swing.JPanel} */ @@ -300,7 +300,7 @@ public enum TargetingOverlay { return area; } - private void drawArrow(Graphics2D g2d, int startX, int startY, int endX, int endY, Color color) { + private void drawArrow(Graphics2D g2d, int startX, int startY, int endX, int endY, FSkin.SkinColor skinColor) { float ex = endX - startX; float ey = endY - startY; if (ex == 0 && ey == 0) { return; } @@ -318,7 +318,7 @@ public enum TargetingOverlay { g2d.translate(startX, startY); g2d.rotate(Math.atan2(ey, ex)); g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.75f)); - g2d.setColor(color); + FSkin.get(this).setGraphicsColor(g2d, skinColor); g2d.fill(arrow); g2d.setColor(Color.BLACK); g2d.draw(arrow); @@ -347,7 +347,7 @@ public enum TargetingOverlay { Graphics2D g2d = (Graphics2D) g; g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - Color color = FSkin.getColor(FSkin.Colors.CLR_ACTIVE); + FSkin.SkinColor skinColor = FSkin.getColor(FSkin.Colors.CLR_ACTIVE); for (Point[] p : arcs) { if (p[0] == null || p[1] == null) { @@ -359,7 +359,7 @@ public enum TargetingOverlay { int startX = (int) p[1].getX(); int startY = (int) p[1].getY(); - drawArrow(g2d, startX, startY, endX, endY, color); + drawArrow(g2d, startX, startY, endX, endY, skinColor); } FView.SINGLETON_INSTANCE.getFrame().repaint(); // repaint the match UI diff --git a/src/main/java/forge/gui/match/VAssignDamage.java b/src/main/java/forge/gui/match/VAssignDamage.java index eefbb009084..b6dbf45811e 100644 --- a/src/main/java/forge/gui/match/VAssignDamage.java +++ b/src/main/java/forge/gui/match/VAssignDamage.java @@ -33,8 +33,6 @@ import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingConstants; import javax.swing.SwingUtilities; -import javax.swing.border.LineBorder; - import net.miginfocom.swing.MigLayout; import forge.Card; import forge.CounterType; @@ -113,7 +111,7 @@ public class VAssignDamage { if (!damage.containsKey(source)) source = null; // to get player instead of fake card FSkin.Colors brdrColor = VAssignDamage.this.canAssignTo(source) ? FSkin.Colors.CLR_ACTIVE : FSkin.Colors.CLR_INACTIVE; - ((CardPanel) evt.getSource()).setBorder(new LineBorder(FSkin.getColor(brdrColor), 2)); + FSkin.get((CardPanel) evt.getSource()).setLineBorder(FSkin.getColor(brdrColor), 2); } @Override @@ -155,7 +153,7 @@ public class VAssignDamage { // Top-level UI stuff final JPanel overlay = SOverlayUtils.genericOverlay(); final JPanel pnlMain = new JPanel(); - pnlMain.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + FSkin.get(pnlMain).setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); // Attacker area final CardPanel pnlAttacker = new CardPanel(attacker0); diff --git a/src/main/java/forge/gui/match/nonsingleton/VCommand.java b/src/main/java/forge/gui/match/nonsingleton/VCommand.java index 17711a00c6c..fee0fde087e 100644 --- a/src/main/java/forge/gui/match/nonsingleton/VCommand.java +++ b/src/main/java/forge/gui/match/nonsingleton/VCommand.java @@ -19,8 +19,6 @@ package forge.gui.match.nonsingleton; import javax.swing.JPanel; import javax.swing.JScrollPane; -import javax.swing.border.MatteBorder; - import net.miginfocom.swing.MigLayout; import forge.game.player.Player; import forge.game.zone.ZoneType; @@ -71,8 +69,7 @@ public class VCommand implements IVDoc { control = new CCommand(player, this); - tabletop.setBorder(new MatteBorder(0, 1, 0, 0, - FSkin.getColor(FSkin.Colors.CLR_BORDERS))); + FSkin.get(tabletop).setMatteBorder(0, 1, 0, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS)); tabletop.setOpaque(false); scroller.setViewportView(this.tabletop); diff --git a/src/main/java/forge/gui/match/nonsingleton/VField.java b/src/main/java/forge/gui/match/nonsingleton/VField.java index 03d0815a42f..941823e662d 100644 --- a/src/main/java/forge/gui/match/nonsingleton/VField.java +++ b/src/main/java/forge/gui/match/nonsingleton/VField.java @@ -26,8 +26,6 @@ import javax.swing.JScrollPane; import javax.swing.SwingConstants; import javax.swing.border.Border; import javax.swing.border.LineBorder; -import javax.swing.border.MatteBorder; - import net.miginfocom.swing.MigLayout; import forge.game.player.LobbyPlayer; import forge.game.player.Player; @@ -73,7 +71,6 @@ public class VField implements IVDoc { private final PhaseIndicator phaseInidicator = new PhaseIndicator(); private final Border borderAvatarSimple = new LineBorder(new Color(0, 0, 0, 0), 1); - private final Border borderAvatarHover = new LineBorder(FSkin.getColor(FSkin.Colors.CLR_BORDERS), 1); private final Border borderAvatarHighlited = new LineBorder(Color.red, 2); @@ -102,7 +99,7 @@ public class VField implements IVDoc { control = new CField(player, this, playerViewer); avatarArea.setOpaque(false); - avatarArea.setBackground(FSkin.getColor(FSkin.Colors.CLR_HOVER)); + FSkin.get(avatarArea).setBackground(FSkin.getColor(FSkin.Colors.CLR_HOVER)); avatarArea.setLayout(new MigLayout("insets 0, gap 0")); avatarArea.add(lblAvatar, "w 100%!, h 70%!, wrap, gaptop 4%"); avatarArea.add(lblLife, "w 100%!, h 30%!, gaptop 4%"); @@ -113,7 +110,7 @@ public class VField implements IVDoc { public void mouseEntered(final MouseEvent e) { avatarArea.setOpaque(true); if (!isHighlited()) - avatarArea.setBorder(borderAvatarHover); + FSkin.get(avatarArea).setLineBorder(FSkin.getColor(FSkin.Colors.CLR_BORDERS)); } @Override @@ -124,8 +121,7 @@ public class VField implements IVDoc { } }); - tabletop.setBorder(new MatteBorder(0, 1, 0, 0, - FSkin.getColor(FSkin.Colors.CLR_BORDERS))); + FSkin.get(tabletop).setMatteBorder(0, 1, 0, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS)); tabletop.setOpaque(false); scroller.setViewportView(this.tabletop); @@ -261,9 +257,12 @@ public class VField implements IVDoc { detailsPanel.updateDetails(); this.getLblLife().setText("" + player.getLife()); - Color lifeFg = player.getLife() <= 5 ? Color.red : FSkin.getColor(FSkin.Colors.CLR_TEXT); - this.getLblLife().setForeground(lifeFg); - + if (player.getLife() > 5) { + FSkin.get(this.getLblLife()).setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + } + else { + FSkin.get(this.getLblLife()).setForeground(Color.red); + } boolean highlited = isHighlited(); this.avatarArea.setBorder(highlited ? borderAvatarHighlited : borderAvatarSimple ); diff --git a/src/main/java/forge/gui/match/views/VCombat.java b/src/main/java/forge/gui/match/views/VCombat.java index f54116e8e96..eaf56494317 100644 --- a/src/main/java/forge/gui/match/views/VCombat.java +++ b/src/main/java/forge/gui/match/views/VCombat.java @@ -18,8 +18,6 @@ package forge.gui.match.views; import javax.swing.JTextArea; -import javax.swing.border.MatteBorder; - import net.miginfocom.swing.MigLayout; import forge.gui.framework.DragCell; import forge.gui.framework.DragTab; @@ -44,9 +42,10 @@ public enum VCombat implements IVDoc { final JTextArea tar = new JTextArea(); private VCombat() { + FSkin.JTextComponentSkin tarSkin = FSkin.get(tar); tar.setOpaque(false); - tar.setBorder(new MatteBorder(0, 0, 0, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS))); - tar.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + tarSkin.setMatteBorder(0, 0, 0, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS)); + tarSkin.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); tar.setFocusable(false); tar.setLineWrap(true); } diff --git a/src/main/java/forge/gui/match/views/VDev.java b/src/main/java/forge/gui/match/views/VDev.java index d6b938c69a4..d6bef4d8b24 100644 --- a/src/main/java/forge/gui/match/views/VDev.java +++ b/src/main/java/forge/gui/match/views/VDev.java @@ -17,7 +17,6 @@ */ package forge.gui.match.views; -import java.awt.Color; import java.awt.Graphics; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; @@ -239,9 +238,9 @@ public enum VDev implements IVDoc { public class DevLabel extends JLabel { private static final long serialVersionUID = 7917311680519060700L; - private Color defaultBG = FSkin.getColor(FSkin.Colors.CLR_ACTIVE); - private final Color hoverBG = FSkin.getColor(FSkin.Colors.CLR_HOVER); - private final Color pressedBG = FSkin.getColor(FSkin.Colors.CLR_INACTIVE); + private FSkin.SkinColor defaultBG = FSkin.getColor(FSkin.Colors.CLR_ACTIVE); + private final FSkin.SkinColor hoverBG = FSkin.getColor(FSkin.Colors.CLR_HOVER); + private final FSkin.SkinColor pressedBG = FSkin.getColor(FSkin.Colors.CLR_INACTIVE); private boolean enabled; private final String enabledText, disabledText; private int w, h; // Width, height, radius, insets (for paintComponent) @@ -285,27 +284,27 @@ public enum VDev implements IVDoc { this.r = 6; // Radius (for paintComponent) this.i = 2; // Insets (for paintComponent) this.setEnabled(true); - this.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + FSkin.get(this).setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); this.addMouseListener(new MouseAdapter() { @Override public void mousePressed(final MouseEvent e) { - DevLabel.this.setBackground(DevLabel.this.pressedBG); + FSkin.get(DevLabel.this).setBackground(DevLabel.this.pressedBG); } @Override public void mouseReleased(final MouseEvent e) { - DevLabel.this.setBackground(DevLabel.this.defaultBG); + FSkin.get(DevLabel.this).setBackground(DevLabel.this.defaultBG); } @Override public void mouseEntered(final MouseEvent e) { - DevLabel.this.setBackground(DevLabel.this.hoverBG); + FSkin.get(DevLabel.this).setBackground(DevLabel.this.hoverBG); } @Override public void mouseExited(final MouseEvent e) { - DevLabel.this.setBackground(DevLabel.this.defaultBG); + FSkin.get(DevLabel.this).setBackground(DevLabel.this.defaultBG); } }); } @@ -330,7 +329,7 @@ public enum VDev implements IVDoc { this.enabled = b; this.setText(s); this.setToolTipText(s); - this.setBackground(this.defaultBG); + FSkin.get(this).setBackground(this.defaultBG); } /** diff --git a/src/main/java/forge/gui/match/views/VDock.java b/src/main/java/forge/gui/match/views/VDock.java index 4e39734a644..410c9164b3c 100644 --- a/src/main/java/forge/gui/match/views/VDock.java +++ b/src/main/java/forge/gui/match/views/VDock.java @@ -36,6 +36,8 @@ import forge.gui.framework.IVDoc; import forge.gui.match.controllers.CDock; import forge.gui.toolbox.FLabel; import forge.gui.toolbox.FSkin; +import forge.gui.toolbox.FSkin.JComponentSkin; +import forge.gui.toolbox.FSkin.SkinColor; /** * Assembles Swing components of button dock area. @@ -194,9 +196,10 @@ public enum VDock implements IVDoc { @SuppressWarnings("serial") private class DockButton extends JLabel { private final Image img; - private final Color hoverBG = FSkin.getColor(FSkin.Colors.CLR_HOVER); + private final JComponentSkin skin; + private final SkinColor hoverBG = FSkin.getColor(FSkin.Colors.CLR_HOVER); private final Color defaultBG = new Color(0, 0, 0, 0); - private Color clrBorders = new Color(0, 0, 0, 0); + private final Color defaultBorderColor = new Color(0, 0, 0, 0); private int w, h; /** @@ -209,6 +212,7 @@ public enum VDock implements IVDoc { */ public DockButton(final ImageIcon i0, final String s0) { super(); + this.skin = FSkin.get(this); this.setToolTipText(s0); this.setOpaque(false); this.setBackground(this.defaultBG); @@ -222,13 +226,11 @@ public enum VDock implements IVDoc { this.addMouseListener(new MouseAdapter() { @Override public void mouseEntered(final MouseEvent e) { - DockButton.this.clrBorders = FSkin.getColor(FSkin.Colors.CLR_BORDERS); - DockButton.this.setBackground(DockButton.this.hoverBG); + DockButton.this.skin.setBackground(DockButton.this.hoverBG); } @Override public void mouseExited(final MouseEvent e) { - DockButton.this.clrBorders = new Color(0, 0, 0, 0); DockButton.this.setBackground(DockButton.this.defaultBG); } }); @@ -245,7 +247,12 @@ public enum VDock implements IVDoc { this.h = this.getHeight(); g.setColor(this.getBackground()); g.fillRect(0, 0, this.w, this.h); - g.setColor(this.clrBorders); + if (skin.getBackground() == this.hoverBG) { + skin.setGraphicsColor(g, FSkin.getColor(FSkin.Colors.CLR_BORDERS)); + } + else { + g.setColor(this.defaultBorderColor); + } g.drawRect(0, 0, this.w - 1, this.h - 1); g.drawImage(this.img, 0, 0, this.w, this.h, null); super.paintComponent(g); diff --git a/src/main/java/forge/gui/match/views/VMessage.java b/src/main/java/forge/gui/match/views/VMessage.java index 6fa7c294f9a..9dfb81db909 100644 --- a/src/main/java/forge/gui/match/views/VMessage.java +++ b/src/main/java/forge/gui/match/views/VMessage.java @@ -74,7 +74,7 @@ public enum VMessage implements IVDoc { tarMessage.setEditable(false); tarMessage.setLineWrap(true); tarMessage.setWrapStyleWord(true); - tarMessage.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + FSkin.get(tarMessage).setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); tarMessage.setFont(FSkin.getFont(14)); tarMessage.setMargin(new Insets(5, 5, 5, 5)); diff --git a/src/main/java/forge/gui/match/views/VPlayers.java b/src/main/java/forge/gui/match/views/VPlayers.java index 5de66c195b8..afc803146eb 100644 --- a/src/main/java/forge/gui/match/views/VPlayers.java +++ b/src/main/java/forge/gui/match/views/VPlayers.java @@ -24,8 +24,6 @@ import java.util.Map.Entry; import javax.swing.JLabel; import javax.swing.JPanel; -import javax.swing.border.MatteBorder; - import net.miginfocom.swing.MigLayout; import forge.Card; import forge.Singletons; @@ -93,7 +91,7 @@ public enum VPlayers implements IVDoc { this.infoLBLs.put(p, new JLabel[] { name, life, hand, draw, prevention, keywords, antes }); // Set border on bottom label, and larger font on player name - antes.setBorder(new MatteBorder(0, 0, 1, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS))); + FSkin.get(antes).setMatteBorder(0, 0, 1, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS)); name.setText(p.getName()); } } @@ -189,7 +187,7 @@ public enum VPlayers implements IVDoc { private class InfoLabel extends JLabel { public InfoLabel() { super(); - this.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + FSkin.get(this).setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); } } } diff --git a/src/main/java/forge/gui/match/views/VStack.java b/src/main/java/forge/gui/match/views/VStack.java index 417314e1e22..a1b0c980f92 100644 --- a/src/main/java/forge/gui/match/views/VStack.java +++ b/src/main/java/forge/gui/match/views/VStack.java @@ -131,13 +131,10 @@ public enum VStack implements IVDoc { tab.setText("Stack : " + stack.size()); final Border border = new EmptyBorder(5, 5, 5, 5); - Color[] scheme; stackTARs.clear(); boolean isFirst = true; for (final SpellAbilityStackInstance spell : stack) { - scheme = getSpellColor(spell); - String isOptional = spell.getSpellAbility().isOptionalTrigger() && spell.getSourceCard().getController().getController().getLobbyPlayer().equals(viewer) ? "(OPTIONAL) " : ""; String txt = (count++) + ". " + isOptional + spell.getStackDescription(); @@ -145,8 +142,7 @@ public enum VStack implements IVDoc { tar.setToolTipText(txt); tar.setOpaque(true); tar.setBorder(border); - tar.setForeground(scheme[1]); - tar.setBackground(scheme[0]); + this.setSpellColor(tar, spell); tar.setFocusable(false); tar.setEditable(false); @@ -203,23 +199,43 @@ public enum VStack implements IVDoc { parentCell.getBody().repaint(); } - /** Returns array with [background, foreground] colors. */ - private Color[] getSpellColor(SpellAbilityStackInstance s0) { - if (s0.getStackDescription().startsWith("Morph ")) - return new Color[] { new Color(0, 0, 0, 0), FSkin.getColor(FSkin.Colors.CLR_TEXT) }; - if (CardUtil.getColors(s0.getSourceCard()).isMulticolor()) - return new Color[] { new Color(253, 175, 63), Color.black }; - - if (s0.getSourceCard().isBlack()) return new Color[] { Color.black, Color.white }; - if (s0.getSourceCard().isBlue()) return new Color[] { new Color(71, 108, 191), Color.white }; - if (s0.getSourceCard().isGreen()) return new Color[] { new Color(23, 95, 30), Color.white }; - if (s0.getSourceCard().isRed()) return new Color[] { new Color(214, 8, 8), Color.white }; - if (s0.getSourceCard().isWhite()) return new Color[] { Color.white, Color.black }; - - if (s0.getSourceCard().isArtifact() || s0.getSourceCard().isLand()) - return new Color[] { new Color(111, 75, 43), Color.white }; - - return new Color[] { new Color(0, 0, 0, 0), FSkin.getColor(FSkin.Colors.CLR_TEXT) }; + private void setSpellColor(JTextArea tar, SpellAbilityStackInstance s0) { + if (s0.getStackDescription().startsWith("Morph ")) { + tar.setBackground(new Color(0, 0, 0, 0)); + FSkin.get(tar).setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + } + else if (CardUtil.getColors(s0.getSourceCard()).isMulticolor()) { + tar.setBackground(new Color(253, 175, 63)); + tar.setForeground(Color.black); + } + else if (s0.getSourceCard().isBlack()) { + tar.setBackground(Color.black); + tar.setForeground(Color.white); + } + else if (s0.getSourceCard().isBlue()) { + tar.setBackground(new Color(71, 108, 191)); + tar.setForeground(Color.white); + } + else if (s0.getSourceCard().isGreen()) { + tar.setBackground(new Color(23, 95, 30)); + tar.setForeground(Color.white); + } + else if (s0.getSourceCard().isRed()) { + tar.setBackground(new Color(214, 8, 8)); + tar.setForeground(Color.white); + } + else if (s0.getSourceCard().isWhite()) { + tar.setBackground(Color.white); + tar.setForeground(Color.black); + } + else if (s0.getSourceCard().isArtifact() || s0.getSourceCard().isLand()) { + tar.setBackground(new Color(111, 75, 43)); + tar.setForeground(Color.white); + } + else { + tar.setBackground(new Color(0, 0, 0, 0)); + FSkin.get(tar).setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + } } //========= Custom class handling diff --git a/src/main/java/forge/gui/toolbox/FButton.java b/src/main/java/forge/gui/toolbox/FButton.java index 77c46f61d77..3e8a512bfc5 100644 --- a/src/main/java/forge/gui/toolbox/FButton.java +++ b/src/main/java/forge/gui/toolbox/FButton.java @@ -65,7 +65,7 @@ public class FButton extends JButton implements ILocalRepaint { public FButton(final String label) { super(label); this.setOpaque(false); - this.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + FSkin.get(this).setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); this.setBackground(Color.red); this.setFocusPainted(false); this.setBorder(BorderFactory.createEmptyBorder()); diff --git a/src/main/java/forge/gui/toolbox/FCheckBox.java b/src/main/java/forge/gui/toolbox/FCheckBox.java index b25ba7615d9..915f986dc0f 100644 --- a/src/main/java/forge/gui/toolbox/FCheckBox.java +++ b/src/main/java/forge/gui/toolbox/FCheckBox.java @@ -13,7 +13,7 @@ public class FCheckBox extends JCheckBox { public FCheckBox(final String s0) { super(s0); - this.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + FSkin.get(this).setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); this.setFont(FSkin.getFont(14)); this.setOpaque(false); } diff --git a/src/main/java/forge/gui/toolbox/FComboBoxPanel.java b/src/main/java/forge/gui/toolbox/FComboBoxPanel.java index 938686f5ea4..9fdf240c949 100644 --- a/src/main/java/forge/gui/toolbox/FComboBoxPanel.java +++ b/src/main/java/forge/gui/toolbox/FComboBoxPanel.java @@ -60,7 +60,7 @@ public class FComboBoxPanel extends JPanel { if (this.comboBoxCaption != null && !this.comboBoxCaption.isEmpty()) { JLabel comboLabel; comboLabel = new JLabel(this.comboBoxCaption); - comboLabel.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + FSkin.get(comboLabel).setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); comboLabel.setFont(FSkin.getBoldFont(12)); this.add(comboLabel); } @@ -69,8 +69,9 @@ public class FComboBoxPanel extends JPanel { private void setComboBoxLayout() { if (this.comboBox != null) { if (Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_THEMED_COMBOBOX)) { - this.comboBox.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); - this.comboBox.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + FSkin.JComponentSkin> comboBoxSkin = FSkin.get(this.comboBox); + comboBoxSkin.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + comboBoxSkin.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); this.comboBox.setFont(FSkin.getFont(12)); this.comboBox.setRenderer(new ComplexCellRenderer()); } diff --git a/src/main/java/forge/gui/toolbox/FLabel.java b/src/main/java/forge/gui/toolbox/FLabel.java index bdf255cbe69..18162fe81f1 100644 --- a/src/main/java/forge/gui/toolbox/FLabel.java +++ b/src/main/java/forge/gui/toolbox/FLabel.java @@ -1,11 +1,9 @@ package forge.gui.toolbox; import java.awt.AlphaComposite; -import java.awt.Color; import java.awt.Composite; import java.awt.Dimension; import java.awt.Font; -import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; @@ -31,6 +29,8 @@ import javax.swing.event.AncestorListener; import forge.Command; import forge.gui.framework.ILocalRepaint; +import forge.gui.toolbox.FSkin.JComponentSkin; +import forge.gui.toolbox.FSkin.SkinColor; /** * Uses the Builder pattern to facilitate/encourage inline styling. @@ -186,6 +186,8 @@ public class FLabel extends JLabel implements ILocalRepaint { // Call this using FLabel.Builder()... protected FLabel(final Builder b0) { super(b0.bldText); + + this.skin = FSkin.get(this); // Init fields from builder this.iconScaleFactor = b0.bldIconScaleFactor; @@ -230,8 +232,8 @@ public class FLabel extends JLabel implements ILocalRepaint { if (b0.bldUseSkinColors) { // Non-custom display properties - this.setForeground(clrText); - this.setBackground(clrMain); + this.skin.setForeground(clrText); + this.skin.setBackground(clrMain); } // Resize adapter @@ -245,15 +247,16 @@ public class FLabel extends JLabel implements ILocalRepaint { //========== Variable initialization // Final inits - private final Color clrHover = FSkin.getColor(FSkin.Colors.CLR_HOVER); - private final Color clrText = FSkin.getColor(FSkin.Colors.CLR_TEXT); - private final Color clrMain = FSkin.getColor(FSkin.Colors.CLR_INACTIVE); - private final Color d50 = FSkin.stepColor(clrMain, -50); - private final Color d30 = FSkin.stepColor(clrMain, -30); - private final Color d10 = FSkin.stepColor(clrMain, -10); - private final Color l10 = FSkin.stepColor(clrMain, 10); - private final Color l20 = FSkin.stepColor(clrMain, 20); - private final Color l30 = FSkin.stepColor(clrMain, 30); + private final JComponentSkin skin; + private final SkinColor clrHover = FSkin.getColor(FSkin.Colors.CLR_HOVER); + private final SkinColor clrText = FSkin.getColor(FSkin.Colors.CLR_TEXT); + private final SkinColor clrMain = FSkin.getColor(FSkin.Colors.CLR_INACTIVE); + private final SkinColor d50 = clrMain.stepColor(-50); + private final SkinColor d30 = clrMain.stepColor(-30); + private final SkinColor d10 = clrMain.stepColor(-10); + private final SkinColor l10 = clrMain.stepColor(10); + private final SkinColor l20 = clrMain.stepColor(20); + private final SkinColor l30 = clrMain.stepColor(30); // Custom properties, assigned either at realization (using builder) // or dynamically (using methods below). @@ -538,38 +541,36 @@ public class FLabel extends JLabel implements ILocalRepaint { } private void paintFocus(final Graphics2D g, int w, int h) { - g.setColor(clrHover); + skin.setGraphicsColor(g, clrHover); g.drawRect(0, 0, w - 2, h - 2); - g.setColor(l30); + skin.setGraphicsColor(g, l30); g.drawRect(1, 1, w - 4, h - 4); } private void paintUp(final Graphics2D g, int w, int h) { - GradientPaint gradient = new GradientPaint(0, h, d10, 0, 0, l20); - g.setPaint(gradient); + skin.setGraphicsGradientPaint(g, 0, h, d10, 0, 0, l20); g.fillRect(0, 0, w, h); - g.setColor(d50); + skin.setGraphicsColor(g, d50); g.drawRect(0, 0, w - 2, h - 2); - g.setColor(l10); + skin.setGraphicsColor(g, l10); g.drawRect(1, 1, w - 4, h - 4); } private void paintBorder(final Graphics2D g, int w, int h) { - g.setColor(l10); + skin.setGraphicsColor(g, l10); g.drawRect(0, 0, w - 2, h - 2); - g.setColor(l30); + skin.setGraphicsColor(g, l30); g.drawRect(1, 1, w - 4, h - 4); } private void paintDown(final Graphics2D g, int w, int h) { - GradientPaint gradient = new GradientPaint(0, h, d30, 0, 0, l10); - g.setPaint(gradient); + skin.setGraphicsGradientPaint(g, 0, h, d30, 0, 0, l10); g.fillRect(0, 0, w - 1, h - 1); - g.setColor(d30); + skin.setGraphicsColor(g, d30); g.drawRect(0, 0, w - 2, h - 2); - g.setColor(l10); + skin.setGraphicsColor(g, l10); g.drawRect(1, 1, w - 4, h - 4); } diff --git a/src/main/java/forge/gui/toolbox/FList.java b/src/main/java/forge/gui/toolbox/FList.java index 9c461d85a0d..2e195a1a2c5 100644 --- a/src/main/java/forge/gui/toolbox/FList.java +++ b/src/main/java/forge/gui/toolbox/FList.java @@ -45,7 +45,7 @@ public class FList extends JList { * TODO: Write javadoc for this method. */ private void applySkin() { - setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + FSkin.get(this).setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); ListCellRenderer renderer = new ComplexCellRenderer(); setCellRenderer(renderer); @@ -61,9 +61,10 @@ public class FList extends JList { JLabel lblItem = (JLabel) defaultRenderer.getListCellRendererComponent( lst0, val0, i0, isSelected, cellHasFocus); + FSkin.JComponentSkin lblItemSkin = FSkin.get(lblItem); lblItem.setBorder(new EmptyBorder(4, 3, 4, 3)); - lblItem.setBackground(FSkin.getColor(hasFocus() ? FSkin.Colors.CLR_ACTIVE : FSkin.Colors.CLR_INACTIVE)); - lblItem.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + lblItemSkin.setBackground(FSkin.getColor(hasFocus() ? FSkin.Colors.CLR_ACTIVE : FSkin.Colors.CLR_INACTIVE)); + lblItemSkin.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); lblItem.setFont(FSkin.getFont(13)); lblItem.setOpaque(isSelected); return lblItem; diff --git a/src/main/java/forge/gui/toolbox/FPanel.java b/src/main/java/forge/gui/toolbox/FPanel.java index 0413bfdf8ef..ba41b39c80a 100644 --- a/src/main/java/forge/gui/toolbox/FPanel.java +++ b/src/main/java/forge/gui/toolbox/FPanel.java @@ -17,7 +17,6 @@ */ package forge.gui.toolbox; -import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Graphics; @@ -51,13 +50,14 @@ import forge.gui.framework.ILocalRepaint; @SuppressWarnings("serial") public class FPanel extends JPanel implements ILocalRepaint { //========== Variable initialization + protected final FSkin.JComponentSkin skin; // Defaults for adjustable values private boolean selectable = false; private boolean hoverable = false; private boolean foregroundStretch = false; private Image foregroundImage = null; private Image backgroundTexture = null; - private Color borderColor = FSkin.getColor(FSkin.Colors.CLR_BORDERS); + private FSkin.SkinColor borderColor = FSkin.getColor(FSkin.Colors.CLR_BORDERS); private boolean borderToggle = true; private int cornerDiameter = 20; private int foregroundAlign = SwingConstants.CENTER; @@ -85,7 +85,8 @@ public class FPanel extends JPanel implements ILocalRepaint { this.setOpaque(false); // Background will follow skin theme. - this.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME)); + skin = FSkin.get(this); + skin.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME)); } // Mouse event handler @@ -138,8 +139,8 @@ public class FPanel extends JPanel implements ILocalRepaint { /** @param bool0   boolean */ public void setSelected(final boolean bool0) { selected = bool0; - if (bool0) { this.setBackground(FSkin.getColor(FSkin.Colors.CLR_ACTIVE)); } - else { this.setBackground(FSkin.getColor(FSkin.Colors.CLR_INACTIVE)); } + if (bool0) { skin.setBackground(FSkin.getColor(FSkin.Colors.CLR_ACTIVE)); } + else { skin.setBackground(FSkin.getColor(FSkin.Colors.CLR_INACTIVE)); } repaintSelf(); } @@ -203,8 +204,8 @@ public class FPanel extends JPanel implements ILocalRepaint { this.borderToggle = bool0; } - /** @param clr0   {@link java.awt.Color} */ - public void setBorderColor(final Color clr0) { + /** @param clr0   {@link forge.gui.toolbox.FSkin.SkinColor} */ + public void setBorderColor(final FSkin.SkinColor clr0) { this.borderColor = clr0; } @@ -260,10 +261,10 @@ public class FPanel extends JPanel implements ILocalRepaint { //========== Special draw methods private void drawBackgroundColor(final Graphics2D g2d0) { // Color background as appropriate - if (selected) { g2d0.setColor(FSkin.getColor(FSkin.Colors.CLR_ACTIVE)); } - else if (hovered) { g2d0.setColor(FSkin.getColor(FSkin.Colors.CLR_HOVER)); } - else if (selectable) { g2d0.setColor(FSkin.getColor(FSkin.Colors.CLR_INACTIVE)); } - else { g2d0.setColor(getBackground()); } + if (selected) { skin.setGraphicsColor(g2d0, FSkin.getColor(FSkin.Colors.CLR_ACTIVE)); } + else if (hovered) { skin.setGraphicsColor(g2d0, FSkin.getColor(FSkin.Colors.CLR_HOVER)); } + else if (selectable) { skin.setGraphicsColor(g2d0, FSkin.getColor(FSkin.Colors.CLR_INACTIVE)); } + else { skin.setGraphicsColor(g2d0, skin.getBackground()); } g2d0.fillRoundRect(0, 0, pnlW, pnlH, cornerDiameter, cornerDiameter); } @@ -327,7 +328,7 @@ public class FPanel extends JPanel implements ILocalRepaint { } private void drawBorder(final Graphics2D g2d0) { - g2d0.setColor(borderColor); + skin.setGraphicsColor(g2d0, borderColor); g2d0.drawRoundRect(0, 0, pnlW - 1, pnlH - 1, cornerDiameter, cornerDiameter); } diff --git a/src/main/java/forge/gui/toolbox/FRadioButton.java b/src/main/java/forge/gui/toolbox/FRadioButton.java index da9764e7788..6dba7a16bec 100644 --- a/src/main/java/forge/gui/toolbox/FRadioButton.java +++ b/src/main/java/forge/gui/toolbox/FRadioButton.java @@ -16,7 +16,7 @@ public class FRadioButton extends JRadioButton { public FRadioButton(String s0) { super(); this.setText(s0); - this.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + FSkin.get(this).setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); this.setFont(FSkin.getFont(14)); this.setOpaque(false); } diff --git a/src/main/java/forge/gui/toolbox/FScrollPane.java b/src/main/java/forge/gui/toolbox/FScrollPane.java index a4847dd3577..8bd21f92e9b 100644 --- a/src/main/java/forge/gui/toolbox/FScrollPane.java +++ b/src/main/java/forge/gui/toolbox/FScrollPane.java @@ -4,7 +4,6 @@ import java.awt.Component; import javax.swing.JScrollPane; import javax.swing.ScrollPaneConstants; -import javax.swing.border.LineBorder; /** * A very basic extension of JScrollPane to centralize common styling changes. @@ -33,7 +32,7 @@ public class FScrollPane extends JScrollPane { super(c0, vertical0, horizontal0); getVerticalScrollBar().setUnitIncrement(16); getViewport().setOpaque(false); - setBorder(new LineBorder(FSkin.getColor(FSkin.Colors.CLR_BORDERS), 1)); + FSkin.get(this).setLineBorder(FSkin.getColor(FSkin.Colors.CLR_BORDERS)); setOpaque(false); } } diff --git a/src/main/java/forge/gui/toolbox/FScrollPanel.java b/src/main/java/forge/gui/toolbox/FScrollPanel.java index 51be78e9ad3..bc921ed6304 100644 --- a/src/main/java/forge/gui/toolbox/FScrollPanel.java +++ b/src/main/java/forge/gui/toolbox/FScrollPanel.java @@ -22,7 +22,6 @@ import java.awt.Color; import java.awt.Component; import java.awt.Composite; import java.awt.Dimension; -import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.LayoutManager; @@ -40,6 +39,8 @@ import javax.swing.ScrollPaneConstants; import javax.swing.Timer; import forge.gui.framework.ILocalRepaint; +import forge.gui.toolbox.FSkin.JComponentSkin; +import forge.gui.toolbox.FSkin.SkinColor; /** * An extension of JScrollPane that can be used as a panel and supports using arrow buttons to scroll instead of scrollbars @@ -195,12 +196,13 @@ public class FScrollPanel extends JScrollPane { } private abstract class ArrowButton extends JLabel implements ILocalRepaint { - private final Color clrFore = FSkin.getColor(FSkin.Colors.CLR_TEXT); - private final Color clrBack = FSkin.getColor(FSkin.Colors.CLR_INACTIVE); - private final Color d50 = FSkin.stepColor(clrBack, -50); - private final Color d10 = FSkin.stepColor(clrBack, -10); - private final Color l10 = FSkin.stepColor(clrBack, 10); - private final Color l20 = FSkin.stepColor(clrBack, 20); + private final JComponentSkin skin; + private final SkinColor clrFore = FSkin.getColor(FSkin.Colors.CLR_TEXT); + private final SkinColor clrBack = FSkin.getColor(FSkin.Colors.CLR_INACTIVE); + private final SkinColor d50 = clrBack.stepColor(-50); + private final SkinColor d10 = clrBack.stepColor(-10); + private final SkinColor l10 = clrBack.stepColor(10); + private final SkinColor l20 = clrBack.stepColor(20); private final AlphaComposite alphaDefault = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.7f); private final AlphaComposite alphaHovered = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.9f); protected final int arrowSize = 6; @@ -210,6 +212,7 @@ public class FScrollPanel extends JScrollPane { protected ArrowButton(final JScrollBar scrollBar0, final int incrementDirection0) { super(""); + skin = FSkin.get(this); scrollBar = scrollBar0; incrementDirection = incrementDirection0; timer.setInitialDelay(500); //wait half a second after mouse down before starting timer @@ -235,16 +238,15 @@ public class FScrollPanel extends JScrollPane { Composite oldComp = g2d.getComposite(); g2d.setComposite(hovered ? alphaHovered : alphaDefault); - GradientPaint gradient = new GradientPaint(0, h, d10, 0, 0, l20); - g2d.setPaint(gradient); + skin.setGraphicsGradientPaint(g2d, 0, h, d10, 0, 0, l20); g.fillRect(0, 0, w, h); - g.setColor(d50); + skin.setGraphicsColor(g, d50); g.drawRect(0, 0, w - 1, h - 1); - g.setColor(l10); + skin.setGraphicsColor(g, l10); g.drawRect(1, 1, w - 3, h - 3); - g.setColor(clrFore); + skin.setGraphicsColor(g, clrFore); drawArrow(g); super.paintComponent(g); diff --git a/src/main/java/forge/gui/toolbox/FSkin.java b/src/main/java/forge/gui/toolbox/FSkin.java index 532e5654ee0..94b6448ec0a 100644 --- a/src/main/java/forge/gui/toolbox/FSkin.java +++ b/src/main/java/forge/gui/toolbox/FSkin.java @@ -18,7 +18,10 @@ package forge.gui.toolbox; import java.awt.Color; +import java.awt.Component; import java.awt.Font; +import java.awt.GradientPaint; +import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.RenderingHints; @@ -30,15 +33,25 @@ import java.util.HashMap; import java.util.Map; import javax.imageio.ImageIO; +import javax.swing.BorderFactory; import javax.swing.ImageIcon; +import javax.swing.JComponent; +import javax.swing.JFrame; +import javax.swing.JTable; import javax.swing.SwingUtilities; import javax.swing.UIManager; +import javax.swing.UnsupportedLookAndFeelException; +import javax.swing.border.Border; import javax.swing.border.LineBorder; +import javax.swing.text.JTextComponent; import org.apache.commons.lang.WordUtils; import forge.FThreads; +import forge.Singletons; import forge.gui.GuiUtils; +import forge.properties.ForgePreferences.FPref; +import forge.util.TypeUtil; import forge.view.FView; /** @@ -50,6 +63,209 @@ import forge.view.FView; public enum FSkin { /** Singleton instance of skin. */ SINGLETON_INSTANCE; + + public static class ComponentSkin { + protected T comp; + private SkinColor foreground, background; + private boolean needRepaintOnUpdate; + + private ComponentSkin(T comp0) { + this.comp = comp0; + } + + public SkinColor getForeground() { + return this.foreground; + } + + public void setForeground(SkinColor skinColor) { + this.foreground = skinColor; + this.comp.setForeground(skinColor.color); + } + public void setForeground(Color color) { + this.foreground = null; //ensure this field is reset when static color set + this.comp.setForeground(color); + } + + public SkinColor getBackground() { + return this.background; + } + + public void setBackground(SkinColor skinColor) { + this.background = skinColor; + this.comp.setBackground(skinColor.color); + } + public void setBackground(Color color) { + this.background = null; //ensure this field is reset when static color set + this.comp.setBackground(color); + } + + public void setGraphicsColor(Graphics g, SkinColor skinColor) { + this.needRepaintOnUpdate = true; + g.setColor(skinColor.color); + } + + public void setGraphicsGradientPaint(Graphics2D g2d, float x1, float y1, SkinColor skinColor1, float x2, float y2, SkinColor skinColor2) { + this.needRepaintOnUpdate = true; + g2d.setPaint(new GradientPaint(x1, y1, skinColor1.color, x2, y2, skinColor2.color)); + } + public void setGraphicsGradientPaint(Graphics2D g2d, float x1, float y1, Color color1, float x2, float y2, SkinColor skinColor2) { + this.needRepaintOnUpdate = true; + g2d.setPaint(new GradientPaint(x1, y1, color1, x2, y2, skinColor2.color)); + } + public void setGraphicsGradientPaint(Graphics2D g2d, float x1, float y1, SkinColor skinColor1, float x2, float y2, Color color2) { + this.needRepaintOnUpdate = true; + g2d.setPaint(new GradientPaint(x1, y1, skinColor1.color, x2, y2, color2)); + } + } + public static class JComponentSkin extends ComponentSkin { + private class LineBorder { + private final SkinColor skinColor; + private final int thickness; + private final boolean rounded; + + private LineBorder(SkinColor skinColor0, int thickness0, boolean rounded0) { + this.skinColor = skinColor0; + this.thickness = thickness0; + this.rounded = rounded0; + } + + private void apply() { + JComponentSkin.this.comp.setBorder(BorderFactory.createLineBorder(this.skinColor.color, this.thickness, this.rounded)); + } + } + private LineBorder lineBorder; + + private class MatteBorder { + private final int top, left, bottom, right; + private final SkinColor skinColor; + + private MatteBorder(int top0, int left0, int bottom0, int right0, SkinColor skinColor0) { + this.top = top0; + this.left = left0; + this.bottom = bottom0; + this.right = right0; + this.skinColor = skinColor0; + } + + private void apply() { + JComponentSkin.this.comp.setBorder(BorderFactory.createMatteBorder(this.top, this.left, this.bottom, this.right, this.skinColor.color)); + } + } + private MatteBorder matteBorder; + + private JComponentSkin(T comp0) { + super(comp0); + } + + public void setLineBorder(SkinColor skinColor) { + setLineBorder(skinColor, 1, false); + } + public void setLineBorder(SkinColor skinColor, int thickness) { + setLineBorder(skinColor, thickness, false); + } + public void setLineBorder(SkinColor skinColor, int thickness, boolean rounded) { + this.lineBorder = new LineBorder(skinColor, thickness, rounded); + this.lineBorder.apply(); + } + + public void setMatteBorder(int top, int left, int bottom, int right, SkinColor skinColor) { + this.matteBorder = new MatteBorder(top, left, bottom, right, skinColor); + this.matteBorder.apply(); + } + } + public static class JTextComponentSkin extends JComponentSkin { + private SkinColor caretColor; + + private JTextComponentSkin(T comp0) { + super(comp0); + } + + public SkinColor getCaretColor() { + return this.caretColor; + } + + public void setCaretColor(SkinColor skinColor) { + this.caretColor = skinColor; + this.comp.setCaretColor(skinColor.color); + } + public void setCaretColor(Color color) { + this.caretColor = null; //ensure this field is reset when static color set + this.comp.setCaretColor(color); + } + } + public static class JTableSkin extends JComponentSkin { + private SkinColor selectionForeground, selectionBackground; + + private JTableSkin(T comp0) { + super(comp0); + } + + public SkinColor getSelectionForeground() { + return this.selectionForeground; + } + + public void setSelectionForeground(SkinColor skinColor) { + this.selectionForeground = skinColor; + this.comp.setSelectionForeground(skinColor.color); + } + public void setSelectionForeground(Color color) { + this.selectionForeground = null; //ensure this field is reset when static color set + this.comp.setSelectionForeground(color); + } + + public SkinColor getSelectionBackground() { + return this.selectionBackground; + } + + public void setSelectionBackground(SkinColor skinColor) { + this.selectionBackground = skinColor; + this.comp.setSelectionBackground(skinColor.color); + } + public void setSelectionBackground(Color color) { + this.selectionBackground = null; //ensure this field is reset when static color set + this.comp.setSelectionBackground(color); + } + } + + @SuppressWarnings("rawtypes") + private static HashMap skinnedComps = new HashMap(); + + @SuppressWarnings("unchecked") + public static ComponentSkin get(T comp) { + ComponentSkin skinnedComp = skinnedComps.get(comp); + if (skinnedComp == null) { + skinnedComp = new ComponentSkin(comp); + skinnedComps.put(comp, skinnedComp); + } + return skinnedComp; + } + @SuppressWarnings("unchecked") + public static JComponentSkin get(T comp) { + JComponentSkin skinnedComp = TypeUtil.safeCast(skinnedComps.get(comp), JComponentSkin.class); + if (skinnedComp == null) { + skinnedComp = new JComponentSkin(comp); + skinnedComps.put(comp, skinnedComp); + } + return skinnedComp; + } + @SuppressWarnings("unchecked") + public static JTextComponentSkin get(T comp) { + JTextComponentSkin skinnedComp = TypeUtil.safeCast(skinnedComps.get(comp), JTextComponentSkin.class); + if (skinnedComp == null) { + skinnedComp = new JTextComponentSkin(comp); + skinnedComps.put(comp, skinnedComp); + } + return skinnedComp; + } + @SuppressWarnings("unchecked") + public static JTableSkin get(T comp) { + JTableSkin skinnedComp = TypeUtil.safeCast(skinnedComps.get(comp), JTableSkin.class); + if (skinnedComp == null) { + skinnedComp = new JTableSkin(comp); + skinnedComps.put(comp, skinnedComp); + } + return skinnedComp; + } /** */ public enum Backgrounds implements SkinProp { /** */ @@ -64,6 +280,118 @@ public enum FSkin { @Override public int[] getCoords() { return coords; } } + + /** + * Retrieves a color from this skin's color map. + * + * @param c0   Colors property (from enum) + * @return Color + */ + public static SkinColor getColor(final Colors c0) { + return SkinColor.baseColors.get(c0); + } + + /** Steps RGB components of a color up or down. + * Returns opaque (non-alpha) stepped color. + * Plus for lighter, minus for darker. + * + * @param clr0 {@link java.awt.Color} + * @param step int + * @return {@link java.awt.Color} + */ + public static Color stepColor(Color clr0, int step) { + int r = clr0.getRed(); + int g = clr0.getGreen(); + int b = clr0.getBlue(); + + // Darker + if (step < 0) { + r = ((r + step > 0) ? r + step : 0); + g = ((g + step > 0) ? g + step : 0); + b = ((b + step > 0) ? b + step : 0); + } + else { + r = ((r + step < 255) ? r + step : 255); + g = ((g + step < 255) ? g + step : 255); + b = ((b + step < 255) ? b + step : 255); + } + + return new Color(r, g, b); + } + + /** Returns RGB components of a color, with a new + * value for alpha. 0 = transparent, 255 = opaque. + * + * @param clr0 {@link java.awt.Color} + * @param alpha int + * @return {@link java.awt.Color} + */ + public static Color alphaColor(Color clr0, int alpha) { + return new Color(clr0.getRed(), clr0.getGreen(), clr0.getBlue(), alpha); + } + + public static class SkinColor { + private static final HashMap baseColors = new HashMap(); + private static final int NO_BRIGHTNESS_DELTA = 0; + private static final int NO_STEP = -10000; //needs to be large negative since small negative values are valid + private static final int NO_ALPHA = -1; + + private final Colors baseColor; + private final int brightnessDelta; + private final int step; + private final int alpha; + private Color color; + + //private constructors for color that changes with skin (use FSkin.getColor()) + private SkinColor(Colors baseColor0) { + this(baseColor0, NO_BRIGHTNESS_DELTA, NO_STEP, NO_ALPHA); + } + private SkinColor(Colors baseColor0, int brightnessDelta0, int step0, int alpha0) { + this.baseColor = baseColor0; + this.brightnessDelta = brightnessDelta0; + this.step = step0; + this.alpha = alpha0; + this.updateColor(); + } + + public SkinColor brighter() { + return new SkinColor(this.baseColor, this.brightnessDelta + 1, this.step, this.alpha); + } + + public SkinColor darker() { + return new SkinColor(this.baseColor, this.brightnessDelta - 1, this.step, this.alpha); + } + + public SkinColor stepColor(int step0) { + return new SkinColor(this.baseColor, this.brightnessDelta, step0, this.alpha); + } + + public SkinColor alphaColor(int alpha0) { + return new SkinColor(this.baseColor, this.brightnessDelta, this.step, alpha0); + } + + private void updateColor() { + this.color = this.baseColor.color; + if (this.brightnessDelta != NO_BRIGHTNESS_DELTA) { + if (this.brightnessDelta < 0) { + for (int i = 0; i > this.brightnessDelta; i--) { + this.color = this.color.darker(); + } + } + else { + for (int i = 0; i < this.brightnessDelta; i++) { + this.color = this.color.brighter(); + } + } + } + if (this.step != NO_STEP) { + this.color = FSkin.stepColor(this.color, this.step); + } + if (this.alpha != NO_ALPHA) { + this.color = FSkin.stepColor(this.color, this.alpha); + } + } + } /** */ public enum Colors implements SkinProp { /** */ @@ -81,12 +409,34 @@ public enum FSkin { CLR_THEME2 (new int[] {70, 230}), /** */ CLR_OVERLAY (new int[] {70, 250}); + private Color color; private int[] coords; + /** @param xy   int[] coordinates */ Colors(final int[] xy) { this.coords = xy; } + /** @return int[] */ @Override public int[] getCoords() { return coords; } + + public static void updateAll() { + for (final Colors c : Colors.values()) { + c.updateColor(); + } + if (SkinColor.baseColors.size() == 0) { //initialize base skin colors if needed + for (final Colors c : Colors.values()) { + SkinColor.baseColors.put(c, new SkinColor(c)); + } + } + } + + private void updateColor() { + tempCoords = this.getCoords(); + x0 = tempCoords[0]; + y0 = tempCoords[1]; + + color = FSkin.getColorFromPixel(bimPreferredSprite.getRGB(x0, y0)); + } } /** int[] can hold [xcoord, ycoord, width, height, newwidth, newheight]. */ @@ -404,7 +754,6 @@ public enum FSkin { private static Map icons; private static Map images; - private static Map colors; private static Map fixedFonts; private static Map plainFonts; @@ -452,11 +801,9 @@ public enum FSkin { if (FSkin.icons != null) { FSkin.icons.clear(); } if (FSkin.images != null) { FSkin.images.clear(); } - if (FSkin.colors != null) { FSkin.colors.clear(); } FSkin.icons = new HashMap(); FSkin.images = new HashMap(); - FSkin.colors = new HashMap(); final File f = new File(preferredDir + FILE_SPLASH); if (!f.exists()) { @@ -587,7 +934,7 @@ public enum FSkin { FSkin.setIcon(Backgrounds.BG_MATCH, preferredDir + FILE_MATCH_BG); // Run through enums and load their coords. - for (final Colors e : Colors.values()) { FSkin.setColor(e); } + Colors.updateAll(); for (final ZoneImages e : ZoneImages.values()) { FSkin.setImage(e); } for (final DockIcons e : DockIcons.values()) { FSkin.setIcon(e); } for (final InterfaceIcons e : InterfaceIcons.values()) { FSkin.setIcon(e); } @@ -629,6 +976,11 @@ public enum FSkin { FSkin.bimPreferredSprite = null; FSkin.bimDefaultAvatars = null; FSkin.bimPreferredAvatars = null; + + // Set look and feel after skin loaded + FSkin.setProgessBarMessage("Setting look and feel..."); + ForgeLookAndFeel laf = new ForgeLookAndFeel(); + laf.setForgeLookAndFeel(Singletons.getView().getFrame()); } private static void setDefaultFontSize() { @@ -753,16 +1105,6 @@ public enum FSkin { return scaled; } - /** - * Retrieves a color from this skin's color map. - * - * @param s0   Skin property (from enum) - * @return Color - */ - public static Color getColor(final SkinProp s0) { - return colors.get(s0); - } - /** * Gets the skins. * @@ -802,48 +1144,9 @@ public enum FSkin { public static Map getAvatars() { return avatars; } - - /** Steps RGB components of a color up or down. - * Returns opaque (non-alpha) stepped color. - * Plus for lighter, minus for darker. - * - * @param clr0 {@link java.awt.Color} - * @param step int - * @return {@link java.awt.Color} - */ - public static Color stepColor(Color clr0, int step) { - int r = clr0.getRed(); - int g = clr0.getGreen(); - int b = clr0.getBlue(); - - // Darker - if (step < 0) { - r = ((r + step > 0) ? r + step : 0); - g = ((g + step > 0) ? g + step : 0); - b = ((b + step > 0) ? b + step : 0); - } - else { - r = ((r + step < 255) ? r + step : 255); - g = ((g + step < 255) ? g + step : 255); - b = ((b + step < 255) ? b + step : 255); - } - - return new Color(r, g, b); - } public static boolean isLoaded() { return loaded; } - /** Returns RGB components of a color, with a new - * value for alpha. 0 = transparent, 255 = opaque. - * - * @param clr0 {@link java.awt.Color} - * @param alpha int - * @return {@link java.awt.Color} - */ - public static Color alphaColor(Color clr0, int alpha) { - return new Color(clr0.getRed(), clr0.getGreen(), clr0.getBlue(), alpha); - } - /** *

* getColorFromPixel. @@ -947,14 +1250,6 @@ public enum FSkin { FSkin.images.put(s0, isOldStyle ? bimOldFoils.getSubimage(x0, y0, w0, h0) : bimFoils.getSubimage(x0, y0, w0, h0)); } - private static void setColor(final SkinProp s0) { - tempCoords = s0.getCoords(); - x0 = tempCoords[0]; - y0 = tempCoords[1]; - - FSkin.colors.put(s0, FSkin.getColorFromPixel(bimPreferredSprite.getRGB(x0, y0))); - } - private static void setFont(final int size) { plainFonts.put(size, font.deriveFont(Font.PLAIN, size)); } @@ -1047,4 +1342,154 @@ public enum FSkin { FSkin.images.put(s0, bi0); } } + + /** + * Sets the look and feel of the GUI based on the selected Forge theme. + * + * @see UIManager Defaults + */ + private static class ForgeLookAndFeel { //needs to live in FSkin for access to skin colors + + private Color FORE_COLOR = FSkin.getColor(FSkin.Colors.CLR_TEXT).color; + private Color BACK_COLOR = FSkin.getColor(FSkin.Colors.CLR_THEME2).color; + private Color HIGHLIGHT_COLOR = BACK_COLOR.brighter(); + private Border LINE_BORDER = BorderFactory.createLineBorder(FORE_COLOR.darker(), 1); + private Border EMPTY_BORDER = BorderFactory.createEmptyBorder(2,2,2,2); + + /** + * Sets the look and feel of the GUI based on the selected Forge theme. + */ + public void setForgeLookAndFeel(JFrame appFrame) { + if (isUIManagerEnabled()) { + if (setMetalLookAndFeel(appFrame)) { + setMenusLookAndFeel(); + setComboBoxLookAndFeel(); + setTabbedPaneLookAndFeel(); + setButtonLookAndFeel(); + } + } + } + + /** + * Sets the standard "Java L&F" (also called "Metal") that looks the same on all platforms. + *

+ * If not explicitly set then the Mac uses its native L&F which does + * not support various settings (eg. combobox background color). + */ + private boolean setMetalLookAndFeel(JFrame appFrame) { + boolean isMetalLafSet = false; + try { + UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); + SwingUtilities.updateComponentTreeUI(appFrame); + isMetalLafSet = true; + } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) { + // Auto-generated catch block ignores the exception, but sends it to System.err and probably forge.log. + e.printStackTrace(); + } + return isMetalLafSet; + } + + /** + * Sets the look and feel for a JMenuBar, JMenu, JMenuItem & variations. + */ + private void setMenusLookAndFeel() { + // JMenuBar + Color clrTheme = FSkin.getColor(FSkin.Colors.CLR_THEME).color; + Color backgroundColor = FSkin.stepColor(clrTheme, 0); + Color menuBarEdgeColor = FSkin.stepColor(clrTheme, -80); + UIManager.put("MenuBar.foreground", FORE_COLOR); + UIManager.put("MenuBar.gradient", getColorGradients(backgroundColor.darker(), backgroundColor)); + UIManager.put("MenuBar.border", BorderFactory.createMatteBorder(0, 0, 1, 0, menuBarEdgeColor)); + // JMenu + UIManager.put("Menu.foreground", FORE_COLOR); + UIManager.put("Menu.background", BACK_COLOR); + UIManager.put("Menu.borderPainted", false); + UIManager.put("Menu.selectionBackground", HIGHLIGHT_COLOR); + UIManager.put("Menu.selectionForeground", FORE_COLOR); + UIManager.put("Menu.border", EMPTY_BORDER); + UIManager.put("Menu.opaque", false); + // JPopupMenu + UIManager.put("PopupMenu.border", LINE_BORDER); + UIManager.put("PopupMenu.background", BACK_COLOR); + UIManager.put("PopupMenu.foreground", FORE_COLOR); + // JMenuItem + UIManager.put("MenuItem.foreground", FORE_COLOR); + UIManager.put("MenuItem.background", BACK_COLOR); + UIManager.put("MenuItem.border", EMPTY_BORDER); + UIManager.put("MenuItem.selectionBackground", HIGHLIGHT_COLOR); + UIManager.put("MenuItem.selectionForeground", FORE_COLOR); + UIManager.put("MenuItem.acceleratorForeground", FORE_COLOR.darker()); + UIManager.put("MenuItem.opaque", true); + // JSeparator (needs to be opaque!). + UIManager.put("Separator.foreground", FORE_COLOR.darker()); + UIManager.put("Separator.background", BACK_COLOR); + // JRadioButtonMenuItem + UIManager.put("RadioButtonMenuItem.foreground", FORE_COLOR); + UIManager.put("RadioButtonMenuItem.background", BACK_COLOR); + UIManager.put("RadioButtonMenuItem.selectionBackground", HIGHLIGHT_COLOR); + UIManager.put("RadioButtonMenuItem.selectionForeground", FORE_COLOR); + UIManager.put("RadioButtonMenuItem.border", EMPTY_BORDER); + UIManager.put("RadioButtonMenuItem.acceleratorForeground", FORE_COLOR.darker()); + // JCheckboxMenuItem + UIManager.put("CheckBoxMenuItem.foreground", FORE_COLOR); + UIManager.put("CheckBoxMenuItem.background", BACK_COLOR); + UIManager.put("CheckBoxMenuItem.selectionBackground", HIGHLIGHT_COLOR); + UIManager.put("CheckBoxMenuItem.selectionForeground", FORE_COLOR); + UIManager.put("CheckBoxMenuItem.border", EMPTY_BORDER); + UIManager.put("CheckBoxMenuItem.acceleratorForeground", FORE_COLOR.darker()); + } + + private void setTabbedPaneLookAndFeel() { + UIManager.put("TabbedPane.selected", HIGHLIGHT_COLOR); + UIManager.put("TabbedPane.contentOpaque", FSkin.getColor(FSkin.Colors.CLR_THEME)); + UIManager.put("TabbedPane.unselectedBackground", BACK_COLOR); + } + + /** + * Sets the look and feel for a non-editable JComboBox. + */ + private void setComboBoxLookAndFeel() { + UIManager.put("ComboBox.background", BACK_COLOR); + UIManager.put("ComboBox.foreground", FORE_COLOR); + UIManager.put("ComboBox.selectionBackground", HIGHLIGHT_COLOR); + UIManager.put("ComboBox.selectionForeground", FORE_COLOR); + UIManager.put("ComboBox.disabledBackground", BACK_COLOR); + UIManager.put("ComboBox.disabledForeground", BACK_COLOR.darker()); + UIManager.put("ComboBox.font", getDefaultFont("ComboBox.font")); + UIManager.put("Button.select", HIGHLIGHT_COLOR); + } + + private void setButtonLookAndFeel() { + UIManager.put("Button.foreground", FORE_COLOR); + UIManager.put("Button.background", BACK_COLOR); + UIManager.put("Button.select", HIGHLIGHT_COLOR); + UIManager.put("Button.focus", FORE_COLOR.darker()); + UIManager.put("Button.rollover", false); + } + + /** + * Determines whether theme styles should be applied to GUI. + *

+ * TODO: Currently is using UI_THEMED_COMBOBOX setting but will + * eventually want to rename for clarity. + */ + private boolean isUIManagerEnabled() { + return Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_THEMED_COMBOBOX); + } + + private Font getDefaultFont(String component) { + return FSkin.getFont(UIManager.getFont(component).getSize()); + } + + private ArrayList getColorGradients(Color bottom, Color top) { + ArrayList gradients = new ArrayList<>(); + gradients.add(0.0); + gradients.add(0.0); + gradients.add(top); + gradients.add(bottom); + gradients.add(bottom); + return gradients; + } + + } } diff --git a/src/main/java/forge/gui/toolbox/FSpinner.java b/src/main/java/forge/gui/toolbox/FSpinner.java index 177dc439820..df2c142b8e3 100644 --- a/src/main/java/forge/gui/toolbox/FSpinner.java +++ b/src/main/java/forge/gui/toolbox/FSpinner.java @@ -37,9 +37,10 @@ public class FSpinner extends JSpinner { this.setEditor(new JSpinner.NumberEditor(this, "##")); JFormattedTextField txt = ((JSpinner.NumberEditor)this.getEditor()).getTextField(); ((NumberFormatter)txt.getFormatter()).setAllowsInvalid(false); - txt.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); - txt.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); - txt.setCaretColor(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + FSkin.JTextComponentSkin txtSkin = FSkin.get(txt); + txtSkin.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + txtSkin.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + txtSkin.setCaretColor(FSkin.getColor(FSkin.Colors.CLR_TEXT)); txt.setMargin(new Insets(5, 5, 5, 5)); txt.setOpaque(true); diff --git a/src/main/java/forge/gui/toolbox/FTabbedPane.java b/src/main/java/forge/gui/toolbox/FTabbedPane.java index a881b3bbc5b..4db08be9082 100644 --- a/src/main/java/forge/gui/toolbox/FTabbedPane.java +++ b/src/main/java/forge/gui/toolbox/FTabbedPane.java @@ -11,7 +11,8 @@ public class FTabbedPane extends JTabbedPane { private static final long serialVersionUID = 2207172560817790885L; public FTabbedPane() { - this.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME)); - this.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + FSkin.JComponentSkin skin = FSkin.get(this); + skin.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME)); + skin.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); } } diff --git a/src/main/java/forge/gui/toolbox/FTextArea.java b/src/main/java/forge/gui/toolbox/FTextArea.java index 22ff4696920..5c480cc3782 100644 --- a/src/main/java/forge/gui/toolbox/FTextArea.java +++ b/src/main/java/forge/gui/toolbox/FTextArea.java @@ -11,8 +11,9 @@ public class FTextArea extends JTextArea { /** */ public FTextArea() { super(); - this.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); - this.setCaretColor(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + FSkin.JTextComponentSkin skin = FSkin.get(this); + skin.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + skin.setCaretColor(FSkin.getColor(FSkin.Colors.CLR_TEXT)); this.setOpaque(false); this.setWrapStyleWord(true); this.setLineWrap(true); diff --git a/src/main/java/forge/gui/toolbox/FTextField.java b/src/main/java/forge/gui/toolbox/FTextField.java index d99a5e926eb..2c943240dfd 100644 --- a/src/main/java/forge/gui/toolbox/FTextField.java +++ b/src/main/java/forge/gui/toolbox/FTextField.java @@ -49,14 +49,16 @@ public class FTextField extends JTextField { } public static final int HEIGHT = 25; //TODO: calculate this somehow instead of hard-coding it - + + private final FSkin.JTextComponentSkin skin; private String ghostText; private boolean showGhostTextWithFocus; private FTextField(Builder builder) { - this.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); - this.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); - this.setCaretColor(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + skin = FSkin.get(this); + skin.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + skin.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + skin.setCaretColor(FSkin.getColor(FSkin.Colors.CLR_TEXT)); this.setMargin(new Insets(3, 3, 2, 3)); this.setOpaque(true); @@ -115,7 +117,7 @@ public class FTextField extends JTextField { final Insets margin = this.getMargin(); final Graphics2D g2d = (Graphics2D)g.create(); g2d.setFont(this.getFont()); - g2d.setColor(FSkin.stepColor(this.getForeground(), 20)); + skin.setGraphicsColor(g2d, skin.getForeground().stepColor(20)); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.drawString(this.ghostText, margin.left + 2, margin.top + 15); //account for borders (TODO: why +15?) g2d.dispose(); diff --git a/src/main/java/forge/gui/toolbox/itemmanager/filters/ItemFilter.java b/src/main/java/forge/gui/toolbox/itemmanager/filters/ItemFilter.java index cc89a3ff12f..e7392c7508b 100644 --- a/src/main/java/forge/gui/toolbox/itemmanager/filters/ItemFilter.java +++ b/src/main/java/forge/gui/toolbox/itemmanager/filters/ItemFilter.java @@ -1,6 +1,5 @@ package forge.gui.toolbox.itemmanager.filters; -import javax.swing.BorderFactory; import javax.swing.JLabel; import javax.swing.JPanel; @@ -31,7 +30,7 @@ public abstract class ItemFilter { if (this.panel == null) { this.panel = new JPanel(new MigLayout("insets 0, gap 2")); this.panel.setOpaque(false); - this.panel.setBorder(BorderFactory.createMatteBorder(1, 2, 1, 2, FSkin.getColor(FSkin.Colors.CLR_TEXT))); + FSkin.get(this.panel).setMatteBorder(1, 2, 1, 2, FSkin.getColor(FSkin.Colors.CLR_TEXT)); this.lblPanelTitle = new FLabel.Builder().fontSize(10).build(); this.panel.add(this.lblPanelTitle, "top"); diff --git a/src/main/java/forge/gui/toolbox/itemmanager/table/ItemTable.java b/src/main/java/forge/gui/toolbox/itemmanager/table/ItemTable.java index f0e15a57b9a..3fe46fe832e 100644 --- a/src/main/java/forge/gui/toolbox/itemmanager/table/ItemTable.java +++ b/src/main/java/forge/gui/toolbox/itemmanager/table/ItemTable.java @@ -53,6 +53,7 @@ import forge.item.InventoryItem; */ @SuppressWarnings("serial") public final class ItemTable extends JTable { + private final FSkin.JTableSkin> skin; private final ItemManager itemManager; private final ItemTableModel tableModel; @@ -71,19 +72,20 @@ public final class ItemTable extends JTable { this.tableModel = new ItemTableModel(this, model0); // use different selection highlight colors for focused vs. unfocused tables - setSelectionBackground(FSkin.getColor(FSkin.Colors.CLR_INACTIVE)); - setSelectionForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + skin = FSkin.get(this); + skin.setSelectionBackground(FSkin.getColor(FSkin.Colors.CLR_INACTIVE)); + skin.setSelectionForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); addFocusListener(new FocusListener() { @Override public void focusLost(FocusEvent e) { if (!e.isTemporary()) { - setSelectionBackground(FSkin.getColor(FSkin.Colors.CLR_INACTIVE)); + skin.setSelectionBackground(FSkin.getColor(FSkin.Colors.CLR_INACTIVE)); } } @Override public void focusGained(FocusEvent e) { - setSelectionBackground(FSkin.getColor(FSkin.Colors.CLR_ACTIVE)); + skin.setSelectionBackground(FSkin.getColor(FSkin.Colors.CLR_ACTIVE)); // if nothing selected when we gain focus, select the first row (if exists) if (-1 == getSelectedRow() && 0 < getRowCount()) { setRowSelectionInterval(0, 0); diff --git a/src/main/java/forge/gui/toolbox/special/DeckLister.java b/src/main/java/forge/gui/toolbox/special/DeckLister.java index db2991dded9..c862a815552 100644 --- a/src/main/java/forge/gui/toolbox/special/DeckLister.java +++ b/src/main/java/forge/gui/toolbox/special/DeckLister.java @@ -33,8 +33,6 @@ import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.SwingConstants; -import javax.swing.border.MatteBorder; - import net.miginfocom.swing.MigLayout; import forge.Command; import forge.Singletons; @@ -69,7 +67,8 @@ public class DeckLister extends JPanel implements ILocalRepaint { private RowPanel[] rows; private final GameType gametype; private Command cmdDelete, cmdRowSelect; - private final Color clrDefault, clrHover, clrActive, clrBorders; + private final Color clrDefault; + private final FSkin.SkinColor clrHover, clrActive, clrBorders; /** * Creates deck list for selected decks for quick deleting, editing, and @@ -125,7 +124,7 @@ public class DeckLister extends JPanel implements ILocalRepaint { // scroll panes will have difficulty dynamically resizing if 100% width // is set. final JPanel rowTitle = new TitlePanel(); - rowTitle.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + FSkin.get(rowTitle).setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); rowTitle.setLayout(new MigLayout("insets 0, gap 0")); rowTitle.add(new FLabel.Builder().text("Delete").fontAlign(SwingConstants.CENTER).build(), @@ -203,7 +202,7 @@ public class DeckLister extends JPanel implements ILocalRepaint { @Override public void mouseEntered(final MouseEvent e) { if (!r0.selected) { - r0.setBackground(DeckLister.this.clrHover); + FSkin.get(r0).setBackground(DeckLister.this.clrHover); r0.setOpaque(true); } } @@ -211,7 +210,7 @@ public class DeckLister extends JPanel implements ILocalRepaint { @Override public void mouseExited(final MouseEvent e) { if (!r0.selected) { - r0.setBackground(DeckLister.this.clrDefault); + FSkin.get(r0).setBackground(DeckLister.this.clrDefault); r0.setOpaque(false); } } @@ -241,7 +240,7 @@ public class DeckLister extends JPanel implements ILocalRepaint { @Override public void mouseEntered(final MouseEvent e) { if (!r0.selected) { - r0.setBackground(DeckLister.this.clrHover); + FSkin.get(r0).setBackground(DeckLister.this.clrHover); r0.setOpaque(true); } } @@ -249,7 +248,7 @@ public class DeckLister extends JPanel implements ILocalRepaint { @Override public void mouseExited(final MouseEvent e) { if (!r0.selected) { - r0.setBackground(DeckLister.this.clrDefault); + FSkin.get(r0).setBackground(DeckLister.this.clrDefault); r0.setOpaque(false); } } @@ -284,7 +283,7 @@ public class DeckLister extends JPanel implements ILocalRepaint { this.setOpaque(false); this.setBackground(new Color(0, 0, 0, 0)); this.setLayout(new MigLayout("insets 0, gap 0")); - this.setBorder(new MatteBorder(0, 0, 1, 0, DeckLister.this.clrBorders)); + FSkin.get(this).setMatteBorder(0, 0, 1, 0, DeckLister.this.clrBorders); this.deck = d0; this.addMouseListener(new MouseAdapter() { @@ -292,7 +291,7 @@ public class DeckLister extends JPanel implements ILocalRepaint { public void mouseEntered(final MouseEvent e) { RowPanel.this.hovered = true; if (!RowPanel.this.selected) { - ((RowPanel) e.getSource()).setBackground(DeckLister.this.clrHover); + FSkin.get(((RowPanel) e.getSource())).setBackground(DeckLister.this.clrHover); ((RowPanel) e.getSource()).setOpaque(true); } } @@ -301,7 +300,7 @@ public class DeckLister extends JPanel implements ILocalRepaint { public void mouseExited(final MouseEvent e) { RowPanel.this.hovered = false; if (!RowPanel.this.selected) { - ((RowPanel) e.getSource()).setBackground(DeckLister.this.clrDefault); + FSkin.get(((RowPanel) e.getSource())).setBackground(DeckLister.this.clrDefault); ((RowPanel) e.getSource()).setOpaque(false); } } @@ -321,7 +320,9 @@ public class DeckLister extends JPanel implements ILocalRepaint { public void setSelected(final boolean b0) { this.selected = b0; this.setOpaque(b0); - this.setBackground(b0 ? DeckLister.this.clrActive : (this.hovered ? DeckLister.this.clrHover : DeckLister.this.clrDefault)); + if (b0) { FSkin.get(this).setBackground(DeckLister.this.clrActive); } + else if (this.hovered) { FSkin.get(this).setBackground(DeckLister.this.clrHover); } + else { FSkin.get(this).setBackground(DeckLister.this.clrDefault); } } public boolean isSelected() { @@ -352,7 +353,7 @@ public class DeckLister extends JPanel implements ILocalRepaint { public GenericLabel(final String txt0) { super(txt0); this.setHorizontalAlignment(SwingConstants.CENTER); - this.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + FSkin.get(this).setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); this.setFont(FSkin.getBoldFont(12)); } } diff --git a/src/main/java/forge/gui/toolbox/special/PhaseLabel.java b/src/main/java/forge/gui/toolbox/special/PhaseLabel.java index cece1f6efc2..c65592da83f 100644 --- a/src/main/java/forge/gui/toolbox/special/PhaseLabel.java +++ b/src/main/java/forge/gui/toolbox/special/PhaseLabel.java @@ -1,6 +1,5 @@ package forge.gui.toolbox.special; -import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.MouseAdapter; @@ -115,7 +114,7 @@ public class PhaseLabel extends JLabel { public void paintComponent(final Graphics g) { final int w = this.getWidth(); final int h = this.getHeight(); - Color c; + FSkin.SkinColor c; // Set color according to skip or active or hover state of label if (this.hover) { @@ -131,7 +130,7 @@ public class PhaseLabel extends JLabel { } // Center vertically and horizontally. Show border if active. - g.setColor(c); + FSkin.get(this).setGraphicsColor(g, c); g.fillRoundRect(1, 1, w - 2, h - 2, 5, 5); super.paintComponent(g); } diff --git a/src/main/java/forge/gui/toolbox/special/PlayerDetailsPanel.java b/src/main/java/forge/gui/toolbox/special/PlayerDetailsPanel.java index 725ff41a9a3..921232e5c51 100644 --- a/src/main/java/forge/gui/toolbox/special/PlayerDetailsPanel.java +++ b/src/main/java/forge/gui/toolbox/special/PlayerDetailsPanel.java @@ -85,11 +85,11 @@ public class PlayerDetailsPanel extends JPanel { final JPanel row5 = new JPanel(new MigLayout("insets 0, gap 0")); final JPanel row6 = new JPanel(new MigLayout("insets 0, gap 0")); - row1.setBackground(FSkin.getColor(FSkin.Colors.CLR_ZEBRA)); + FSkin.get(row1).setBackground(FSkin.getColor(FSkin.Colors.CLR_ZEBRA)); row2.setOpaque(false); - row3.setBackground(FSkin.getColor(FSkin.Colors.CLR_ZEBRA)); + FSkin.get(row3).setBackground(FSkin.getColor(FSkin.Colors.CLR_ZEBRA)); row4.setOpaque(false); - row5.setBackground(FSkin.getColor(FSkin.Colors.CLR_ZEBRA)); + FSkin.get(row5).setBackground(FSkin.getColor(FSkin.Colors.CLR_ZEBRA)); row6.setOpaque(false); // Hand, library, graveyard, exile, flashback, poison labels @@ -151,8 +151,12 @@ public class PlayerDetailsPanel extends JPanel { // Poison/life this.getLblPoison().setText("" + player.getPoisonCounters()); - Color poisonFg = player.getPoisonCounters() >= 8 ? Color.red : FSkin.getColor(FSkin.Colors.CLR_TEXT); - this.getLblPoison().setForeground(poisonFg); + if (player.getPoisonCounters() < 8) { + FSkin.get(this.getLblPoison()).setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + } + else { + FSkin.get(this.getLblPoison()).setForeground(Color.red); + } } /** diff --git a/src/main/java/forge/properties/ForgeLookAndFeel.java b/src/main/java/forge/properties/ForgeLookAndFeel.java deleted file mode 100644 index 9d2e51ea9e3..00000000000 --- a/src/main/java/forge/properties/ForgeLookAndFeel.java +++ /dev/null @@ -1,166 +0,0 @@ -package forge.properties; - -import java.awt.Color; -import java.awt.Font; -import java.util.ArrayList; - -import javax.swing.BorderFactory; -import javax.swing.JFrame; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.UnsupportedLookAndFeelException; -import javax.swing.border.Border; - -import forge.Singletons; -import forge.gui.toolbox.FSkin; -import forge.properties.ForgePreferences.FPref; - -/** - * Sets the look and feel of the GUI based on the selected Forge theme. - * - * @see UIManager Defaults - */ -public final class ForgeLookAndFeel { - - private Color FORE_COLOR = FSkin.getColor(FSkin.Colors.CLR_TEXT); - private Color BACK_COLOR = FSkin.getColor(FSkin.Colors.CLR_THEME2); - private Color HIGHLIGHT_COLOR = BACK_COLOR.brighter(); - private Border LINE_BORDER = BorderFactory.createLineBorder(FORE_COLOR.darker(), 1); - private Border EMPTY_BORDER = BorderFactory.createEmptyBorder(2,2,2,2); - - /** - * Sets the look and feel of the GUI based on the selected Forge theme. - */ - public void setForgeLookAndFeel(JFrame appFrame) { - if (isUIManagerEnabled()) { - if (setMetalLookAndFeel(appFrame)) { - setMenusLookAndFeel(); - setComboBoxLookAndFeel(); - setTabbedPaneLookAndFeel(); - setButtonLookAndFeel(); - } - } - } - - /** - * Sets the standard "Java L&F" (also called "Metal") that looks the same on all platforms. - *

- * If not explicitly set then the Mac uses its native L&F which does - * not support various settings (eg. combobox background color). - */ - private boolean setMetalLookAndFeel(JFrame appFrame) { - boolean isMetalLafSet = false; - try { - UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); - SwingUtilities.updateComponentTreeUI(appFrame); - isMetalLafSet = true; - } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) { - // Auto-generated catch block ignores the exception, but sends it to System.err and probably forge.log. - e.printStackTrace(); - } - return isMetalLafSet; - } - - /** - * Sets the look and feel for a JMenuBar, JMenu, JMenuItem & variations. - */ - private void setMenusLookAndFeel() { - // JMenuBar - Color clrTheme = FSkin.getColor(FSkin.Colors.CLR_THEME); - Color backgroundColor = FSkin.stepColor(clrTheme, 0); - Color menuBarEdgeColor = FSkin.stepColor(clrTheme, -80); - UIManager.put("MenuBar.foreground", FORE_COLOR); - UIManager.put("MenuBar.gradient", getColorGradients(backgroundColor.darker(), backgroundColor)); - UIManager.put("MenuBar.border", BorderFactory.createMatteBorder(0, 0, 1, 0, menuBarEdgeColor)); - // JMenu - UIManager.put("Menu.foreground", FORE_COLOR); - UIManager.put("Menu.background", BACK_COLOR); - UIManager.put("Menu.borderPainted", false); - UIManager.put("Menu.selectionBackground", HIGHLIGHT_COLOR); - UIManager.put("Menu.selectionForeground", FORE_COLOR); - UIManager.put("Menu.border", EMPTY_BORDER); - UIManager.put("Menu.opaque", false); - // JPopupMenu - UIManager.put("PopupMenu.border", LINE_BORDER); - UIManager.put("PopupMenu.background", BACK_COLOR); - UIManager.put("PopupMenu.foreground", FORE_COLOR); - // JMenuItem - UIManager.put("MenuItem.foreground", FORE_COLOR); - UIManager.put("MenuItem.background", BACK_COLOR); - UIManager.put("MenuItem.border", EMPTY_BORDER); - UIManager.put("MenuItem.selectionBackground", HIGHLIGHT_COLOR); - UIManager.put("MenuItem.selectionForeground", FORE_COLOR); - UIManager.put("MenuItem.acceleratorForeground", FORE_COLOR.darker()); - UIManager.put("MenuItem.opaque", true); - // JSeparator (needs to be opaque!). - UIManager.put("Separator.foreground", FORE_COLOR.darker()); - UIManager.put("Separator.background", BACK_COLOR); - // JRadioButtonMenuItem - UIManager.put("RadioButtonMenuItem.foreground", FORE_COLOR); - UIManager.put("RadioButtonMenuItem.background", BACK_COLOR); - UIManager.put("RadioButtonMenuItem.selectionBackground", HIGHLIGHT_COLOR); - UIManager.put("RadioButtonMenuItem.selectionForeground", FORE_COLOR); - UIManager.put("RadioButtonMenuItem.border", EMPTY_BORDER); - UIManager.put("RadioButtonMenuItem.acceleratorForeground", FORE_COLOR.darker()); - // JCheckboxMenuItem - UIManager.put("CheckBoxMenuItem.foreground", FORE_COLOR); - UIManager.put("CheckBoxMenuItem.background", BACK_COLOR); - UIManager.put("CheckBoxMenuItem.selectionBackground", HIGHLIGHT_COLOR); - UIManager.put("CheckBoxMenuItem.selectionForeground", FORE_COLOR); - UIManager.put("CheckBoxMenuItem.border", EMPTY_BORDER); - UIManager.put("CheckBoxMenuItem.acceleratorForeground", FORE_COLOR.darker()); - } - - private void setTabbedPaneLookAndFeel() { - UIManager.put("TabbedPane.selected", HIGHLIGHT_COLOR); - UIManager.put("TabbedPane.contentOpaque", FSkin.getColor(FSkin.Colors.CLR_THEME)); - UIManager.put("TabbedPane.unselectedBackground", BACK_COLOR); - } - - /** - * Sets the look and feel for a non-editable JComboBox. - */ - private void setComboBoxLookAndFeel() { - UIManager.put("ComboBox.background", BACK_COLOR); - UIManager.put("ComboBox.foreground", FORE_COLOR); - UIManager.put("ComboBox.selectionBackground", HIGHLIGHT_COLOR); - UIManager.put("ComboBox.selectionForeground", FORE_COLOR); - UIManager.put("ComboBox.disabledBackground", BACK_COLOR); - UIManager.put("ComboBox.disabledForeground", BACK_COLOR.darker()); - UIManager.put("ComboBox.font", getDefaultFont("ComboBox.font")); - UIManager.put("Button.select", HIGHLIGHT_COLOR); - } - - private void setButtonLookAndFeel() { - UIManager.put("Button.foreground", FORE_COLOR); - UIManager.put("Button.background", BACK_COLOR); - UIManager.put("Button.select", HIGHLIGHT_COLOR); - UIManager.put("Button.focus", FORE_COLOR.darker()); - UIManager.put("Button.rollover", false); - } - - /** - * Determines whether theme styles should be applied to GUI. - *

- * TODO: Currently is using UI_THEMED_COMBOBOX setting but will - * eventually want to rename for clarity. - */ - private boolean isUIManagerEnabled() { - return Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_THEMED_COMBOBOX); - } - - private Font getDefaultFont(String component) { - return FSkin.getFont(UIManager.getFont(component).getSize()); - } - - private ArrayList getColorGradients(Color bottom, Color top) { - ArrayList gradients = new ArrayList<>(); - gradients.add(0.0); - gradients.add(0.0); - gradients.add(top); - gradients.add(bottom); - gradients.add(bottom); - return gradients; - } - -} diff --git a/src/main/java/forge/quest/gui/ViewItem.java b/src/main/java/forge/quest/gui/ViewItem.java index 8d2d9402705..d747b059c38 100644 --- a/src/main/java/forge/quest/gui/ViewItem.java +++ b/src/main/java/forge/quest/gui/ViewItem.java @@ -30,7 +30,7 @@ public class ViewItem extends FPanel { this.tarDesc = new FTextArea(); this.btnPurchase = new FLabel.Builder().text("Buy").opaque(true).fontSize(20).hoverable(true).build(); - this.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); + FSkin.get(this).setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2)); // Layout this.setLayout(new MigLayout("insets 0, gap 0")); diff --git a/src/main/java/forge/quest/gui/ViewStall.java b/src/main/java/forge/quest/gui/ViewStall.java index 7ec41d8dd95..0e9c33b3152 100644 --- a/src/main/java/forge/quest/gui/ViewStall.java +++ b/src/main/java/forge/quest/gui/ViewStall.java @@ -79,7 +79,7 @@ public class ViewStall extends JPanel { this.setOpaque(false); this.tpnFluff.setOpaque(false); - this.tpnFluff.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); + FSkin.get(this.tpnFluff).setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); this.tpnFluff.setFont(FSkin.getItalicFont(15)); this.tpnFluff.setFocusable(false); this.tpnFluff.setEditable(false); diff --git a/src/main/java/forge/view/FView.java b/src/main/java/forge/view/FView.java index b5d127ba5e9..0007b818c2f 100644 --- a/src/main/java/forge/view/FView.java +++ b/src/main/java/forge/view/FView.java @@ -84,14 +84,14 @@ public enum FView { private FView() { frmSplash = new SplashFrame(); - - // Insets panel has background image / texture, which - // must be instantiated after the skin is loaded. - pnlInsets = new FPanel(new BorderLayout()); } /** */ public void initialize() { + // Insets panel has background image / texture, which + // must be instantiated after the skin is loaded. + pnlInsets = new FPanel(new BorderLayout()); + // Frame styling frmDocument.setMinimumSize(new Dimension(800, 600)); frmDocument.setLocationRelativeTo(null); @@ -121,7 +121,7 @@ public enum FView { pnlContent.setOpaque(false); pnlContent.setLayout(null); - FOverlay.SINGLETON_INSTANCE.getPanel().setBackground(FSkin.getColor(FSkin.Colors.CLR_OVERLAY)); + FSkin.get(FOverlay.SINGLETON_INSTANCE.getPanel()).setBackground(FSkin.getColor(FSkin.Colors.CLR_OVERLAY)); // Populate all drag tab components. this.cacheUIStates();