package mage.client.components; import java.awt.Color; import javax.swing.JEditorPane; import javax.swing.SwingUtilities; import mage.client.util.GUISizeHelper; import org.mage.card.arcane.ManaSymbols; import org.mage.card.arcane.UI; /** * Component for displaying text in mage. Supports drawing mana symbols. * * @author nantuko */ public class MageTextArea extends JEditorPane { private String currentText; private int currentPanelWidth; public MageTextArea() { UI.setHTMLEditorKit(this); setEditable(false); setBackground(new Color(0, 0, 0, 0)); // transparent background setFocusable(false); } @Override public void setText(String text) { setText(text, 0); } public void setText(String text, final int panelWidth) { if (text == null) { return; } if(text.equals(currentText) && panelWidth == currentPanelWidth) return; currentText = text; currentPanelWidth = panelWidth; final StringBuilder buffer = new StringBuilder(512); // Dialog is a java logical font family, so it should work on all systems buffer.append("
"); // Don't know what it does (easy italc?) but it bugs with multiple #HTML color codes (LevelX2) //text = text.replaceAll("#([^#]+)#", "$1"); //text = text.replaceAll("\\s*//\\s*", "
"); text = text.replace("\r\n", "
"); final String basicText = ManaSymbols.replaceSymbolsWithHTML(text, ManaSymbols.Type.DIALOG); if (!text.isEmpty()) { buffer.append(basicText); } buffer.append("
"); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { String promptText = buffer.toString(); MageTextArea.super.setText(promptText); // in case the text don't fit in the panel a tooltip with the text is added if (panelWidth > 0 && MageTextArea.this.getPreferredSize().getWidth() > panelWidth) { String tooltip = "

" + basicText + "

"; MageTextArea.super.setToolTipText(tooltip); } else { MageTextArea.super.setToolTipText(null); } setCaretPosition(0); } }); } }