* Fixed sluggishness of player selection. Reworked flag display in avatar image.

This commit is contained in:
LevelX2 2015-08-06 00:31:50 +02:00
parent 48195629c9
commit 7a90db7995
3 changed files with 52 additions and 36 deletions

View file

@ -20,6 +20,8 @@ import mage.client.util.Command;
*/
public class HoverButton extends JPanel implements MouseListener {
static final int TOP_TEXT_IMAGE_GAP = 3;
private Image image;
private Image hoverImage;
private Image disabledImage;
@ -36,6 +38,7 @@ public class HoverButton extends JPanel implements MouseListener {
private Dimension overlayImageSize;
private String topText;
private Image topTextImage;
private boolean isHovered = false;
private boolean isSelected = false;
@ -45,7 +48,7 @@ public class HoverButton extends JPanel implements MouseListener {
private Command observer = null;
private Command onHover = null;
private Color textColor = Color.white;
private Color textBGColor = Color.black;
private final Color textBGColor = Color.black;
static final Font textFont = new Font("Arial", Font.PLAIN, 12);
static final Font textFontMini = new Font("Arial", Font.PLAIN, 11);
@ -120,9 +123,12 @@ public class HoverButton extends JPanel implements MouseListener {
}
topTextOffsetX = calculateOffsetForTop(g2d, topText);
g2d.setColor(textBGColor);
g2d.drawString(topText, topTextOffsetX + 1, 13);
g2d.drawString(topText, topTextOffsetX + 1, 14);
g2d.setColor(textColor);
g2d.drawString(topText, topTextOffsetX, 12);
g2d.drawString(topText, topTextOffsetX, 13);
}
if (topTextImage != null) {
g.drawImage(topTextImage, 4, 3, this);
}
if (overlayImage != null) {
g.drawImage(overlayImage, (imageSize.width - overlayImageSize.width) / 2, 10, this);
@ -168,7 +174,9 @@ public class HoverButton extends JPanel implements MouseListener {
if (topTextOffsetX == -1) { // calculate once
FontRenderContext frc = g2d.getFontRenderContext();
int textWidth = (int) textFont.getStringBounds(text, frc).getWidth();
topTextOffsetX = (imageSize.width - textWidth) / 2;
int neededImageWidth = (topTextImage == null ? 0 : topTextImage.getWidth(this));
int availableXWidth = imageSize.width - neededImageWidth;
topTextOffsetX = (availableXWidth - textWidth) / 2 + neededImageWidth;
}
return topTextOffsetX;
}
@ -284,6 +292,11 @@ public class HoverButton extends JPanel implements MouseListener {
this.topText = topText;
}
public void setTopTextImage(Image topTextImage) {
this.topTextImage = topTextImage;
this.textOffsetX = -1; // rest for new clculation
}
public void setTextAlwaysVisible(boolean textAlwaysVisible) {
this.textAlwaysVisible = textAlwaysVisible;
}

View file

@ -36,7 +36,6 @@ package mage.client.game;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
@ -105,7 +104,7 @@ public class PlayerPanelExt extends javax.swing.JPanel {
private static final Border emptyBorder = BorderFactory.createEmptyBorder(0, 0, 0, 0);
private int avatarId = -1;
private String flagName = "";
private String flagName;
private PriorityTimer timer;
@ -124,7 +123,7 @@ public class PlayerPanelExt extends javax.swing.JPanel {
session = MageFrame.getSession();
cheat.setVisible(session.isTestMode());
cheat.setFocusable(false);
flagName = null;
if (priorityTime > 0) {
long delay = 1000L;
@ -157,6 +156,25 @@ public class PlayerPanelExt extends javax.swing.JPanel {
public void update(PlayerView player) {
this.player = player;
if (flagName == null) { // do only once
avatar.setText(this.player.getName());
if (!player.getUserData().getFlagName().equals(flagName)) {
flagName = player.getUserData().getFlagName();
this.avatar.setTopTextImage(CountryUtil.getCountryFlagIcon(flagName).getImage());
}
// TODO: Add the wins to the tooltiptext of the avatar
String countryname = CountryUtil.getCountryName(flagName);
if (countryname == null) {
countryname = "Unknown";
}
String tooltip = "<HTML>Name: " + player.getName() + "<br/>Country: " + countryname;
avatar.setToolTipText(tooltip);
avatar.repaint();
// used if avatar image can't be used
this.btnPlayer.setText(player.getName());
this.btnPlayer.setToolTipText(tooltip);
}
int playerLife = player.getLife();
if (playerLife > 99) {
Font font = lifeLabel.getFont();
@ -235,16 +253,9 @@ public class PlayerPanelExt extends javax.swing.JPanel {
Image image = ImageHelper.getImageFromResources(path);
Rectangle r = new Rectangle(80, 80);
BufferedImage resized = ImageHelper.getResizedImage(BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB), r);
this.avatar.update("player", resized, resized, resized, resized, r);
}
if (!player.getUserData().getFlagName().equals(flagName)) {
flagName = player.getUserData().getFlagName();
this.avatarFlag.setIcon(CountryUtil.getCountryFlagIcon(flagName));
this.avatarFlag.setToolTipText(CountryUtil.getCountryName(flagName));
avatar.repaint();
this.avatar.update(this.player.getName(), resized, resized, resized, resized, r);
}
}
this.avatar.setText(player.getName());
if (this.timer != null) {
if (player.getPriorityTimeLeft() != Integer.MAX_VALUE) {
String priorityTimeValue = getPriorityTimeLeftString(player);
@ -259,8 +270,6 @@ public class PlayerPanelExt extends javax.swing.JPanel {
}
}
this.btnPlayer.setText(player.getName());
this.btnPlayer.setToolTipText("Life: " + player.getLife());
if (player.isActive()) {
this.avatar.setBorder(greenBorder);
this.btnPlayer.setBorder(greenBorder);
@ -324,15 +333,8 @@ public class PlayerPanelExt extends javax.swing.JPanel {
Image image = ImageHelper.getImageFromResources(DEFAULT_AVATAR_PATH);
BufferedImage resized = ImageHelper.getResizedImage(BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB), r);
avatar = new HoverButton("player", resized, resized, resized, r);
avatar.setLayout(new GridLayout(4, 1, 0, 0));
avatar.add(new JLabel());
avatar.add(new JLabel());
avatar.add(avatarFlag);
avatar.setAlignTextLeft(true);
avatarFlag.setHorizontalAlignment(JLabel.LEFT);
avatarFlag.setVerticalAlignment(JLabel.BOTTOM);
avatar.add(new JLabel());
avatar = new HoverButton("", resized, resized, resized, r);
String showPlayerNamePermanently = MageFrame.getPreferences().get(PreferencesDialog.KEY_SHOW_PLAYER_NAMES_PERMANENTLY, "true");
if (showPlayerNamePermanently.equals("true")) {
avatar.setTextAlwaysVisible(true);