diff --git a/Mage.Client/src/main/java/mage/client/components/HoverButton.java b/Mage.Client/src/main/java/mage/client/components/HoverButton.java index 863cb49109..6930e9a964 100644 --- a/Mage.Client/src/main/java/mage/client/components/HoverButton.java +++ b/Mage.Client/src/main/java/mage/client/components/HoverButton.java @@ -8,10 +8,13 @@ import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Rectangle; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.font.FontRenderContext; import javax.swing.JPanel; +import javax.swing.Timer; import mage.client.util.Command; /** @@ -43,6 +46,7 @@ public class HoverButton extends JPanel implements MouseListener { private Image topTextImageRight; private String centerText; + private boolean wasHovered = false; private boolean isHovered = false; private boolean isSelected = false; private boolean drawSet = false; @@ -52,7 +56,8 @@ public class HoverButton extends JPanel implements MouseListener { private Command onHover = null; private Color textColor = Color.white; private final Rectangle centerTextArea = new Rectangle(5, 18, 75, 40); - private Color centerTextColor = new Color(200, 190, 0, 180); + private Color centerTextColor = new Color(200, 210, 0, 180); + private Color origCenterTextColor = new Color(200, 210, 0, 180); private final Color textBGColor = Color.black; static final Font textFont = new Font("Arial", Font.PLAIN, 12); @@ -64,6 +69,13 @@ public class HoverButton extends JPanel implements MouseListener { private boolean alignTextLeft = false; + Timer faderGainLife = null; + Timer faderLoseLife = null; + private int loseX = 0; + private int gainX = 0; + private boolean doLoseFade = true; + private boolean doGainFade = true; + public HoverButton(String text, Image image, Rectangle size) { this(text, image, image, null, image, size); if (image == null) { @@ -95,6 +107,10 @@ public class HoverButton extends JPanel implements MouseListener { Graphics2D g2d = (Graphics2D) g; if (isEnabled()) { if (isHovered || textAlwaysVisible) { + if (isHovered) { + wasHovered = true; + setCenterColor(Color.YELLOW); + } g.drawImage(hoverImage, 0, 0, imageSize.width, imageSize.height, this); if (text != null) { if (textColor != null) { @@ -109,6 +125,10 @@ public class HoverButton extends JPanel implements MouseListener { g2d.drawString(text, textOffsetX, textOffsetY); } } else { + if (wasHovered) { + wasHovered = false; + setCenterColor(origCenterTextColor); + } g.drawImage(image, 0, 0, imageSize.width, imageSize.height, this); } if (isSelected) { @@ -174,7 +194,7 @@ public class HoverButton extends JPanel implements MouseListener { g2d.drawString(set, 0, 0); } } - + public void setCenterColor(Color c) { centerTextColor = c; } @@ -361,4 +381,75 @@ public class HoverButton extends JPanel implements MouseListener { // Draw the String g.drawString(text, x, y); } + + public void gainLifeDisplay() { + if (faderGainLife == null && doGainFade) { + doGainFade = false; + faderGainLife = new Timer(50, new ActionListener() { + public void actionPerformed(ActionEvent ae) { + gainX++; + int alpha = Math.max(250 - gainX, 180); + setCenterColor(new Color(2 * gainX, 210, 255, alpha)); + repaint(); + if (gainX >= 100) { + setCenterColor(new Color(200, 210, 0, 180)); + gainX = 100; + + if (faderGainLife != null) { + faderGainLife.stop(); + faderGainLife.setRepeats(false); + faderGainLife.setDelay(50000); + } + } + } + }); + gainX = 0; + faderGainLife.setInitialDelay(25); + faderGainLife.setRepeats(true); + faderGainLife.start(); + } + } + + public void loseLifeDisplay() { + if (faderLoseLife == null && doLoseFade) { + doLoseFade = false; + faderLoseLife = new Timer(50, new ActionListener() { + public void actionPerformed(ActionEvent ae) { + loseX++; + int alpha = Math.max(250 - loseX, 180); + setCenterColor(new Color(250 - loseX / 2, 130 + loseX, 0, alpha)); + repaint(); + if (loseX >= 100) { + setCenterColor(new Color(200, 210, 0, 180)); + loseX = 100; + stopLifeDisplay(); + + if (faderLoseLife != null) { + faderLoseLife.stop(); + faderLoseLife.setRepeats(false); + faderLoseLife.setDelay(50000); + } + } + } + }); + loseX = 0; + faderLoseLife.setInitialDelay(25); + faderLoseLife.setRepeats(true); + faderLoseLife.start(); + } + } + + public void stopLifeDisplay() { + + if (faderGainLife != null && gainX >= 100) { + faderGainLife.stop(); + faderGainLife = null; + } + doGainFade = true; + if (faderLoseLife != null && loseX >= 100) { + faderLoseLife.stop(); + faderLoseLife = null; + } + doLoseFade = true; + } } diff --git a/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java b/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java index ed4b0d8a97..bc21430a31 100644 --- a/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java +++ b/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java @@ -38,8 +38,6 @@ import java.awt.Dimension; import java.awt.Font; import java.awt.Image; import java.awt.Rectangle; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.util.HashMap; import java.util.LinkedHashSet; @@ -55,7 +53,6 @@ import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.LayoutStyle.ComponentPlacement; import javax.swing.SwingConstants; -import javax.swing.Timer; import javax.swing.border.Border; import javax.swing.border.LineBorder; import mage.cards.decks.importer.DckDeckImporter; @@ -117,12 +114,6 @@ public class PlayerPanelExt extends javax.swing.JPanel { private String flagName; private String basicTooltipText; private static final Map playerLives = new HashMap<>(); - private int loseX; - private boolean doLoseFade = true; - private int gainX; - private boolean doGainFade = true; - Timer faderGainLife = null; - Timer faderLoseLife = null; private PriorityTimer timer; @@ -200,69 +191,12 @@ public class PlayerPanelExt extends javax.swing.JPanel { if (displayLife) { if (playerLife != pastLife) { if (playerLife > pastLife) { - if (faderGainLife == null && doGainFade) { - doGainFade = false; - faderGainLife = new Timer(50, new ActionListener() { - public void actionPerformed(ActionEvent ae) { - gainX++; - int alpha = Math.max(250 - gainX, 180); - avatar.setCenterColor(new Color(2 * gainX, 190, 255, alpha)); - avatar.repaint(); - if (gainX >= 100) { - avatar.setCenterColor(new Color(200, 190, 0, 180)); - gainX = 100; - - if (faderGainLife != null) { - faderGainLife.stop(); - faderGainLife.setRepeats(false); - faderGainLife.setDelay(50000); - } - } - } - }); - gainX = 0; - faderGainLife.setInitialDelay(25); - faderGainLife.setRepeats(true); - faderGainLife.start(); - } + avatar.gainLifeDisplay(); } else if (playerLife < pastLife) { - if (faderLoseLife == null && doLoseFade) { - doLoseFade = false; - faderLoseLife = new Timer(50, new ActionListener() { - public void actionPerformed(ActionEvent ae) { - loseX++; - int alpha = Math.max(250 - loseX, 180); - avatar.setCenterColor(new Color(250 - loseX / 2, 140 + loseX / 2, 0, alpha)); - avatar.repaint(); - if (loseX >= 100) { - avatar.setCenterColor(new Color(200, 190, 0, 180)); - loseX = 100; - - if (faderLoseLife != null) { - faderLoseLife.stop(); - faderLoseLife.setRepeats(false); - faderLoseLife.setDelay(50000); - } - } - } - }); - loseX = 0; - faderLoseLife.setInitialDelay(25); - faderLoseLife.setRepeats(true); - faderLoseLife.start(); - } + avatar.loseLifeDisplay(); } } else if (playerLife == pastLife) { - if (faderGainLife != null && gainX >= 100) { - faderGainLife.stop(); - faderGainLife = null; - } - doGainFade = true; - if (faderLoseLife != null && loseX >= 100) { - faderLoseLife.stop(); - faderLoseLife = null; - } - doLoseFade = true; + avatar.stopLifeDisplay(); } }