From 176c67e105cae453638172e28b59b912828609b0 Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Tue, 28 May 2013 08:35:13 +0000 Subject: [PATCH] displays assigned damage on cards --- .gitattributes | 2 +- .../java/forge/view/arcane/CardPanel.java | 80 ++++++++++++------- .../{GlowText.java => OutlinedLabel.java} | 59 +++++++------- 3 files changed, 81 insertions(+), 60 deletions(-) rename src/main/java/forge/view/arcane/util/{GlowText.java => OutlinedLabel.java} (73%) diff --git a/.gitattributes b/.gitattributes index df43ca5968e..958dcfb4695 100644 --- a/.gitattributes +++ b/.gitattributes @@ -14689,7 +14689,7 @@ src/main/java/forge/view/arcane/ViewPanel.java svneol=native#text/plain src/main/java/forge/view/arcane/package-info.java svneol=native#text/plain src/main/java/forge/view/arcane/util/Animation.java svneol=native#text/plain src/main/java/forge/view/arcane/util/CardPanelMouseListener.java svneol=native#text/plain -src/main/java/forge/view/arcane/util/GlowText.java svneol=native#text/plain +src/main/java/forge/view/arcane/util/OutlinedLabel.java svneol=native#text/plain src/main/java/forge/view/arcane/util/package-info.java svneol=native#text/plain src/main/java/forge/view/package-info.java svneol=native#text/plain src/main/resources/no_card.jpg -text diff --git a/src/main/java/forge/view/arcane/CardPanel.java b/src/main/java/forge/view/arcane/CardPanel.java index 23396f4177f..99c7e5ed43c 100644 --- a/src/main/java/forge/view/arcane/CardPanel.java +++ b/src/main/java/forge/view/arcane/CardPanel.java @@ -45,7 +45,7 @@ import forge.card.mana.ManaCost; import forge.gui.CardContainer; import forge.gui.toolbox.CardFaceSymbols; import forge.properties.ForgePreferences.FPref; -import forge.view.arcane.util.GlowText; +import forge.view.arcane.util.OutlinedLabel; /** *

