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