diff --git a/forge-gui-desktop/src/main/java/forge/gui/CardDetailPanel.java b/forge-gui-desktop/src/main/java/forge/gui/CardDetailPanel.java index 78ec1a7ce2f..6f5723e5402 100644 --- a/forge-gui-desktop/src/main/java/forge/gui/CardDetailPanel.java +++ b/forge-gui-desktop/src/main/java/forge/gui/CardDetailPanel.java @@ -21,7 +21,7 @@ package forge.gui; import forge.Singletons; import forge.card.CardCharacteristicName; import forge.card.CardDetailUtil; -import forge.card.CardDetailUtil.CardBorderColor; +import forge.card.CardDetailUtil.DetailColors; import forge.card.CardEdition; import forge.game.card.Card; import forge.game.zone.ZoneType; @@ -49,7 +49,9 @@ public class CardDetailPanel extends SkinnedPanel { /** Constant serialVersionUID=-8461473263764812323L. */ private static final long serialVersionUID = -8461473263764812323L; - private static Color purple = new Color(14381203); + private static Color fromDetailColor(DetailColors detailColor) { + return new Color(detailColor.r, detailColor.g, detailColor.b); + } private final FLabel nameCostLabel; private final FLabel typeLabel; @@ -203,40 +205,36 @@ public class CardDetailPanel extends SkinnedPanel { else { setInfoLabel.setToolTipText(String.format("%s (%s)", edition.getName(), card.getRarity().name())); } - + this.setInfoLabel.setOpaque(true); + + Color backColor; switch(card.getRarity()) { case Uncommon: - this.setInfoLabel.setBackground(Color.LIGHT_GRAY); - this.setInfoLabel.setForeground(Color.BLACK); - this.setInfoLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK)); + backColor = fromDetailColor(DetailColors.UNCOMMON); break; case Rare: - this.setInfoLabel.setBackground(Color.YELLOW); - this.setInfoLabel.setForeground(Color.BLACK); - this.setInfoLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK)); + backColor = fromDetailColor(DetailColors.RARE); break; case MythicRare: - this.setInfoLabel.setBackground(Color.RED); - this.setInfoLabel.setForeground(Color.BLACK); - this.setInfoLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK)); + backColor = fromDetailColor(DetailColors.MYTHIC); break; - case Special: - // "Timeshifted" or other Special Rarity Cards - this.setInfoLabel.setBackground(CardDetailPanel.purple); - this.setInfoLabel.setForeground(Color.BLACK); - this.setInfoLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK)); + case Special: //"Timeshifted" or other Special Rarity Cards + backColor = fromDetailColor(DetailColors.SPECIAL); break; default: //case BasicLand: + case Common: - this.setInfoLabel.setBackground(Color.BLACK); - this.setInfoLabel.setForeground(Color.WHITE); - this.setInfoLabel.setBorder(BorderFactory.createLineBorder(Color.WHITE)); + backColor = fromDetailColor(DetailColors.COMMON); break; } + + Color foreColor = FSkin.getHighContrastColor(backColor); + this.setInfoLabel.setBackground(backColor); + this.setInfoLabel.setForeground(foreColor); + this.setInfoLabel.setBorder(BorderFactory.createLineBorder(foreColor)); } } @@ -290,8 +288,7 @@ public class CardDetailPanel extends SkinnedPanel { return; } - CardBorderColor borderColor = CardDetailUtil.getBorderColor(card, canShow); - Color color = new Color(borderColor.r, borderColor.g, borderColor.b); + Color color = fromDetailColor(CardDetailUtil.getBorderColor(card, canShow)); this.setBorder(BorderFactory.createLineBorder(color, 2)); scrArea.setBorder(BorderFactory.createMatteBorder(2, 0, 0, 0, color)); } diff --git a/forge-gui-mobile/src/forge/screens/match/InputSelectCard.java b/forge-gui-mobile/src/forge/screens/match/InputSelectCard.java index 6a5cd4b7dac..262e7e46245 100644 --- a/forge-gui-mobile/src/forge/screens/match/InputSelectCard.java +++ b/forge-gui-mobile/src/forge/screens/match/InputSelectCard.java @@ -20,7 +20,7 @@ import forge.assets.FSkinImage; import forge.assets.ImageCache; import forge.assets.FSkinColor.Colors; import forge.card.CardDetailUtil; -import forge.card.CardDetailUtil.CardBorderColor; +import forge.card.CardDetailUtil.DetailColors; import forge.game.card.Card; import forge.game.spellability.SpellAbility; import forge.match.input.Input; @@ -469,8 +469,8 @@ public class InputSelectCard { h -= 2 * blackBorderThickness; //determine colors for borders - List borderColors = CardDetailUtil.getBorderColors(card, canShow, true); - CardBorderColor borderColor = borderColors.get(0); + List borderColors = CardDetailUtil.getBorderColors(card, canShow, true); + DetailColors borderColor = borderColors.get(0); Color color1 = FSkinColor.fromRGB(borderColor.r, borderColor.g, borderColor.b); Color color2 = null; if (borderColors.size() > 1) { @@ -490,7 +490,7 @@ public class InputSelectCard { x += outerBorderThickness; y += outerBorderThickness; w -= 2 * outerBorderThickness; - h = Math.max(MANA_SYMBOL_SIZE + 2 * MANA_COST_PADDING, 2 * NAME_FONT.getFont().getCapHeight()) + 2 * TYPE_FONT.getFont().getCapHeight(); + h = Math.max(MANA_SYMBOL_SIZE + 2 * MANA_COST_PADDING, 2 * NAME_FONT.getFont().getCapHeight()) + 2 * TYPE_FONT.getFont().getCapHeight() + 2; //draw name/type box int nameManaCostStep = 100; //TODO: add better background colors to CardBorderColor enum @@ -552,13 +552,15 @@ public class InputSelectCard { } private static void drawCardIdAndPtBox(Graphics g, Card card, Color idForeColor, Color color1, Color color2, float x, float y, float w, float h) { - g.drawText(CardDetailUtil.formatCardId(card), ID_FONT, idForeColor, x, y + ID_FONT.getFont().getCapHeight() / 2, w, h, false, HAlignment.LEFT, false); + String idText = CardDetailUtil.formatCardId(card); + g.drawText(idText, ID_FONT, idForeColor, x, y + ID_FONT.getFont().getCapHeight() / 2, w, h, false, HAlignment.LEFT, false); - String text = CardDetailUtil.formatPowerToughness(card); - if (StringUtils.isEmpty(text)) { return; } + String ptText = CardDetailUtil.formatPowerToughness(card); + if (StringUtils.isEmpty(ptText)) { return; } float padding = PT_FONT.getFont().getCapHeight() / 2; - float boxWidth = PT_FONT.getFont().getBounds(text).width + 2 * padding; + float boxWidth = Math.min(PT_FONT.getFont().getBounds(ptText).width + 2 * padding, + w - ID_FONT.getFont().getBounds(idText).width - padding); //prevent box overlapping ID x += w - boxWidth; w = boxWidth; @@ -569,7 +571,7 @@ public class InputSelectCard { g.fillGradientRect(color1, color2, false, x, y, w, h); } g.drawRect(1, Color.BLACK, x, y, w, h); - g.drawText(text, PT_FONT, Color.BLACK, x, y, w, h, false, HAlignment.CENTER, true); + g.drawText(ptText, PT_FONT, Color.BLACK, x, y, w, h, false, HAlignment.CENTER, true); } } } diff --git a/forge-gui/src/main/java/forge/card/CardDetailUtil.java b/forge-gui/src/main/java/forge/card/CardDetailUtil.java index ccfb3f32205..8838e4df360 100644 --- a/forge-gui/src/main/java/forge/card/CardDetailUtil.java +++ b/forge-gui/src/main/java/forge/card/CardDetailUtil.java @@ -19,7 +19,7 @@ public class CardDetailUtil { private CardDetailUtil() { } - public enum CardBorderColor { + public enum DetailColors { WHITE(254, 253, 244), BLUE(90, 146, 202), BLACK(32, 34, 31), @@ -29,105 +29,110 @@ public class CardDetailUtil { COLORLESS(160, 166, 164), LAND(190, 153, 112), FACE_DOWN(83, 61, 40), + COMMON(10, 7, 10), + UNCOMMON(160, 172, 174), + RARE(193, 170, 100), + MYTHIC(171, 54, 39), + SPECIAL(141, 114, 147), UNKNOWN(200, 0, 230); public final int r, g, b; - private CardBorderColor(int r0, int g0, int b0) { + private DetailColors(int r0, int g0, int b0) { r = r0; g = g0; b = b0; } } - public static CardBorderColor getBorderColor(final Card card, boolean canShow) { + public static DetailColors getBorderColor(final Card card, boolean canShow) { return getBorderColors(card, canShow, false).get(0); } - public static List getBorderColors(final Card card, boolean canShow, boolean supportMultiple) { - List borderColors = new ArrayList(); + public static List getBorderColors(final Card card, boolean canShow, boolean supportMultiple) { + List borderColors = new ArrayList(); ColorSet cardColors = card.determineColor(); if (!canShow) { - borderColors.add(CardBorderColor.FACE_DOWN); + borderColors.add(DetailColors.FACE_DOWN); } else if (cardColors.isColorless()) { if (card.isLand()) { //use different color for lands vs. other colorless cards - borderColors.add(CardBorderColor.LAND); + borderColors.add(DetailColors.LAND); } else { - borderColors.add(CardBorderColor.COLORLESS); + borderColors.add(DetailColors.COLORLESS); } } else { int colorCount = cardColors.countColors(); if (colorCount > 2 || (colorCount > 1 && !supportMultiple)) { - borderColors.add(CardBorderColor.MULTICOLOR); + borderColors.add(DetailColors.MULTICOLOR); } else if (cardColors.hasWhite()) { if (colorCount == 1) { - borderColors.add(CardBorderColor.WHITE); + borderColors.add(DetailColors.WHITE); } else if (cardColors.hasBlue()) { - borderColors.add(CardBorderColor.WHITE); - borderColors.add(CardBorderColor.BLUE); + borderColors.add(DetailColors.WHITE); + borderColors.add(DetailColors.BLUE); } else if (cardColors.hasBlack()) { - borderColors.add(CardBorderColor.WHITE); - borderColors.add(CardBorderColor.BLACK); + borderColors.add(DetailColors.WHITE); + borderColors.add(DetailColors.BLACK); } else if (cardColors.hasRed()) { - borderColors.add(CardBorderColor.RED); - borderColors.add(CardBorderColor.WHITE); + borderColors.add(DetailColors.RED); + borderColors.add(DetailColors.WHITE); } else if (cardColors.hasGreen()) { - borderColors.add(CardBorderColor.GREEN); - borderColors.add(CardBorderColor.WHITE); + borderColors.add(DetailColors.GREEN); + borderColors.add(DetailColors.WHITE); } } else if (cardColors.hasBlue()) { if (colorCount == 1) { - borderColors.add(CardBorderColor.BLUE); + borderColors.add(DetailColors.BLUE); } else if (cardColors.hasBlack()) { - borderColors.add(CardBorderColor.BLUE); - borderColors.add(CardBorderColor.BLACK); + borderColors.add(DetailColors.BLUE); + borderColors.add(DetailColors.BLACK); } else if (cardColors.hasRed()) { - borderColors.add(CardBorderColor.BLUE); - borderColors.add(CardBorderColor.RED); + borderColors.add(DetailColors.BLUE); + borderColors.add(DetailColors.RED); } else if (cardColors.hasGreen()) { - borderColors.add(CardBorderColor.GREEN); - borderColors.add(CardBorderColor.BLUE); + borderColors.add(DetailColors.GREEN); + borderColors.add(DetailColors.BLUE); } } else if (cardColors.hasBlack()) { if (colorCount == 1) { - borderColors.add(CardBorderColor.BLACK); + borderColors.add(DetailColors.BLACK); } else if (cardColors.hasRed()) { - borderColors.add(CardBorderColor.BLACK); - borderColors.add(CardBorderColor.RED); + borderColors.add(DetailColors.BLACK); + borderColors.add(DetailColors.RED); } else if (cardColors.hasGreen()) { - borderColors.add(CardBorderColor.BLACK); - borderColors.add(CardBorderColor.GREEN); + borderColors.add(DetailColors.BLACK); + borderColors.add(DetailColors.GREEN); } } else if (cardColors.hasRed()) { //if we got this far, must be mono-red or red-green - borderColors.add(CardBorderColor.RED); + borderColors.add(DetailColors.RED); if (cardColors.hasGreen()) { - borderColors.add(CardBorderColor.GREEN); + borderColors.add(DetailColors.GREEN); } } else if (cardColors.hasGreen()) { //if we got this far, must be mono-green - borderColors.add(CardBorderColor.GREEN); + borderColors.add(DetailColors.GREEN); } } if (borderColors.isEmpty()) { // If your card has a violet border, something is wrong - borderColors.add(CardBorderColor.UNKNOWN); + borderColors.add(DetailColors.UNKNOWN); } return borderColors; }