@@ -78,10 +78,7 @@ public class CardPanel extends JPanel implements CardContainer { private static final float SELECTED_BORDER_SIZE = 0.01f; /** Constant BLACK_BORDER_SIZE=0.03f. */ private static final float BLACK_BORDER_SIZE = 0.03f; - /** Constant TEXT_GLOW_SIZE=6. */ - private static final int TEXT_GLOW_SIZE = 6; - /** Constant TEXT_GLOW_INTENSITY=3f. */ - private static final float TEXT_GLOW_INTENSITY = 3f; + /** * Constant * rotCenterToTopCorner=1.0295630140987000315797369464196f. @@ -118,8 +115,9 @@ public class CardPanel extends JPanel implements CardContainer { */ private final ScaledImagePanel imagePanel; - private final GlowText titleText; - private final GlowText ptText; + private final OutlinedLabel titleText; + private final OutlinedLabel ptText; + private final OutlinedLabel damageText; private final List imageLoadListeners = new ArrayList(2); private boolean displayEnabled = true; private boolean isAnimationPanel; @@ -141,19 +139,26 @@ public class CardPanel extends JPanel implements CardContainer { this.setBackground(Color.black); this.setOpaque(false); - this.titleText = new GlowText(); + this.titleText = new OutlinedLabel(); this.titleText.setFont(this.getFont().deriveFont(Font.BOLD, 13f)); this.titleText.setForeground(Color.white); - this.titleText.setGlow(Color.black, CardPanel.TEXT_GLOW_SIZE, CardPanel.TEXT_GLOW_INTENSITY); + this.titleText.setGlow(Color.black); this.titleText.setWrap(true); this.add(this.titleText); - this.ptText = new GlowText(); + this.ptText = new OutlinedLabel(); this.ptText.setFont(this.getFont().deriveFont(Font.BOLD, 13f)); this.ptText.setForeground(Color.white); - this.ptText.setGlow(Color.black, CardPanel.TEXT_GLOW_SIZE, CardPanel.TEXT_GLOW_INTENSITY); + this.ptText.setGlow(Color.black); this.add(this.ptText); + this.damageText = new OutlinedLabel(); + this.damageText.setFont(this.getFont().deriveFont(Font.BOLD, 15f)); + this.damageText.setForeground(new Color(160,0,0)); + this.damageText.setGlow(Color.white); + this.add(this.damageText); + + this.imagePanel = new ScaledImagePanel(); this.add(this.imagePanel); this.addComponentListener(new ComponentAdapter() { @@ -451,26 +456,41 @@ public class CardPanel extends JPanel implements CardContainer { @Override public final void doLayout() { final int borderSize = Math.round(this.cardWidth * CardPanel.BLACK_BORDER_SIZE); - this.imagePanel.setLocation(this.cardXOffset + borderSize, this.cardYOffset + borderSize); - this.imagePanel.setSize(this.cardWidth - (borderSize * 2), this.cardHeight - (borderSize * 2)); + + final Point imgPos = new Point(this.cardXOffset + borderSize, this.cardYOffset + borderSize); + final Dimension imgSize = new Dimension(this.cardWidth - (borderSize * 2), this.cardHeight - (borderSize * 2)); + + this.imagePanel.setLocation(imgPos); + this.imagePanel.setSize(imgSize); final int fontHeight = Math.round(this.cardHeight * (27f / 680)); final boolean showText = !this.imagePanel.hasImage() || (!this.isAnimationPanel && (fontHeight < 12)); this.titleText.setVisible(showText); this.ptText.setVisible(showText); + this.damageText.setVisible(showText); - final int titleX = Math.round(this.cardWidth * (20f / 480)); - final int titleY = Math.round(this.cardHeight * (9f / 680)); - this.titleText.setBounds(this.cardXOffset + titleX, this.cardYOffset + titleY, this.cardWidth - titleX, - this.cardHeight); + final int TEXT_GLOW_SIZE = 1; + + final int titleX = Math.round(imgSize.width * (24f / 480)); + final int titleY = Math.round(imgSize.height * (54f / 640)) - 15; + final int titleH = Math.round(imgSize.height * (360f / 640)); + this.titleText.setBounds(imgPos.x + titleX, imgPos.y + titleY, imgSize.width - 2 * titleX, titleH - titleY); + + final int rightLine = Math.round(imgSize.width * (412f / 480)); final Dimension ptSize = this.ptText.getPreferredSize(); this.ptText.setSize(ptSize.width, ptSize.height); - final int ptX = Math.round(this.cardWidth * (420f / 480)) - (ptSize.width / 2); - final int ptY = Math.round(this.cardHeight * (675f / 680)) - ptSize.height; - this.ptText.setLocation((this.cardXOffset + ptX) - (CardPanel.TEXT_GLOW_SIZE / 2), (this.cardYOffset + ptY) - - (CardPanel.TEXT_GLOW_SIZE / 2)); + final int ptX = rightLine - ptSize.width/2; + final int ptY = Math.round(imgSize.height * (650f / 680)) - 13; + this.ptText.setLocation(imgPos.x + ptX, imgPos.y + ptY); + final Dimension dmgSize = this.damageText.getPreferredSize(); + this.damageText.setSize(dmgSize.width, dmgSize.height); + final int dmgX = rightLine - dmgSize.width / 2; + final int dmgY = ptY - 16; + this.damageText.setLocation(imgPos.x + dmgX, imgPos.y + dmgY); + + } /** @@ -610,20 +630,20 @@ public class CardPanel extends JPanel implements CardContainer { this.showCastingCost = true; } + String sPt = ""; if (card.isCreature() && card.isPlaneswalker()) { - this.ptText.setText(card.getNetAttack() + "/" + card.getNetDefense() + " (" - + String.valueOf(card.getCounters(CounterType.LOYALTY)) + ")"); + sPt = String.format("%d/%d (%d)", card.getNetAttack(), card.getNetDefense(), card.getCounters(CounterType.LOYALTY)); } else if (card.isCreature()) { - this.ptText.setText(card.getNetAttack() + "/" + card.getNetDefense()); + sPt = String.format("%d/%d", card.getNetAttack(), card.getNetDefense()); } else if (card.isPlaneswalker()) { int loyalty = card.getCounters(CounterType.LOYALTY); - if (loyalty == 0) { - loyalty = card.getBaseLoyalty(); - } - this.ptText.setText(String.valueOf(loyalty)); - } else { - this.ptText.setText(""); + sPt = String.valueOf(loyalty == 0 ? card.getBaseLoyalty() : loyalty); } + this.ptText.setText(sPt); + + int damage = card.getDamage(); + this.damageText.setText(damage > 0 ? "\u00BB " + String.valueOf(damage) + " \u00AB" : ""); + } /** diff --git a/src/main/java/forge/view/arcane/util/GlowText.java b/src/main/java/forge/view/arcane/util/OutlinedLabel.java similarity index 73% rename from src/main/java/forge/view/arcane/util/GlowText.java rename to src/main/java/forge/view/arcane/util/OutlinedLabel.java index 9664c5e94d0..d27ca408adc 100644 --- a/src/main/java/forge/view/arcane/util/GlowText.java +++ b/src/main/java/forge/view/arcane/util/OutlinedLabel.java @@ -42,18 +42,18 @@ import javax.swing.JLabel; * @author Forge * @version $Id$ */ -public class GlowText extends JLabel { +public class OutlinedLabel extends JLabel { /** * Instantiates a new glow text. */ - public GlowText() { + public OutlinedLabel() { } /** Constant serialVersionUID=-2868833097364223352L. */ private static final long serialVersionUID = -2868833097364223352L; - private int glowSize; - private Color glowColor; + private Color outlineColor; + private final static int outlineSize = 1; private boolean wrap; /** @@ -68,9 +68,8 @@ public class GlowText extends JLabel { * @param intensity * a float. */ - public final void setGlow(final Color glowColor, int size, float intensity) { - this.glowColor = glowColor; - this.glowSize = size; + public final void setGlow(final Color glowColor) { + this.outlineColor = glowColor; } /** @@ -95,8 +94,8 @@ public class GlowText extends JLabel { @Override public final Dimension getPreferredSize() { Dimension size = super.getPreferredSize(); - size.width += glowSize; - size.height += glowSize / 2; + size.width += outlineSize * 2; + size.height += outlineSize * 2; return size; } @@ -113,21 +112,27 @@ public class GlowText extends JLabel { return; } + Dimension size = getSize(); +// +// if( size.width < 50 ) { +// g.setColor(Color.cyan); +// g.drawRect(0, 0, size.width-1, size.height-1); +// } + Graphics2D g2d = (Graphics2D) g; + g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); - Dimension size = getSize(); - int textX = 0, textY = 0; - int wrapWidth = Math.max(0, wrap ? size.width - glowSize : Integer.MAX_VALUE); + int textX = outlineSize, textY = 0; + int wrapWidth = Math.max(0, wrap ? size.width - outlineSize * 2 : Integer.MAX_VALUE); AttributedString attributedString = new AttributedString(getText()); attributedString.addAttribute(TextAttribute.FONT, getFont()); AttributedCharacterIterator charIterator = attributedString.getIterator(); FontRenderContext fontContext = g2d.getFontRenderContext(); - LineBreakMeasurer measurer = new LineBreakMeasurer(charIterator, BreakIterator.getWordInstance(Locale.ENGLISH), - fontContext); + LineBreakMeasurer measurer = new LineBreakMeasurer(charIterator, BreakIterator.getWordInstance(Locale.ENGLISH), fontContext); int lineCount = 0; while (measurer.getPosition() < charIterator.getEndIndex()) { measurer.nextLayout(wrapWidth); @@ -139,8 +144,7 @@ public class GlowText extends JLabel { charIterator.first(); // Use char wrap if word wrap would cause more than two lines of text. if (lineCount > 2) { - measurer = new LineBreakMeasurer(charIterator, BreakIterator.getCharacterInstance(Locale.ENGLISH), - fontContext); + measurer = new LineBreakMeasurer(charIterator, BreakIterator.getCharacterInstance(Locale.ENGLISH), fontContext); } else { measurer.setPosition(0); } @@ -149,24 +153,21 @@ public class GlowText extends JLabel { float ascent = textLayout.getAscent(); textY += ascent; // Move down to baseline. - g2d.setColor(glowColor); + g2d.setColor(outlineColor); g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.8f)); - textLayout.draw(g2d, textX + glowSize / 2 + 1, textY + glowSize / 2 - 1); - textLayout.draw(g2d, textX + glowSize / 2 + 1, textY + glowSize / 2 + 1); - textLayout.draw(g2d, textX + glowSize / 2 - 1, textY + glowSize / 2 - 1); - textLayout.draw(g2d, textX + glowSize / 2 - 1, textY + glowSize / 2 + 1); + + + textLayout.draw(g2d, textX + outlineSize, textY - outlineSize); + textLayout.draw(g2d, textX + outlineSize, textY + outlineSize); + textLayout.draw(g2d, textX - outlineSize, textY - outlineSize); + textLayout.draw(g2d, textX - outlineSize, textY + outlineSize); g2d.setColor(getForeground()); g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f)); - textLayout.draw(g2d, textX + glowSize / 2, textY + glowSize / 2); + textLayout.draw(g2d, textX, textY); - textY += textLayout.getDescent() + textLayout.getLeading(); // Move - // down - // to - // top - // of - // next - // line. + // Move down to top of next line. + textY += textLayout.getDescent() + textLayout.getLeading(); } } }