Rewrote displaying tooltips (fixes grayed rectangle bug and wrong tooltip location on the edge).

This commit is contained in:
magenoxx 2010-12-21 18:20:54 +03:00
parent caae384903
commit 760f059fb8
4 changed files with 74 additions and 51 deletions

View file

@ -34,12 +34,7 @@
package mage.client; package mage.client;
import java.awt.AlphaComposite; import java.awt.*;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.SplashScreen;
import java.awt.event.ComponentAdapter; import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent; import java.awt.event.ComponentEvent;
import java.awt.event.WindowAdapter; import java.awt.event.WindowAdapter;
@ -148,7 +143,14 @@ public class MageFrame extends javax.swing.JFrame {
combat.hideDialog(); combat.hideDialog();
desktopPane.add(pickNumber, JLayeredPane.POPUP_LAYER); desktopPane.add(pickNumber, JLayeredPane.POPUP_LAYER);
session.getUI().addComponent(MageComponents.DESKTOP_PANE, desktopPane); session.getUI().addComponent(MageComponents.DESKTOP_PANE, desktopPane);
JComponent cardInfoPane = Plugins.getInstance().getCardInfoPane();
cardInfoPane.setSize(161, 221);
cardInfoPane.setPreferredSize(new Dimension(161, 221));
cardInfoPane.setVisible(false);
session.getUI().addComponent(MageComponents.CARD_INFO_PANE, cardInfoPane);
desktopPane.add(cardInfoPane, JLayeredPane.POPUP_LAYER);
String filename = "/background.jpg"; String filename = "/background.jpg";
try { try {
if (Plugins.getInstance().isThemePluginLoaded()) { if (Plugins.getInstance().isThemePluginLoaded()) {

View file

@ -5,7 +5,8 @@ public enum MageComponents {
NEW_GAME_BUTTON("btnNewTable"), NEW_GAME_BUTTON("btnNewTable"),
NEW_TABLE_OK_BUTTON("btnOK"), NEW_TABLE_OK_BUTTON("btnOK"),
TABLE_WAITING_START_BUTTON("btnStart"), TABLE_WAITING_START_BUTTON("btnStart"),
DESKTOP_PANE("desktopPane"); DESKTOP_PANE("desktopPane"),
CARD_INFO_PANE("cardInfoPane");
private String name; private String name;
MageComponents(String name) { MageComponents(String name) {

View file

@ -15,6 +15,7 @@ import mage.cards.action.ActionCallback;
import mage.cards.action.TransferData; import mage.cards.action.TransferData;
import mage.client.MageFrame; import mage.client.MageFrame;
import mage.client.cards.BigCard; import mage.client.cards.BigCard;
import mage.client.components.MageComponents;
import mage.client.game.PlayAreaPanel; import mage.client.game.PlayAreaPanel;
import mage.client.plugins.impl.Plugins; import mage.client.plugins.impl.Plugins;
import mage.client.remote.Session; import mage.client.remote.Session;
@ -68,32 +69,31 @@ public class MageActionCallback implements ActionCallback {
@Override @Override
public void mouseEntered(MouseEvent e, final TransferData data) { public void mouseEntered(MouseEvent e, final TransferData data) {
this.popupCard = data.card; hidePopup();
if (popup != null) { this.popupCard = data.card;
//DelayedViewerThread.getInstance().hide(data.popupText);
popup.hide(); Component parentComponent = SwingUtilities.getRoot(data.component);
} Point parentPoint = parentComponent.getLocationOnScreen();
// Draw Arrows for targets // Draw Arrows for targets
List<UUID> targets = data.card.getTargets(); List<UUID> targets = data.card.getTargets();
if (targets != null) { if (targets != null) {
Point parent = SwingUtilities.getRoot(data.component).getLocationOnScreen();
Point me = new Point(data.locationOnScreen); Point me = new Point(data.locationOnScreen);
me.translate(-parent.x, -parent.y); me.translate(-parentPoint.x, -parentPoint.y);
for (UUID uuid : targets) { for (UUID uuid : targets) {
//System.out.println("Getting play area panel for uuid: " + uuid); //System.out.println("Getting play area panel for uuid: " + uuid);
PlayAreaPanel p = session.getGame().getPlayers().get(uuid); PlayAreaPanel p = session.getGame().getPlayers().get(uuid);
if (p != null) { if (p != null) {
Point target = p.getLocationOnScreen(); Point target = p.getLocationOnScreen();
target.translate(-parent.x, -parent.y); target.translate(-parentPoint.x, -parentPoint.y);
ArrowBuilder.addArrow((int)me.getX() + 35, (int)me.getY(), (int)target.getX() + 40, (int)target.getY() - 40, Color.red); ArrowBuilder.addArrow((int)me.getX() + 35, (int)me.getY(), (int)target.getX() + 40, (int)target.getY() - 40, Color.red);
} else { } else {
for (PlayAreaPanel pa : session.getGame().getPlayers().values()) { for (PlayAreaPanel pa : session.getGame().getPlayers().values()) {
MagePermanent permanent = pa.getBattlefieldPanel().getPermanents().get(uuid); MagePermanent permanent = pa.getBattlefieldPanel().getPermanents().get(uuid);
if (permanent != null) { if (permanent != null) {
Point target = permanent.getLocationOnScreen(); Point target = permanent.getLocationOnScreen();
target.translate(-parent.x, -parent.y); target.translate(-parentPoint.x, -parentPoint.y);
ArrowBuilder.addArrow((int)me.getX() + 35, (int)me.getY(), (int)target.getX() + 40, (int)target.getY() + 10, Color.red); ArrowBuilder.addArrow((int)me.getX() + 35, (int)me.getY(), (int)target.getX() + 40, (int)target.getY() + 10, Color.red);
} }
} }
@ -103,33 +103,23 @@ public class MageActionCallback implements ActionCallback {
// Draw Arrows for source // Draw Arrows for source
if (data.card.isAbility()) { if (data.card.isAbility()) {
Point parent = SwingUtilities.getRoot(data.component).getLocationOnScreen();
Point me = new Point(data.locationOnScreen); Point me = new Point(data.locationOnScreen);
me.translate(-parent.x, -parent.y); me.translate(-parentPoint.x, -parentPoint.y);
UUID uuid = data.card.getParentId(); UUID uuid = data.card.getParentId();
for (PlayAreaPanel pa : session.getGame().getPlayers().values()) { for (PlayAreaPanel pa : session.getGame().getPlayers().values()) {
MagePermanent permanent = pa.getBattlefieldPanel().getPermanents().get(uuid); MagePermanent permanent = pa.getBattlefieldPanel().getPermanents().get(uuid);
if (permanent != null) { if (permanent != null) {
Point source = permanent.getLocationOnScreen(); Point source = permanent.getLocationOnScreen();
source.translate(-parent.x, -parent.y); source.translate(-parentPoint.x, -parentPoint.y);
ArrowBuilder.addArrow((int)source.getX() + 40, (int)source.getY() + 10, (int)me.getX() + 35, (int)me.getY() + 20, Color.blue); ArrowBuilder.addArrow((int)source.getX() + 40, (int)source.getY() + 10, (int)me.getX() + 35, (int)me.getY() + 20, Color.blue);
} }
} }
} }
showPopup(data); showPopup(data, parentComponent, parentPoint);
} }
private void showPopup(final TransferData data) { private void showPopup(final TransferData data, final Component parentComponent, final Point parentPoint) {
/*try {
((JDesktopPane)session.getUI().getComponent(MageComponents.DESKTOP_PANE)).add(data.popupText, JLayeredPane.POPUP_LAYER);
data.popupText.setBounds((int) data.locationOnScreen.getX() + data.popupOffsetX, (int) data.locationOnScreen.getY() + data.popupOffsetY + 40, 200, 200);
data.popupText.setText("Test");
DelayedViewerThread.getInstance().show((Component)data.popupText, 500);
} catch (InterruptedException ie) {
ie.printStackTrace();
}*/
if (cardInfoPane == null) { if (cardInfoPane == null) {
PopupFactory factory = PopupFactory.getSharedInstance(); PopupFactory factory = PopupFactory.getSharedInstance();
popup = factory.getPopup(data.component, data.popupText, (int) data.locationOnScreen.getX() + data.popupOffsetX, (int) data.locationOnScreen.getY() + data.popupOffsetY + 40); popup = factory.getPopup(data.component, data.popupText, (int) data.locationOnScreen.getX() + data.popupOffsetX, (int) data.locationOnScreen.getY() + data.popupOffsetY + 40);
@ -146,20 +136,31 @@ public class MageActionCallback implements ActionCallback {
ThreadUtils.threadPool2.submit(new Runnable() { ThreadUtils.threadPool2.submit(new Runnable() {
@Override @Override
public void run() { public void run() {
try { ThreadUtils.sleep(900);
Thread.sleep(900);
} catch (InterruptedException ie) {
ie.printStackTrace();
}
if (!popupCard.equals(data.card)) { if (!popupCard.equals(data.card)) {
return; return;
} }
PopupFactory factory = PopupFactory.getSharedInstance();
/*PopupFactory factory = PopupFactory.getSharedInstance();
((CardInfoPane)cardInfoPane).setCard(data.card); ((CardInfoPane)cardInfoPane).setCard(data.card);
cardInfoPane.setSize(161, 221); cardInfoPane.setSize(161, 221);
cardInfoPane.setPreferredSize(new Dimension(161, 221)); cardInfoPane.setPreferredSize(new Dimension(161, 221));
popup = factory.getPopup(data.component, cardInfoPane, (int) data.locationOnScreen.getX() + data.popupOffsetX, (int) data.locationOnScreen.getY() + data.popupOffsetY + 40); popup = factory.getPopup(data.component, cardInfoPane, (int) data.locationOnScreen.getX() + data.popupOffsetX, (int) data.locationOnScreen.getY() + data.popupOffsetY + 40);
popup.show(); popup.show();
*/
try {
Component popup2 = session.getUI().getComponent(MageComponents.CARD_INFO_PANE);
((CardInfoPane)popup2).setCard(data.card);
Point location = new Point((int) data.locationOnScreen.getX() + data.popupOffsetX, (int) data.locationOnScreen.getY() + data.popupOffsetY + 40);
location = GuiDisplayUtil.keepComponentInsideParent(location, parentPoint, popup2, parentComponent);
location.translate(-parentPoint.x, -parentPoint.y);
popup2.setLocation(location);
popup2.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
} }
}); });
} }
@ -198,16 +199,25 @@ public class MageActionCallback implements ActionCallback {
} }
} }
@Override private void hidePopup() {
public void mouseExited(MouseEvent e, final TransferData data) { this.popupCard = null;
this.popupCard = null; if (popup != null) {
//DelayedViewerThread.getInstance().hide(data.popupText); popup.hide();
if (popup != null) { }
popup.hide();
}
if (jPopupMenu != null) { if (jPopupMenu != null) {
jPopupMenu.setVisible(false); jPopupMenu.setVisible(false);
} }
try {
Component popup2 = session.getUI().getComponent(MageComponents.CARD_INFO_PANE);
popup2.setVisible(false);
} catch (Exception e2) {
e2.printStackTrace();;
}
}
@Override
public void mouseExited(MouseEvent e, final TransferData data) {
hidePopup();
ArrowBuilder.removeAllArrows(); ArrowBuilder.removeAllArrows();
} }

View file

@ -1,11 +1,6 @@
package mage.client.util.gui; package mage.client.util.gui;
import java.awt.Color; import java.awt.*;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GraphicsConfiguration;
import java.awt.Insets;
import javax.swing.JButton; import javax.swing.JButton;
import javax.swing.JLabel; import javax.swing.JLabel;
@ -19,6 +14,7 @@ import org.jdesktop.swingx.JXPanel;
public class GuiDisplayUtil { public class GuiDisplayUtil {
private static final Font cardNameFont = new Font("Calibri", Font.BOLD, 15); private static final Font cardNameFont = new Font("Calibri", Font.BOLD, 15);
private static Insets DEFAULT_INSETS = new Insets(0,0, 68, 15);
public static JXPanel getDescription(CardView card, int width, int height) { public static JXPanel getDescription(CardView card, int width, int height) {
JXPanel descriptionPanel = new JXPanel(); JXPanel descriptionPanel = new JXPanel();
@ -129,4 +125,18 @@ public class GuiDisplayUtil {
System.out.println("null"); System.out.println("null");
} }
} }
public static Point keepComponentInsideParent(Point l, Point parentPoint, Component c, Component parent) {
int dx = parentPoint.x + parent.getWidth() - DEFAULT_INSETS.right;
if (l.x + c.getWidth() > dx) {
l.x = dx - c.getWidth();
}
int dy = parentPoint.y + parent.getHeight() - DEFAULT_INSETS.bottom;
if (l.y + c.getHeight() > dy) {
l.y = Math.max(10, dy - c.getHeight());
}
return l;
}
} }