checkstyle

This commit is contained in:
jendave
2011-10-25 09:14:52 +00:00
parent 972acc9f41
commit 16bf6d6990
9 changed files with 850 additions and 449 deletions

View File

@@ -1,30 +1,39 @@
package arcane.ui;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import arcane.ui.util.Animation;
import arcane.ui.util.CardPanelMouseListener;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
/**
* <p>CardArea class.</p>
*
* @author Forge
* @version $Id$
*/
public class CardArea extends CardPanelContainer
implements CardPanelMouseListener {
public class CardArea extends CardPanelContainer implements CardPanelMouseListener
{
/**
*
*/
private static final long serialVersionUID = -5836122075999621592L;
/**
* Constant <code>GUTTER_Y=5</code>
* Constant <code>GUTTER_Y=5</code>.
*/
public static final int GUTTER_Y = 5;
/**
* Constant <code>GUTTER_X=5</code>
* Constant <code>GUTTER_X=5</code>.
*/
public static final int GUTTER_X = 5;
/**
@@ -60,13 +69,13 @@ public class CardArea extends CardPanelContainer
*
* @param scrollPane a {@link javax.swing.JScrollPane} object.
*/
public CardArea(JScrollPane scrollPane) {
public CardArea(final JScrollPane scrollPane) {
super(scrollPane);
setBackground(Color.white);
}
/** {@inheritDoc} */
public CardPanel getCardPanel(int x, int y) {
public final CardPanel getCardPanel(final int x, final int y) {
if (isVertical) {
for (int i = cardPanels.size() - 1; i >= 0; i--) {
CardPanel panel = cardPanels.get(i);
@@ -76,7 +85,9 @@ public class CardArea extends CardPanelContainer
int panelHeight = panel.getCardHeight();
if (x > panelX && x < panelX + panelWidth) {
if (y > panelY && y < panelY + panelHeight) {
if (!panel.isDisplayEnabled()) return null;
if (!panel.isDisplayEnabled()) {
return null;
}
return panel;
}
}
@@ -90,7 +101,9 @@ public class CardArea extends CardPanelContainer
int panelHeight = panel.getCardHeight();
if (x > panelX && x < panelX + panelWidth) {
if (y > panelY && y < panelY + panelHeight) {
if (!panel.isDisplayEnabled()) return null;
if (!panel.isDisplayEnabled()) {
return null;
}
return panel;
}
}
@@ -104,8 +117,10 @@ public class CardArea extends CardPanelContainer
*
* @since 1.0.15
*/
public void doLayout() {
if (cardPanels.isEmpty()) return;
public final void doLayout() {
if (cardPanels.isEmpty()) {
return;
}
Rectangle rect = scrollPane.getVisibleRect();
Insets insets = scrollPane.getInsets();
@@ -126,11 +141,16 @@ public class CardArea extends CardPanelContainer
cardHeight = Math.round(cardWidth * CardPanel.ASPECT_RATIO);
cardSpacingX = Math.round(cardWidth * VERT_CARD_SPACING_X);
cardSpacingY = cardHeight + Math.round(cardWidth * VERT_CARD_SPACING_Y);
int maxRows = (int) Math.floor((cardAreaWidth - GUTTER_X * 2 + cardSpacingX) / (cardWidth + cardSpacingX));
if (this.maxRows > 0) maxRows = Math.min(this.maxRows, maxRows);
int maxRows =
(int) Math.floor((cardAreaWidth - GUTTER_X * 2 + cardSpacingX) / (cardWidth + cardSpacingX));
if (this.maxRows > 0) {
maxRows = Math.min(this.maxRows, maxRows);
}
int availableRowHeight = cardAreaHeight - GUTTER_Y * 2;
int availableCardsPerRow = (int) Math.floor((availableRowHeight - (cardHeight - cardSpacingY)) / (double) cardSpacingY);
actualCardsPerRow = Math.max(availableCardsPerRow, (int) Math.ceil(cardPanels.size() / (float) maxRows));
int availableCardsPerRow =
(int) Math.floor((availableRowHeight - (cardHeight - cardSpacingY)) / (double) cardSpacingY);
actualCardsPerRow =
Math.max(availableCardsPerRow, (int) Math.ceil(cardPanels.size() / (float) maxRows));
int actualRowHeight = (int) Math.floor((actualCardsPerRow - 1) * cardSpacingY + cardHeight);
float overflow = actualRowHeight - availableRowHeight;
if (overflow > 0) {
@@ -139,16 +159,22 @@ public class CardArea extends CardPanelContainer
cardSpacingY -= offsetY;
}
actualRowHeight = (int) Math.floor((actualCardsPerRow - 1) * cardSpacingY + cardHeight);
if (actualRowHeight >= 0 && actualRowHeight <= availableRowHeight) break;
if (actualRowHeight >= 0 && actualRowHeight <= availableRowHeight) {
break;
}
cardWidth--;
if (cardWidth == cardWidthMin) break;
if (cardWidth == cardWidthMin) {
break;
}
}
float x = GUTTER_X;
int y = GUTTER_Y;
int zOrder = cardPanels.size() - 1, rowCount = 0;
for (CardPanel panel : cardPanels) {
if (panel != mouseDragPanel) panel.setCardBounds((int) Math.floor(x), y, cardWidth, cardHeight);
if (panel != mouseDragPanel) {
panel.setCardBounds((int) Math.floor(x), y, cardWidth, cardHeight);
}
y += cardSpacingY;
maxWidth = Math.round(x) + cardWidth + GUTTER_X;
maxHeight = Math.max(maxHeight, (y + (cardHeight - cardSpacingY) + GUTTER_Y));
@@ -167,11 +193,17 @@ public class CardArea extends CardPanelContainer
int extraCardSpacingX = Math.round(cardWidth * HORIZ_CARD_SPACING_X);
cardSpacingY = Math.round(cardHeight * HORIZ_CARD_SPACING_Y);
cardSpacingX = cardWidth + extraCardSpacingX;
int maxRows = (int) Math.floor((cardAreaHeight - GUTTER_Y * 2 + cardSpacingY) / (double) (cardHeight + cardSpacingY));
if (this.maxRows > 0) maxRows = Math.min(this.maxRows, maxRows);
int maxRows =
(int) Math.floor((cardAreaHeight - GUTTER_Y * 2 + cardSpacingY) /
(double) (cardHeight + cardSpacingY));
if (this.maxRows > 0) {
maxRows = Math.min(this.maxRows, maxRows);
}
int availableRowWidth = cardAreaWidth - GUTTER_X * 2;
int availableCardsPerRow = (int) Math.floor((availableRowWidth - (cardWidth - cardSpacingX)) / cardSpacingX);
actualCardsPerRow = Math.max(availableCardsPerRow, (int) Math.ceil(cardPanels.size() / (float) maxRows));
int availableCardsPerRow =
(int) Math.floor((availableRowWidth - (cardWidth - cardSpacingX)) / cardSpacingX);
actualCardsPerRow =
Math.max(availableCardsPerRow, (int) Math.ceil(cardPanels.size() / (float) maxRows));
int actualRowWidth = (int) Math.floor((actualCardsPerRow - 1) * cardSpacingX + cardWidth);
float overflow = actualRowWidth - availableRowWidth;
if (overflow > 0) {
@@ -180,16 +212,22 @@ public class CardArea extends CardPanelContainer
cardSpacingX -= offsetX;
}
actualRowWidth = (int) Math.floor((actualCardsPerRow - 1) * cardSpacingX + cardWidth);
if (actualRowWidth <= availableRowWidth) break;
if (actualRowWidth <= availableRowWidth) {
break;
}
cardWidth--;
if (cardWidth == cardWidthMin) break;
if (cardWidth == cardWidthMin) {
break;
}
}
float x = GUTTER_X;
int y = GUTTER_Y;
int zOrder = 0, rowCount = 0;
for (CardPanel panel : cardPanels) {
if (panel != mouseDragPanel) panel.setCardBounds((int) Math.floor(x), y, cardWidth, cardHeight);
if (panel != mouseDragPanel) {
panel.setCardBounds((int) Math.floor(x), y, cardWidth, cardHeight);
}
x += cardSpacingX;
maxWidth = Math.max(maxWidth, Math.round(x + (cardWidth - cardSpacingX) + GUTTER_X) - 1);
maxHeight = Math.max(maxHeight, y + (cardHeight - cardSpacingY) + GUTTER_Y);
@@ -213,16 +251,18 @@ public class CardArea extends CardPanelContainer
}
/** {@inheritDoc} */
public void paint(Graphics g) {
public final void paint(final Graphics g) {
boolean hasScrollbars = scrollPane.getVerticalScrollBar().isVisible();
if (hasScrollbars != this.hasScrollbars) revalidate();
if (hasScrollbars != this.hasScrollbars) {
revalidate();
}
this.hasScrollbars = hasScrollbars;
super.paint(g);
}
/** {@inheritDoc} */
public void mouseDragStart(CardPanel dragPanel, MouseEvent evt) {
public final void mouseDragStart(final CardPanel dragPanel, final MouseEvent evt) {
super.mouseDragStart(dragPanel, evt);
mouseDragStartX = dragPanel.getCardX();
@@ -240,7 +280,9 @@ public class CardArea extends CardPanelContainer
}
/** {@inheritDoc} */
public void mouseDragged(CardPanel dragPanel, int dragOffsetX, int dragOffsetY, MouseEvent evt) {
public final void mouseDragged(final CardPanel dragPanel,
final int dragOffsetX, final int dragOffsetY, final MouseEvent evt)
{
super.mouseDragged(dragPanel, dragOffsetX, dragOffsetY, evt);
int mouseX = evt.getX();
@@ -251,10 +293,15 @@ public class CardArea extends CardPanelContainer
CardPanel.dragAnimationPanel.setLocation(p.x, p.y);
CardPanel panel = getCardPanel(mouseX, mouseY);
if (panel == null || panel == dragPanel) return;
if (panel == null || panel == dragPanel) {
return;
}
int index = cardPanels.size();
while (--index >= 0)
if (cardPanels.get(index) == panel) break;
while (--index >= 0) {
if (cardPanels.get(index) == panel) {
break;
}
}
cardPanels.remove(dragPanel);
cardPanels.add(index, dragPanel);
mouseDragStartX = panel.getCardX();
@@ -263,7 +310,7 @@ public class CardArea extends CardPanelContainer
}
/** {@inheritDoc} */
public void mouseDragEnd(CardPanel dragPanel, MouseEvent evt) {
public final void mouseDragEnd(final CardPanel dragPanel, final MouseEvent evt) {
super.mouseDragEnd(dragPanel, evt);
doLayout();
JLayeredPane layeredPane = SwingUtilities.getRootPane(CardPanel.dragAnimationPanel).getLayeredPane();
@@ -272,8 +319,8 @@ public class CardArea extends CardPanelContainer
int startWidth = CardPanel.dragAnimationPanel.getCardWidth();
Point endPos = SwingUtilities.convertPoint(this, dragPanel.getCardLocation(), layeredPane);
int endWidth = dragPanel.getCardWidth();
Animation.moveCard(startX, startY, startWidth, endPos.x, endPos.y, endWidth, CardPanel.dragAnimationPanel, dragPanel,
layeredPane, 200);
Animation.moveCard(startX, startY, startWidth, endPos.x, endPos.y, endWidth,
CardPanel.dragAnimationPanel, dragPanel, layeredPane, 200);
}
/**
@@ -281,7 +328,7 @@ public class CardArea extends CardPanelContainer
*
* @return a float.
*/
public float getMaxCoverage() {
public final float getMaxCoverage() {
return maxCoverage;
}
@@ -290,7 +337,7 @@ public class CardArea extends CardPanelContainer
*
* @param maxCoverage a float.
*/
public void setMaxCoverage(float maxCoverage) {
public final void setMaxCoverage(float maxCoverage) {
this.maxCoverage = maxCoverage;
}
@@ -299,7 +346,7 @@ public class CardArea extends CardPanelContainer
*
* @param maxRows a int.
*/
public void setMaxRows(int maxRows) {
public final void setMaxRows(int maxRows) {
this.maxRows = maxRows;
}
@@ -308,7 +355,7 @@ public class CardArea extends CardPanelContainer
*
* @return a int.
*/
public int getMaxRows() {
public final int getMaxRows() {
return maxRows;
}
@@ -317,7 +364,7 @@ public class CardArea extends CardPanelContainer
*
* @param isVertical a boolean.
*/
public void setVertical(boolean isVertical) {
public final void setVertical(final boolean isVertical) {
this.isVertical = isVertical;
}
@@ -326,7 +373,7 @@ public class CardArea extends CardPanelContainer
*
* @return a boolean.
*/
public boolean isVertical() {
public final boolean isVertical() {
return isVertical;
}
}

View File

@@ -21,42 +21,60 @@ import java.util.List;
* @version $Id$
*/
public class CardPanel extends JPanel implements CardContainer {
/** Constant <code>serialVersionUID=2361907095724263295L</code> */
/** Constant <code>serialVersionUID=2361907095724263295L</code>. */
private static final long serialVersionUID = 2361907095724263295L;
/**
* Constant <code>TAPPED_ANGLE=Math.PI / 2</code>
* Constant <code>TAPPED_ANGLE=Math.PI / 2</code>.
*/
public static final double TAPPED_ANGLE = Math.PI / 2;
/**
* Constant <code>ASPECT_RATIO=3.5f / 2.5f</code>
* Constant <code>ASPECT_RATIO=3.5f / 2.5f</code>.
*/
public static final float ASPECT_RATIO = 3.5f / 2.5f;
/**
* Constant <code>dragAnimationPanel</code>
* Constant <code>dragAnimationPanel</code>.
*/
public static CardPanel dragAnimationPanel;
/** Constant <code>ROUNDED_CORNER_SIZE=0.1f</code> */
/** Constant <code>ROUNDED_CORNER_SIZE=0.1f</code>. */
private static final float ROUNDED_CORNER_SIZE = 0.1f;
/** Constant <code>SELECTED_BORDER_SIZE=0.01f</code> */
/** Constant <code>SELECTED_BORDER_SIZE=0.01f</code>. */
private static final float SELECTED_BORDER_SIZE = 0.01f;
/** Constant <code>BLACK_BORDER_SIZE=0.03f</code> */
/** Constant <code>BLACK_BORDER_SIZE=0.03f</code>. */
private static final float BLACK_BORDER_SIZE = 0.03f;
/** Constant <code>TEXT_GLOW_SIZE=6</code> */
/** Constant <code>TEXT_GLOW_SIZE=6</code>. */
private static final int TEXT_GLOW_SIZE = 6;
/** Constant <code>TEXT_GLOW_INTENSITY=3f</code> */
/** Constant <code>TEXT_GLOW_INTENSITY=3f</code>. */
private static final float TEXT_GLOW_INTENSITY = 3f;
/** Constant <code>rotCenterToTopCorner=1.0295630140987000315797369464196f</code> */
/** Constant <code>rotCenterToTopCorner=1.0295630140987000315797369464196f</code>. */
private static final float rotCenterToTopCorner = 1.0295630140987000315797369464196f;
/** Constant <code>rotCenterToBottomCorner=0.7071067811865475244008443621048f</code> */
/** Constant <code>rotCenterToBottomCorner=0.7071067811865475244008443621048f</code>. */
private static final float rotCenterToBottomCorner = 0.7071067811865475244008443621048f;
/**
*
*/
public Card gameCard;
/**
*
*/
public CardPanel attachedToPanel;
/**
*
*/
public List<CardPanel> attachedPanels = new ArrayList<CardPanel>();
/**
*
*/
public boolean tapped;
/**
*
*/
public double tappedAngle = 0;
/**
*
*/
public ScaledImagePanel imagePanel;
private GlowText titleText;
@@ -73,7 +91,7 @@ public class CardPanel extends JPanel implements CardContainer {
*
* @param newGameCard a {@link forge.Card} object.
*/
public CardPanel(Card newGameCard) {
public CardPanel(final Card newGameCard) {
this.gameCard = newGameCard;
setBackground(Color.black);
@@ -101,12 +119,12 @@ public class CardPanel extends JPanel implements CardContainer {
addComponentListener(new ComponentAdapter() {
@Override
public void componentShown(ComponentEvent e) {
public void componentShown(final ComponentEvent e) {
setCard(gameCard);
}
@Override
public void componentResized(ComponentEvent e) {
public void componentResized(final ComponentEvent e) {
setCard(gameCard);
}
});
@@ -121,7 +139,7 @@ public class CardPanel extends JPanel implements CardContainer {
* @param srcImageBlurred a {@link java.awt.Image} object.
* @param srcImageBlurred a {@link java.awt.Image} object.
*/
private void setImage(Image srcImage, Image srcImageBlurred) {
private void setImage(final Image srcImage, final Image srcImageBlurred) {
synchronized (imagePanel) {
imagePanel.setImage(srcImage, srcImageBlurred);
repaint();
@@ -139,21 +157,22 @@ public class CardPanel extends JPanel implements CardContainer {
*
* @param panel a {@link arcane.ui.CardPanel} object.
*/
public void setImage(final CardPanel panel) {
public final void setImage(final CardPanel panel) {
synchronized (panel.imagePanel) {
if (panel.imagePanel.hasImage())
if (panel.imagePanel.hasImage()) {
setImage(panel.imagePanel.srcImage, panel.imagePanel.srcImageBlurred);
else
} else {
panel.imageLoadListeners.add(this);
}
}
}
/**
* <p>setScalingType.</p>
*
* @param scalingType a {@link arcane.ui.ScaledImagePanel.ScalingType} object.
*/
public void setScalingType(ScalingType scalingType) {
public final void setScalingType(final ScalingType scalingType) {
imagePanel.setScalingType(scalingType);
}
@@ -162,7 +181,7 @@ public class CardPanel extends JPanel implements CardContainer {
*
* @param displayEnabled a boolean.
*/
public void setDisplayEnabled(boolean displayEnabled) {
public final void setDisplayEnabled(final boolean displayEnabled) {
this.displayEnabled = displayEnabled;
}
@@ -171,7 +190,7 @@ public class CardPanel extends JPanel implements CardContainer {
*
* @return a boolean.
*/
public boolean isDisplayEnabled() {
public final boolean isDisplayEnabled() {
return displayEnabled;
}
@@ -180,7 +199,7 @@ public class CardPanel extends JPanel implements CardContainer {
*
* @param isAnimationPanel a boolean.
*/
public void setAnimationPanel(boolean isAnimationPanel) {
public final void setAnimationPanel(final boolean isAnimationPanel) {
this.isAnimationPanel = isAnimationPanel;
}
@@ -189,7 +208,7 @@ public class CardPanel extends JPanel implements CardContainer {
*
* @param isSelected a boolean.
*/
public void setSelected(boolean isSelected) {
public final void setSelected(final boolean isSelected) {
this.isSelected = isSelected;
repaint();
}
@@ -199,14 +218,18 @@ public class CardPanel extends JPanel implements CardContainer {
*
* @param showCastingCost a boolean.
*/
public void setShowCastingCost(boolean showCastingCost) {
public final void setShowCastingCost(final boolean showCastingCost) {
this.showCastingCost = showCastingCost;
}
/** {@inheritDoc} */
public void paint(Graphics g) {
if (!displayEnabled) return;
if (!isValid()) super.validate();
public final void paint(final Graphics g) {
if (!displayEnabled) {
return;
}
if (!isValid()) {
super.validate();
}
Graphics2D g2d = (Graphics2D) g;
if (tappedAngle > 0) {
g2d = (Graphics2D) g2d.create();
@@ -217,7 +240,7 @@ public class CardPanel extends JPanel implements CardContainer {
}
/** {@inheritDoc} */
protected void paintComponent(Graphics g) {
protected final void paintComponent(final Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
@@ -226,25 +249,28 @@ public class CardPanel extends JPanel implements CardContainer {
if (this.gameCard != null) {
if ((!this.gameCard.getImageFilename().equals("none")) && (!this.gameCard.getName().equals("Morph"))) {
if ((this.gameCard.getCurSetCode().equals("2ED")) ||
(this.gameCard.getCurSetCode().equals("3ED")) ||
(this.gameCard.getCurSetCode().equals("4ED")) ||
(this.gameCard.getCurSetCode().equals("5ED")) ||
(this.gameCard.getCurSetCode().equals("6ED")) ||
(this.gameCard.getCurSetCode().equals("7ED")) ||
(this.gameCard.getCurSetCode().equals("8ED")) ||
(this.gameCard.getCurSetCode().equals("9ED")) ||
(this.gameCard.getCurSetCode().equals("CHR")) ||
(this.gameCard.getCurSetCode().equals("S99")) ||
(this.gameCard.getCurSetCode().equals("PTK")) ||
(this.gameCard.getCurSetCode().equals("S00"))) {
if ((this.gameCard.getCurSetCode().equals("2ED"))
|| (this.gameCard.getCurSetCode().equals("3ED"))
|| (this.gameCard.getCurSetCode().equals("4ED"))
|| (this.gameCard.getCurSetCode().equals("5ED"))
|| (this.gameCard.getCurSetCode().equals("6ED"))
|| (this.gameCard.getCurSetCode().equals("7ED"))
|| (this.gameCard.getCurSetCode().equals("8ED"))
|| (this.gameCard.getCurSetCode().equals("9ED"))
|| (this.gameCard.getCurSetCode().equals("CHR"))
|| (this.gameCard.getCurSetCode().equals("S99"))
|| (this.gameCard.getCurSetCode().equals("PTK"))
|| (this.gameCard.getCurSetCode().equals("S00")))
{
if (!isSelected) {
g2d.setColor(Color.black);
int offset = tapped ? 1 : 0;
for (int i = 1, n = Math.max(1, Math.round(cardWidth * SELECTED_BORDER_SIZE)); i <= n; i++)
g2d.drawRoundRect(cardXOffset - i, cardYOffset - i + offset, cardWidth + i * 2 - 1, cardHeight + i * 2 - 1,
for (int i = 1, n = Math.max(1, Math.round(cardWidth * SELECTED_BORDER_SIZE)); i <= n; i++) {
g2d.drawRoundRect(cardXOffset - i, cardYOffset - i + offset,
cardWidth + i * 2 - 1, cardHeight + i * 2 - 1,
cornerSize, cornerSize);
}
}
g2d.setColor(Color.white);
} else {
g2d.setColor(Color.black);
@@ -257,49 +283,64 @@ public class CardPanel extends JPanel implements CardContainer {
if (isSelected) {
g2d.setColor(Color.green);
int offset = tapped ? 1 : 0;
for (int i = 1, n = Math.max(1, Math.round(cardWidth * SELECTED_BORDER_SIZE)); i <= n; i++)
g2d.drawRoundRect(cardXOffset - i, cardYOffset - i + offset, cardWidth + i * 2 - 1, cardHeight + i * 2 - 1,
for (int i = 1, n = Math.max(1, Math.round(cardWidth * SELECTED_BORDER_SIZE)); i <= n; i++) {
g2d.drawRoundRect(cardXOffset - i, cardYOffset - i + offset,
cardWidth + i * 2 - 1, cardHeight + i * 2 - 1,
cornerSize, cornerSize);
}
}
}
/** {@inheritDoc} */
protected void paintChildren(Graphics g) {
protected final void paintChildren(final Graphics g) {
super.paintChildren(g);
boolean canDrawOverCard = showCastingCost && !isAnimationPanel;
if (!canDrawOverCard)
if (!canDrawOverCard) {
return;
}
int width = ManaSymbols.getWidth(gameCard.getManaCost());
if(cardWidth < 200)
ManaSymbols.draw(g, gameCard.getManaCost(), cardXOffset + cardWidth / 2 - width / 2, cardYOffset + cardHeight / 2);
if (cardWidth < 200) {
ManaSymbols.draw(g, gameCard.getManaCost(),
cardXOffset + cardWidth / 2 - width / 2, cardYOffset + cardHeight / 2);
}
int counters = getCard().getNumberOfCounters();
if (counters == 1) {
ManaSymbols.drawSymbol("counters1", g, cardXOffset - 15, cardYOffset + cardHeight - (cardHeight / 3) - 40);
ManaSymbols.drawSymbol("counters1", g, cardXOffset - 15,
cardYOffset + cardHeight - (cardHeight / 3) - 40);
} else if (counters == 2) {
ManaSymbols.drawSymbol("counters2", g, cardXOffset - 15, cardYOffset + cardHeight - (cardHeight / 3) - 40);
ManaSymbols.drawSymbol("counters2", g, cardXOffset - 15,
cardYOffset + cardHeight - (cardHeight / 3) - 40);
} else if (counters == 3) {
ManaSymbols.drawSymbol("counters3", g, cardXOffset - 15, cardYOffset + cardHeight - (cardHeight / 3) - 40);
ManaSymbols.drawSymbol("counters3", g, cardXOffset - 15,
cardYOffset + cardHeight - (cardHeight / 3) - 40);
} else if (counters > 3) {
ManaSymbols.drawSymbol("countersMulti", g, cardXOffset - 15, cardYOffset + cardHeight - (cardHeight / 3) - 40);
ManaSymbols.drawSymbol("countersMulti", g, cardXOffset - 15,
cardYOffset + cardHeight - (cardHeight / 3) - 40);
}
//int yOff = (cardHeight/4) + 2;
if (getCard().isAttacking()) {
ManaSymbols.drawSymbol("attack", g, cardXOffset + cardWidth / 4 - 16, cardYOffset + cardHeight - (cardHeight / 8) - 16);
ManaSymbols.drawSymbol("attack", g, cardXOffset + cardWidth / 4 - 16,
cardYOffset + cardHeight - (cardHeight / 8) - 16);
} else if (getCard().isBlocking()) {
ManaSymbols.drawSymbol("defend", g, cardXOffset + cardWidth / 4 - 16, cardYOffset + cardHeight - (cardHeight / 8) - 16);
ManaSymbols.drawSymbol("defend", g, cardXOffset + cardWidth / 4 - 16,
cardYOffset + cardHeight - (cardHeight / 8) - 16);
}
if (getCard().isCreature() && getCard().hasSickness() && AllZoneUtil.isCardInPlay(getCard()))
ManaSymbols.drawSymbol("summonsick", g, cardXOffset + cardWidth / 2 - 16, cardYOffset + cardHeight - (cardHeight / 8) - 16);
if (getCard().isCreature() && getCard().hasSickness() && AllZoneUtil.isCardInPlay(getCard())) {
ManaSymbols.drawSymbol("summonsick", g, cardXOffset + cardWidth / 2 - 16,
cardYOffset + cardHeight - (cardHeight / 8) - 16);
}
if (getCard().isPhasedOut())
ManaSymbols.drawSymbol("phasing", g, cardXOffset + cardWidth / 2 - 16, cardYOffset + cardHeight - (cardHeight / 8) - 16);
if (getCard().isPhasedOut()) {
ManaSymbols.drawSymbol("phasing", g, cardXOffset + cardWidth / 2 - 16,
cardYOffset + cardHeight - (cardHeight / 8) - 16);
}
if (getCard() != null) {
if (this.gameCard.getFoil() > 0) {
@@ -314,14 +355,16 @@ public class CardPanel extends JPanel implements CardContainer {
String s = AllZone.getHumanPlayer().getManaPool().getManaList();
if (!s.equals("|||||||||||")) {
String mList[] = s.split("\\|", 12);
String[] mList = s.split("\\|", 12);
int n = 0;
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 6; j++) {
if (!mList[n].equals("")) {
width = ManaSymbols.getWidth(mList[n]);
ManaSymbols.draw(g, mList[n], cardXOffset + ((i + 1) * (cardWidth / 3)) - width / 2, cardYOffset + ((j + 1) * (cardHeight / 7)));
ManaSymbols.draw(g, mList[n],
cardXOffset + ((i + 1) * (cardWidth / 3)) - width / 2,
cardYOffset + ((j + 1) * (cardHeight / 7)));
}
n++;
@@ -338,7 +381,7 @@ public class CardPanel extends JPanel implements CardContainer {
*
* @since 1.0.15
*/
public void doLayout() {
public final void doLayout() {
int borderSize = Math.round(cardWidth * BLACK_BORDER_SIZE);
imagePanel.setLocation(cardXOffset + borderSize, cardYOffset + borderSize);
imagePanel.setSize(cardWidth - borderSize * 2, cardHeight - borderSize * 2);
@@ -358,18 +401,19 @@ public class CardPanel extends JPanel implements CardContainer {
int ptY = Math.round(cardHeight * (675f / 680)) - ptSize.height;
ptText.setLocation(cardXOffset + ptX - TEXT_GLOW_SIZE / 2, cardYOffset + ptY - TEXT_GLOW_SIZE / 2);
if (isAnimationPanel || cardWidth < 200)
if (isAnimationPanel || cardWidth < 200) {
imagePanel.setScalingType(ScalingType.nearestNeighbor);
else
} else {
imagePanel.setScalingType(ScalingType.bilinear);
}
}
/**
* <p>toString.</p>
*
* @return a {@link java.lang.String} object.
*/
public String toString() {
public final String toString() {
return gameCard.getName();
}
@@ -381,7 +425,7 @@ public class CardPanel extends JPanel implements CardContainer {
* @param width a int.
* @param height a int.
*/
public void setCardBounds(int x, int y, int width, int height) {
public final void setCardBounds(final int x, final int y, int width, int height) {
cardWidth = width;
cardHeight = height;
int rotCenterX = Math.round(width / 2f);
@@ -400,10 +444,12 @@ public class CardPanel extends JPanel implements CardContainer {
/**
* <p>repaint.</p>
*/
public void repaint() {
public final void repaint() {
Rectangle b = getBounds();
JRootPane rootPane = SwingUtilities.getRootPane(this);
if (rootPane == null) return;
if (rootPane == null) {
return;
}
Point p = SwingUtilities.convertPoint(getParent(), b.x, b.y, rootPane);
rootPane.repaint(p.x, p.y, b.width, b.height);
}
@@ -413,7 +459,7 @@ public class CardPanel extends JPanel implements CardContainer {
*
* @return a int.
*/
public int getCardX() {
public final int getCardX() {
return getX() + cardXOffset;
}
@@ -422,7 +468,7 @@ public class CardPanel extends JPanel implements CardContainer {
*
* @return a int.
*/
public int getCardY() {
public final int getCardY() {
return getY() + cardYOffset;
}
@@ -431,7 +477,7 @@ public class CardPanel extends JPanel implements CardContainer {
*
* @return a int.
*/
public int getCardWidth() {
public final int getCardWidth() {
return cardWidth;
}
@@ -440,7 +486,7 @@ public class CardPanel extends JPanel implements CardContainer {
*
* @return a int.
*/
public int getCardHeight() {
public final int getCardHeight() {
return cardHeight;
}
@@ -449,7 +495,7 @@ public class CardPanel extends JPanel implements CardContainer {
*
* @return a {@link java.awt.Point} object.
*/
public Point getCardLocation() {
public final Point getCardLocation() {
Point p = getLocation();
p.x += cardXOffset;
p.y += cardYOffset;
@@ -461,9 +507,10 @@ public class CardPanel extends JPanel implements CardContainer {
*
* @param card a {@link forge.Card} object.
*/
public void setText(Card card) {
if (card == null || !Singletons.getModel().getPreferences().cardOverlay)
public final void setText(final Card card) {
if (card == null || !Singletons.getModel().getPreferences().cardOverlay) {
return;
}
if (card.isFaceDown()) {
titleText.setText("");
@@ -474,7 +521,9 @@ public class CardPanel extends JPanel implements CardContainer {
}
if (card.isCreature() && card.isPlaneswalker()) {
ptText.setText(card.getNetAttack() + "/" + card.getNetDefense() + " (" + String.valueOf(card.getCounters(Counters.LOYALTY)) + ")");
ptText.setText(card.getNetAttack() + "/"
+ card.getNetDefense()
+ " (" + String.valueOf(card.getCounters(Counters.LOYALTY)) + ")");
} else if (card.isCreature()) {
ptText.setText(card.getNetAttack() + "/" + card.getNetDefense());
} else if (card.isPlaneswalker()) {
@@ -489,15 +538,19 @@ public class CardPanel extends JPanel implements CardContainer {
*
* @return a {@link forge.Card} object.
*/
public Card getCard() {
public final Card getCard() {
return gameCard;
}
/** {@inheritDoc} */
public void setCard(Card card) {
if (gameCard != null && gameCard.equals(card) && isAnimationPanel && imagePanel.hasImage()) return;
public final void setCard(final Card card) {
if (gameCard != null && gameCard.equals(card) && isAnimationPanel && imagePanel.hasImage()) {
return;
}
this.gameCard = card;
if (!isShowing()) return;
if (!isShowing()) {
return;
}
Insets i = getInsets();
Image image = card == null ? null : ImageCache.getImage(card, getWidth() - i.left - i.right, getHeight()
- i.top - i.bottom);

View File

@@ -1,34 +1,51 @@
package arcane.ui;
import arcane.ui.util.CardPanelMouseListener;
import arcane.ui.util.UI;
import forge.Card;
import forge.Constant;
import javax.swing.*;
import java.awt.*;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import arcane.ui.util.CardPanelMouseListener;
import arcane.ui.util.UI;
import forge.Card;
import forge.Constant;
/**
* Manages mouse events and common funcitonality for CardPanel containing components.
* Manages mouse events and common functionality for CardPanel containing
* components.
*
* @author Forge
* @version $Id$
*/
abstract public class CardPanelContainer extends JPanel {
/** Constant <code>serialVersionUID=-6400018234895548306L</code> */
public abstract class CardPanelContainer extends JPanel {
/** Constant <code>serialVersionUID=-6400018234895548306L</code>. */
private static final long serialVersionUID = -6400018234895548306L;
/** Constant <code>DRAG_SMUDGE=10</code> */
private final static int DRAG_SMUDGE = 10;
/** Constant <code>DRAG_SMUDGE=10</code>. */
private static final int DRAG_SMUDGE = 10;
/**
*
*/
public List<CardPanel> cardPanels = new ArrayList<CardPanel>();
/**
*
*/
protected JScrollPane scrollPane;
/**
*
*/
protected int cardWidthMin = 50, cardWidthMax = Constant.Runtime.width[0];
/**
*
*/
protected CardPanel mouseOverPanel, mouseDownPanel, mouseDragPanel;
private List<CardPanelMouseListener> listeners = new ArrayList<CardPanelMouseListener>(2);
@@ -38,17 +55,20 @@ abstract public class CardPanelContainer extends JPanel {
private int zoneID;
/**
* <p>Constructor for CardPanelContainer.</p>
* <p>
* Constructor for CardPanelContainer.
* </p>
*
* @param scrollPane a {@link javax.swing.JScrollPane} object.
* @param scrollPane
* a {@link javax.swing.JScrollPane} object.
*/
public CardPanelContainer(JScrollPane scrollPane) {
public CardPanelContainer(final JScrollPane scrollPane) {
this.scrollPane = scrollPane;
setOpaque(true);
addMouseMotionListener(new MouseMotionListener() {
public void mouseDragged(MouseEvent evt) {
public void mouseDragged(final MouseEvent evt) {
if (!dragEnabled) {
mouseOutPanel(evt);
return;
@@ -60,15 +80,20 @@ abstract public class CardPanelContainer extends JPanel {
int x = evt.getX();
int y = evt.getY();
CardPanel panel = getCardPanel(x, y);
if (panel == null) return;
if (panel != mouseDownPanel) return;
if (panel == null) {
return;
}
if (panel != mouseDownPanel) {
return;
}
if (intialMouseDragX == -1) {
intialMouseDragX = x;
intialMouseDragY = y;
return;
}
if (Math.abs(x - intialMouseDragX) < DRAG_SMUDGE && Math.abs(y - intialMouseDragY) < DRAG_SMUDGE)
if (Math.abs(x - intialMouseDragX) < DRAG_SMUDGE && Math.abs(y - intialMouseDragY) < DRAG_SMUDGE) {
return;
}
mouseDownPanel = null;
mouseDragPanel = panel;
mouseDragOffsetX = panel.getX() - intialMouseDragX;
@@ -76,10 +101,14 @@ abstract public class CardPanelContainer extends JPanel {
CardPanelContainer.this.mouseDragStart(mouseDragPanel, evt);
}
public void mouseMoved(MouseEvent evt) {
public void mouseMoved(final MouseEvent evt) {
CardPanel panel = getCardPanel(evt.getX(), evt.getY());
if (mouseOverPanel != null && mouseOverPanel != panel) CardPanelContainer.this.mouseOutPanel(evt);
if (panel == null) return;
if (mouseOverPanel != null && mouseOverPanel != panel) {
CardPanelContainer.this.mouseOutPanel(evt);
}
if (panel == null) {
return;
}
mouseOverPanel = panel;
mouseOverPanel.setSelected(true);
CardPanelContainer.this.mouseOver(panel, evt);
@@ -89,16 +118,20 @@ abstract public class CardPanelContainer extends JPanel {
addMouseListener(new MouseAdapter() {
private boolean[] buttonsDown = new boolean[4];
public void mousePressed(MouseEvent evt) {
public void mousePressed(final MouseEvent evt) {
int button = evt.getButton();
if (button < 1 || button > 3) return;
if (button < 1 || button > 3) {
return;
}
buttonsDown[button] = true;
mouseDownPanel = getCardPanel(evt.getX(), evt.getY());
}
public void mouseReleased(MouseEvent evt) {
public void mouseReleased(final MouseEvent evt) {
int button = evt.getButton();
if (button < 1 || button > 3) return;
if (button < 1 || button > 3) {
return;
}
if (dragEnabled) {
intialMouseDragX = -1;
@@ -109,7 +142,9 @@ abstract public class CardPanelContainer extends JPanel {
}
}
if (!buttonsDown[button]) return;
if (!buttonsDown[button]) {
return;
}
buttonsDown[button] = false;
CardPanel panel = getCardPanel(evt.getX(), evt.getY());
@@ -133,76 +168,95 @@ abstract public class CardPanelContainer extends JPanel {
}
}
public void mouseExited(MouseEvent evt) {
public void mouseExited(final MouseEvent evt) {
mouseOutPanel(evt);
}
public void mouseEntered(MouseEvent e) {
public void mouseEntered(final MouseEvent e) {
}
});
}
/**
* <p>mouseOutPanel.</p>
* <p>
* mouseOutPanel.
* </p>
*
* @param evt a {@link java.awt.event.MouseEvent} object.
* @param evt
* a {@link java.awt.event.MouseEvent} object.
*/
private void mouseOutPanel(MouseEvent evt) {
if (mouseOverPanel == null) return;
private void mouseOutPanel(final MouseEvent evt) {
if (mouseOverPanel == null) {
return;
}
mouseOverPanel.setSelected(false);
mouseOut(mouseOverPanel, evt);
mouseOverPanel = null;
}
/*public void resetDrag(){
mouseDragPanel = null;
invalidate();
};*/
/*
* public void resetDrag(){ mouseDragPanel = null; invalidate(); };
*/
/**
* <p>getCardPanel.</p>
* <p>
* getCardPanel.
* </p>
*
* @param x a int.
* @param y a int.
* @param x
* a int.
* @param y
* a int.
* @return a {@link arcane.ui.CardPanel} object.
*/
abstract protected CardPanel getCardPanel(int x, int y);
protected abstract CardPanel getCardPanel(int x, int y);
/**
* Must call from the Swing event thread.
*
* @param card a {@link forge.Card} object.
* @param card
* a {@link forge.Card} object.
* @return a {@link arcane.ui.CardPanel} object.
*/
public CardPanel addCard(Card card) {
public final CardPanel addCard(final Card card) {
final CardPanel placeholder = new CardPanel(card);
placeholder.setDisplayEnabled(false);
cardPanels.add(placeholder);
add(placeholder);
doLayout();
// int y = Math.min(placeholder.getHeight(), scrollPane.getVisibleRect().height);
scrollRectToVisible(new Rectangle(placeholder.getCardX(), placeholder.getCardY(), placeholder.getCardWidth(), placeholder
.getCardHeight()));
// int y = Math.min(placeholder.getHeight(),
// scrollPane.getVisibleRect().height);
scrollRectToVisible(new Rectangle(placeholder.getCardX(), placeholder.getCardY(), placeholder.getCardWidth(),
placeholder.getCardHeight()));
return placeholder;
}
/**
* <p>getCardPanel.</p>
* <p>
* getCardPanel.
* </p>
*
* @param gameCardID a int.
* @param gameCardID
* a int.
* @return a {@link arcane.ui.CardPanel} object.
*/
public CardPanel getCardPanel(int gameCardID) {
for (CardPanel panel : cardPanels)
if (panel.gameCard.getUniqueNumber() == gameCardID) return panel;
public final CardPanel getCardPanel(final int gameCardID) {
for (CardPanel panel : cardPanels) {
if (panel.gameCard.getUniqueNumber() == gameCardID) {
return panel;
}
}
return null;
}
/**
* <p>removeCardPanel.</p>
* <p>
* removeCardPanel.
* </p>
*
* @param fromPanel a {@link arcane.ui.CardPanel} object.
* @param fromPanel
* a {@link arcane.ui.CardPanel} object.
*/
public void removeCardPanel(final CardPanel fromPanel) {
public final void removeCardPanel(final CardPanel fromPanel) {
UI.invokeAndWait(new Runnable() {
public void run() {
if (mouseDragPanel != null) {
@@ -222,9 +276,11 @@ abstract public class CardPanelContainer extends JPanel {
}
/**
* <p>clear.</p>
* <p>
* clear.
* </p>
*/
public void clear() {
public final void clear() {
UI.invokeAndWait(new Runnable() {
public void run() {
cardPanels.clear();
@@ -238,194 +294,265 @@ abstract public class CardPanelContainer extends JPanel {
}
/**
* <p>Getter for the field <code>scrollPane</code>.</p>
* <p>
* Getter for the field <code>scrollPane</code>.
* </p>
*
* @return a {@link javax.swing.JScrollPane} object.
*/
public JScrollPane getScrollPane() {
public final JScrollPane getScrollPane() {
return scrollPane;
}
/**
* <p>Getter for the field <code>cardWidthMin</code>.</p>
* <p>
* Getter for the field <code>cardWidthMin</code>.
* </p>
*
* @return a int.
*/
public int getCardWidthMin() {
public final int getCardWidthMin() {
return cardWidthMin;
}
/**
* <p>Setter for the field <code>cardWidthMin</code>.</p>
* <p>
* Setter for the field <code>cardWidthMin</code>.
* </p>
*
* @param cardWidthMin a int.
* @param cardWidthMin
* a int.
*/
public void setCardWidthMin(int cardWidthMin) {
public final void setCardWidthMin(int cardWidthMin) {
this.cardWidthMin = cardWidthMin;
}
/**
* <p>Getter for the field <code>cardWidthMax</code>.</p>
* <p>
* Getter for the field <code>cardWidthMax</code>.
* </p>
*
* @return a int.
*/
public int getCardWidthMax() {
public final int getCardWidthMax() {
return cardWidthMax;
}
/**
* <p>Setter for the field <code>cardWidthMax</code>.</p>
* <p>
* Setter for the field <code>cardWidthMax</code>.
* </p>
*
* @param cardWidthMax a int.
* @param cardWidthMax
* a int.
*/
public void setCardWidthMax(int cardWidthMax) {
public final void setCardWidthMax(int cardWidthMax) {
this.cardWidthMax = cardWidthMax;
}
/**
* <p>isDragEnabled.</p>
* <p>
* isDragEnabled.
* </p>
*
* @return a boolean.
*/
public boolean isDragEnabled() {
public final boolean isDragEnabled() {
return dragEnabled;
}
/**
* <p>Setter for the field <code>dragEnabled</code>.</p>
* <p>
* Setter for the field <code>dragEnabled</code>.
* </p>
*
* @param dragEnabled a boolean.
* @param dragEnabled
* a boolean.
*/
public void setDragEnabled(boolean dragEnabled) {
public final void setDragEnabled(boolean dragEnabled) {
this.dragEnabled = dragEnabled;
}
/**
* <p>addCardPanelMouseListener.</p>
* <p>
* addCardPanelMouseListener.
* </p>
*
* @param listener a {@link arcane.ui.util.CardPanelMouseListener} object.
* @param listener
* a {@link arcane.ui.util.CardPanelMouseListener} object.
*/
public void addCardPanelMouseListener(CardPanelMouseListener listener) {
public final void addCardPanelMouseListener(final CardPanelMouseListener listener) {
listeners.add(listener);
}
/**
* <p>mouseLeftClicked.</p>
* <p>
* mouseLeftClicked.
* </p>
*
* @param panel a {@link arcane.ui.CardPanel} object.
* @param evt a {@link java.awt.event.MouseEvent} object.
* @param panel
* a {@link arcane.ui.CardPanel} object.
* @param evt
* a {@link java.awt.event.MouseEvent} object.
*/
public void mouseLeftClicked(CardPanel panel, MouseEvent evt) {
for (CardPanelMouseListener listener : listeners)
public void mouseLeftClicked(final CardPanel panel, final MouseEvent evt) {
for (CardPanelMouseListener listener : listeners) {
listener.mouseLeftClicked(panel, evt);
}
}
/**
* <p>mouseRightClicked.</p>
* <p>
* mouseRightClicked.
* </p>
*
* @param panel a {@link arcane.ui.CardPanel} object.
* @param evt a {@link java.awt.event.MouseEvent} object.
* @param panel
* a {@link arcane.ui.CardPanel} object.
* @param evt
* a {@link java.awt.event.MouseEvent} object.
*/
public void mouseRightClicked(CardPanel panel, MouseEvent evt) {
for (CardPanelMouseListener listener : listeners)
public final void mouseRightClicked(final CardPanel panel, final MouseEvent evt) {
for (CardPanelMouseListener listener : listeners) {
listener.mouseRightClicked(panel, evt);
}
}
/**
* <p>mouseMiddleClicked.</p>
* <p>
* mouseMiddleClicked.
* </p>
*
* @param panel a {@link arcane.ui.CardPanel} object.
* @param evt a {@link java.awt.event.MouseEvent} object.
* @param panel
* a {@link arcane.ui.CardPanel} object.
* @param evt
* a {@link java.awt.event.MouseEvent} object.
*/
public void mouseMiddleClicked(CardPanel panel, MouseEvent evt) {
for (CardPanelMouseListener listener : listeners)
public final void mouseMiddleClicked(final CardPanel panel, final MouseEvent evt) {
for (CardPanelMouseListener listener : listeners) {
listener.mouseMiddleClicked(panel, evt);
}
}
/**
* <p>mouseDragEnd.</p>
* <p>
* mouseDragEnd.
* </p>
*
* @param dragPanel a {@link arcane.ui.CardPanel} object.
* @param evt a {@link java.awt.event.MouseEvent} object.
* @param dragPanel
* a {@link arcane.ui.CardPanel} object.
* @param evt
* a {@link java.awt.event.MouseEvent} object.
*/
public void mouseDragEnd(CardPanel dragPanel, MouseEvent evt) {
for (CardPanelMouseListener listener : listeners)
public void mouseDragEnd(final CardPanel dragPanel, final MouseEvent evt) {
for (CardPanelMouseListener listener : listeners) {
listener.mouseDragEnd(dragPanel, evt);
}
}
/**
* <p>mouseDragged.</p>
* <p>
* mouseDragged.
* </p>
*
* @param dragPanel a {@link arcane.ui.CardPanel} object.
* @param dragOffsetX a int.
* @param dragOffsetY a int.
* @param evt a {@link java.awt.event.MouseEvent} object.
* @param dragPanel
* a {@link arcane.ui.CardPanel} object.
* @param dragOffsetX
* a int.
* @param dragOffsetY
* a int.
* @param evt
* a {@link java.awt.event.MouseEvent} object.
*/
public void mouseDragged(CardPanel dragPanel, int dragOffsetX, int dragOffsetY, MouseEvent evt) {
for (CardPanelMouseListener listener : listeners)
public void mouseDragged(final CardPanel dragPanel, final int dragOffsetX, final int dragOffsetY,
final MouseEvent evt) {
for (CardPanelMouseListener listener : listeners) {
listener.mouseDragged(mouseDragPanel, mouseDragOffsetX, mouseDragOffsetY, evt);
}
}
/**
* <p>mouseDragStart.</p>
* <p>
* mouseDragStart.
* </p>
*
* @param dragPanel a {@link arcane.ui.CardPanel} object.
* @param evt a {@link java.awt.event.MouseEvent} object.
* @param dragPanel
* a {@link arcane.ui.CardPanel} object.
* @param evt
* a {@link java.awt.event.MouseEvent} object.
*/
public void mouseDragStart(CardPanel dragPanel, MouseEvent evt) {
for (CardPanelMouseListener listener : listeners)
public void mouseDragStart(final CardPanel dragPanel, final MouseEvent evt) {
for (CardPanelMouseListener listener : listeners) {
listener.mouseDragStart(mouseDragPanel, evt);
}
}
/**
* <p>mouseOut.</p>
* <p>
* mouseOut.
* </p>
*
* @param panel a {@link arcane.ui.CardPanel} object.
* @param evt a {@link java.awt.event.MouseEvent} object.
* @param panel
* a {@link arcane.ui.CardPanel} object.
* @param evt
* a {@link java.awt.event.MouseEvent} object.
*/
public void mouseOut(CardPanel panel, MouseEvent evt) {
for (CardPanelMouseListener listener : listeners)
public final void mouseOut(final CardPanel panel, final MouseEvent evt) {
for (CardPanelMouseListener listener : listeners) {
listener.mouseOut(mouseOverPanel, evt);
}
/**
* <p>mouseOver.</p>
*
* @param panel a {@link arcane.ui.CardPanel} object.
* @param evt a {@link java.awt.event.MouseEvent} object.
*/
public void mouseOver(CardPanel panel, MouseEvent evt) {
for (CardPanelMouseListener listener : listeners)
listener.mouseOver(panel, evt);
}
/**
* <p>getCardFromMouseOverPanel.</p>
* <p>
* mouseOver.
* </p>
*
* @param panel
* a {@link arcane.ui.CardPanel} object.
* @param evt
* a {@link java.awt.event.MouseEvent} object.
*/
public final void mouseOver(final CardPanel panel, final MouseEvent evt) {
for (CardPanelMouseListener listener : listeners) {
listener.mouseOver(panel, evt);
}
}
/**
* <p>
* getCardFromMouseOverPanel.
* </p>
*
* @return a {@link forge.Card} object.
*/
public Card getCardFromMouseOverPanel() {
if (mouseOverPanel != null)
public final Card getCardFromMouseOverPanel() {
if (mouseOverPanel != null) {
return mouseOverPanel.gameCard;
else
} else {
return null;
}
}
/**
* <p>Getter for the field <code>zoneID</code>.</p>
* <p>
* Getter for the field <code>zoneID</code>.
* </p>
*
* @return a int.
*/
public int getZoneID() {
public final int getZoneID() {
return zoneID;
}
/**
* <p>Setter for the field <code>zoneID</code>.</p>
* <p>
* Setter for the field <code>zoneID</code>.
* </p>
*
* @param zoneID a int.
* @param zoneID
* a int.
*/
public void setZoneID(int zoneID) {
public void setZoneID(final int zoneID) {
this.zoneID = zoneID;
}
}

View File

@@ -13,7 +13,7 @@ import java.awt.event.MouseEvent;
* @version $Id$
*/
public class HandArea extends CardArea {
/** Constant <code>serialVersionUID=7488132628637407745L</code> */
/** Constant <code>serialVersionUID=7488132628637407745L</code>. */
private static final long serialVersionUID = 7488132628637407745L;
/**
@@ -22,36 +22,40 @@ public class HandArea extends CardArea {
* @param scrollPane a {@link javax.swing.JScrollPane} object.
* @param frame a {@link java.awt.Frame} object.
*/
public HandArea(JScrollPane scrollPane, final Frame frame) {
public HandArea(final JScrollPane scrollPane, final Frame frame) {
super(scrollPane);
setDragEnabled(true);
setVertical(true);
addCardPanelMouseListener(new CardPanelMouseListener() {
public void mouseRightClicked(CardPanel panel, MouseEvent evt) {
public void mouseRightClicked(final CardPanel panel, final MouseEvent evt) {
}
public void mouseOver(CardPanel panel, MouseEvent evt) {
public void mouseOver(final CardPanel panel, final MouseEvent evt) {
}
public void mouseOut(CardPanel panel, MouseEvent evt) {
public void mouseOut(final CardPanel panel, final MouseEvent evt) {
}
public void mouseMiddleClicked(CardPanel panel, MouseEvent evt) {
public void mouseMiddleClicked(final CardPanel panel, final MouseEvent evt) {
}
public void mouseLeftClicked(CardPanel panel, MouseEvent evt) {
public void mouseLeftClicked(final CardPanel panel, final MouseEvent evt) {
}
public void mouseDragged(CardPanel dragPanel, int dragOffsetX, int dragOffsetY, MouseEvent evt) {
public void mouseDragged(final CardPanel dragPanel,
final int dragOffsetX,
final int dragOffsetY,
final MouseEvent evt)
{
}
public void mouseDragStart(CardPanel dragPanel, MouseEvent evt) {
public void mouseDragStart(final CardPanel dragPanel, final MouseEvent evt) {
}
public void mouseDragEnd(CardPanel dragPanel, MouseEvent evt) {
public void mouseDragEnd(final CardPanel dragPanel, final MouseEvent evt) {
}
});
}

View File

@@ -1,36 +1,41 @@
package arcane.ui;
import arcane.ui.util.CardPanelMouseListener;
import forge.Card;
import javax.swing.*;
import java.awt.*;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.swing.JScrollPane;
import arcane.ui.util.CardPanelMouseListener;
import forge.Card;
/**
* <p>PlayArea class.</p>
* <p>
* PlayArea class.
* </p>
*
* @author Forge
* @version $Id$
*/
public class PlayArea extends CardPanelContainer implements CardPanelMouseListener {
/** Constant <code>serialVersionUID=8333013579724492513L</code> */
/** Constant <code>serialVersionUID=8333013579724492513L</code>. */
private static final long serialVersionUID = 8333013579724492513L;
/** Constant <code>GUTTER_Y=5</code> */
static private final int GUTTER_Y = 5;
/** Constant <code>GUTTER_X=5</code> */
static private final int GUTTER_X = 5;
/** Constant <code>EXTRA_CARD_SPACING_X=0.04f</code> */
/** Constant <code>GUTTER_Y=5</code>. */
private static final int GUTTER_Y = 5;
/** Constant <code>GUTTER_X=5</code>. */
private static final int GUTTER_X = 5;
/** Constant <code>EXTRA_CARD_SPACING_X=0.04f</code>. */
static final float EXTRA_CARD_SPACING_X = 0.04f;
/** Constant <code>CARD_SPACING_Y=0.06f</code> */
static private final float CARD_SPACING_Y = 0.06f;
/** Constant <code>STACK_SPACING_X=0.07f</code> */
static private final float STACK_SPACING_X = 0.07f;
/** Constant <code>STACK_SPACING_Y=0.07f</code> */
static private final float STACK_SPACING_Y = 0.07f;
/** Constant <code>CARD_SPACING_Y=0.06f</code>. */
private static final float CARD_SPACING_Y = 0.06f;
/** Constant <code>STACK_SPACING_X=0.07f</code>. */
private static final float STACK_SPACING_X = 0.07f;
/** Constant <code>STACK_SPACING_Y=0.07f</code>. */
private static final float STACK_SPACING_Y = 0.07f;
private int landStackMax = 5;
@@ -45,19 +50,25 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
private int stackSpacingX, stackSpacingY;
/**
* <p>Constructor for PlayArea.</p>
* <p>
* Constructor for PlayArea.
* </p>
*
* @param scrollPane a {@link javax.swing.JScrollPane} object.
* @param mirror a boolean.
* @param scrollPane
* a {@link javax.swing.JScrollPane} object.
* @param mirror
* a boolean.
*/
public PlayArea(JScrollPane scrollPane, boolean mirror) {
public PlayArea(final JScrollPane scrollPane, final boolean mirror) {
super(scrollPane);
setBackground(Color.white);
this.mirror = mirror;
}
/**
* <p>doLayout.</p>
* <p>
* doLayout.
* </p>
*
* @since 1.0.15
*/
@@ -68,7 +79,9 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
outerLoop:
//
for (CardPanel panel : cardPanels) {
if (!panel.gameCard.isLand() || panel.gameCard.isCreature()) continue;
if (!panel.gameCard.isLand() || panel.gameCard.isCreature()) {
continue;
}
int insertIndex = -1;
@@ -78,13 +91,16 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
CardPanel firstPanel = stack.get(0);
if (firstPanel.gameCard.getName().equals(panel.gameCard.getName())) {
if (!firstPanel.attachedPanels.isEmpty() || firstPanel.gameCard.isEnchanted()) {
// Put this land to the left of lands with the same name and attachments.
// Put this land to the left of lands with the same name
// and attachments.
insertIndex = i;
break;
}
if (!panel.attachedPanels.isEmpty() || !panel.gameCard.getCounters().equals(firstPanel.gameCard.getCounters())
if (!panel.attachedPanels.isEmpty()
|| !panel.gameCard.getCounters().equals(firstPanel.gameCard.getCounters())
|| firstPanel.gameCard.isEnchanted() || stack.size() == landStackMax) {
// If this land has attachments or the stack is full, put it to the right.
// If this land has attachments or the stack is full,
// put it to the right.
insertIndex = i + 1;
continue;
}
@@ -92,7 +108,9 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
stack.add(0, panel);
continue outerLoop;
}
if (insertIndex != -1) break;
if (insertIndex != -1) {
break;
}
}
Stack stack = new Stack();
@@ -105,7 +123,9 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
outerLoop:
//
for (CardPanel panel : cardPanels) {
if (!panel.gameCard.isToken()) continue;
if (!panel.gameCard.isToken()) {
continue;
}
int insertIndex = -1;
@@ -115,16 +135,19 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
CardPanel firstPanel = stack.get(0);
if (firstPanel.gameCard.getName().equals(panel.gameCard.getName())) {
if (!firstPanel.attachedPanels.isEmpty()) {
// Put this token to the left of tokens with the same name and attachments.
// Put this token to the left of tokens with the same
// name and attachments.
insertIndex = i;
break;
}
if (!panel.attachedPanels.isEmpty() || !panel.gameCard.getCounters().equals(firstPanel.gameCard.getCounters())
if (!panel.attachedPanels.isEmpty()
|| !panel.gameCard.getCounters().equals(firstPanel.gameCard.getCounters())
|| panel.gameCard.isSick() != firstPanel.gameCard.isSick()
|| panel.gameCard.getNetAttack() != firstPanel.gameCard.getNetAttack()
|| panel.gameCard.getNetDefense() != firstPanel.gameCard.getNetDefense()
|| stack.size() == tokenStackMax) {
// If this token has attachments or the stack is full, put it to the right.
// If this token has attachments or the stack is full,
// put it to the right.
insertIndex = i + 1;
continue;
}
@@ -132,7 +155,9 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
stack.add(0, panel);
continue outerLoop;
}
if (insertIndex != -1) break;
if (insertIndex != -1) {
break;
}
}
Stack stack = new Stack();
@@ -175,22 +200,30 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
}
// Store the current rows and others.
List<Row> storedRows = new ArrayList<Row>(rows.size());
for (Row row : rows)
for (Row row : rows) {
storedRows.add((Row) row.clone());
}
Row storedOthers = (Row) others.clone();
// Fill in all rows with others.
for (Row row : rows)
for (Row row : rows) {
fillRow(others, rows, row);
// Stop if everything fits, otherwise revert back to the stored values.
if (creatures.isEmpty() && tokens.isEmpty() && lands.isEmpty() && others.isEmpty()) break;
}
// Stop if everything fits, otherwise revert back to the stored
// values.
if (creatures.isEmpty() && tokens.isEmpty() && lands.isEmpty() && others.isEmpty()) {
break;
}
rows = storedRows;
others = storedOthers;
// Try to put others on their own row(s) and fill in the rest.
wrap(others, rows, afterFirstRow);
for (Row row : rows)
for (Row row : rows) {
fillRow(others, rows, row);
}
// If that still doesn't fit, scale down.
if (creatures.isEmpty() && tokens.isEmpty() && lands.isEmpty() && others.isEmpty()) break;
if (creatures.isEmpty() && tokens.isEmpty() && lands.isEmpty() && others.isEmpty()) {
break;
}
cardWidth--;
}
@@ -222,9 +255,10 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
// Align others to the right.
if (RowType.other.isType(stack.get(0).gameCard)) {
x = playAreaWidth - GUTTER_X + extraCardSpacingX;
for (int i = stackIndex, n = row.size(); i < n; i++)
for (int i = stackIndex, n = row.size(); i < n; i++) {
x -= row.get(i).getWidth();
}
}
for (int panelIndex = 0, panelCount = stack.size(); panelIndex < panelCount; panelIndex++) {
CardPanel panel = stack.get(panelIndex);
int stackPosition = panelCount - panelIndex - 1;
@@ -241,15 +275,21 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
}
/**
* <p>wrap.</p>
* <p>
* wrap.
* </p>
*
* @param sourceRow a {@link arcane.ui.PlayArea.Row} object.
* @param rows a {@link java.util.List} object.
* @param insertIndex a int.
* @param sourceRow
* a {@link arcane.ui.PlayArea.Row} object.
* @param rows
* a {@link java.util.List} object.
* @param insertIndex
* a int.
* @return a int.
*/
private int wrap(Row sourceRow, List<Row> rows, int insertIndex) {
// The cards are sure to fit (with vertical scrolling) at the minimum card width.
private int wrap(final Row sourceRow, final List<Row> rows, final int insertIndex) {
// The cards are sure to fit (with vertical scrolling) at the minimum
// card width.
boolean allowHeightOverflow = cardWidth == cardWidthMin;
Row currentRow = new Row();
@@ -259,8 +299,12 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
int rowWidth = currentRow.getWidth();
if (!currentRow.isEmpty() && rowWidth + stack.getWidth() > playAreaWidth) {
// Stop processing if the row is too wide or tall.
if (!allowHeightOverflow && rowWidth > playAreaWidth) break;
if (!allowHeightOverflow && getRowsHeight(rows) + sourceRow.getHeight() > playAreaHeight) break;
if (!allowHeightOverflow && rowWidth > playAreaWidth) {
break;
}
if (!allowHeightOverflow && getRowsHeight(rows) + sourceRow.getHeight() > playAreaHeight) {
break;
}
rows.add(insertIndex == -1 ? rows.size() : insertIndex, currentRow);
currentRow = new Row();
}
@@ -276,48 +320,64 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
}
}
// Remove the wrapped stacks from the source row.
for (Row row : rows)
for (Stack stack : row)
for (Row row : rows) {
for (Stack stack : row) {
sourceRow.remove(stack);
}
}
return insertIndex;
}
/**
* <p>fillRow.</p>
* <p>
* fillRow.
* </p>
*
* @param sourceRow a {@link arcane.ui.PlayArea.Row} object.
* @param rows a {@link java.util.List} object.
* @param rows a {@link java.util.List} object.
* @param row a {@link arcane.ui.PlayArea.Row} object.
* @param sourceRow
* a {@link arcane.ui.PlayArea.Row} object.
* @param rows
* a {@link java.util.List} object.
* @param rows
* a {@link java.util.List} object.
* @param row
* a {@link arcane.ui.PlayArea.Row} object.
*/
private void fillRow(Row sourceRow, List<Row> rows, Row row) {
private void fillRow(final Row sourceRow, final List<Row> rows, Row row) {
int rowWidth = row.getWidth();
while (!sourceRow.isEmpty()) {
Stack stack = sourceRow.get(0);
rowWidth += stack.getWidth();
if (rowWidth > playAreaWidth) break;
if (rowWidth > playAreaWidth) {
break;
}
if (stack.getHeight() > row.getHeight()) {
if (getRowsHeight(rows) - row.getHeight() + stack.getHeight() > playAreaHeight) break;
if (getRowsHeight(rows) - row.getHeight() + stack.getHeight() > playAreaHeight) {
break;
}
}
row.add(sourceRow.remove(0));
}
}
/**
* <p>getRowsHeight.</p>
* <p>
* getRowsHeight.
* </p>
*
* @param rows a {@link java.util.List} object.
* @param rows
* a {@link java.util.List} object.
* @return a int.
*/
private int getRowsHeight(List<Row> rows) {
int height = 0;
for (Row row : rows)
for (Row row : rows) {
height += row.getHeight();
}
return height - cardSpacingY + GUTTER_Y * 2;
}
/** {@inheritDoc} */
public CardPanel getCardPanel(int x, int y) {
public final CardPanel getCardPanel(final int x, final int y) {
for (Row row : rows) {
for (Stack stack : row) {
for (CardPanel panel : stack) {
@@ -334,7 +394,9 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
}
if (x > panelX && x < panelX + panelWidth) {
if (y > panelY && y < panelY + panelHeight) {
if (!panel.isDisplayEnabled()) return null;
if (!panel.isDisplayEnabled()) {
return null;
}
return panel;
}
}
@@ -345,51 +407,63 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
}
/** {@inheritDoc} */
public void mouseLeftClicked(CardPanel panel, MouseEvent evt) {
if (panel.tappedAngle != 0 && panel.tappedAngle != CardPanel.TAPPED_ANGLE) return;
public final void mouseLeftClicked(final CardPanel panel, final MouseEvent evt) {
if (panel.tappedAngle != 0 && panel.tappedAngle != CardPanel.TAPPED_ANGLE) {
return;
}
super.mouseLeftClicked(panel, evt);
}
/**
* <p>Getter for the field <code>landStackMax</code>.</p>
* <p>
* Getter for the field <code>landStackMax</code>.
* </p>
*
* @return a int.
*/
public int getLandStackMax() {
public final int getLandStackMax() {
return landStackMax;
}
/**
* <p>Setter for the field <code>landStackMax</code>.</p>
* <p>
* Setter for the field <code>landStackMax</code>.
* </p>
*
* @param landStackMax a int.
* @param landStackMax
* a int.
*/
public void setLandStackMax(int landStackMax) {
public final void setLandStackMax(int landStackMax) {
this.landStackMax = landStackMax;
}
/**
* <p>Getter for the field <code>stackVertical</code>.</p>
* <p>
* Getter for the field <code>stackVertical</code>.
* </p>
*
* @return a boolean.
*/
public boolean getStackVertical() {
public final boolean getStackVertical() {
return stackVertical;
}
/**
* <p>Setter for the field <code>stackVertical</code>.</p>
* <p>
* Setter for the field <code>stackVertical</code>.
* </p>
*
* @param stackVertical a boolean.
* @param stackVertical
* a boolean.
*/
public void setStackVertical(boolean stackVertical) {
public final void setStackVertical(boolean stackVertical) {
this.stackVertical = stackVertical;
}
static private enum RowType {
private static enum RowType {
land, creature, creatureNonToken, other;
public boolean isType(Card card) {
public boolean isType(final Card card) {
switch (this) {
case land:
return card.isLand();
@@ -412,39 +486,47 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
super(16);
}
public Row(List<CardPanel> cardPanels, RowType type) {
public Row(final List<CardPanel> cardPanels, final RowType type) {
this();
addAll(cardPanels, type);
}
private void addAll(List<CardPanel> cardPanels, RowType type) {
private void addAll(final List<CardPanel> cardPanels, final RowType type) {
for (CardPanel panel : cardPanels) {
if (!type.isType(panel.gameCard) || panel.attachedToPanel != null) continue;
if (!type.isType(panel.gameCard) || panel.attachedToPanel != null) {
continue;
}
Stack stack = new Stack();
stack.add(panel);
add(stack);
}
}
public boolean addAll(Collection<? extends Stack> c) {
public boolean addAll(final Collection<? extends Stack> c) {
boolean changed = super.addAll(c);
c.clear();
return changed;
}
private int getWidth() {
if (isEmpty()) return 0;
if (isEmpty()) {
return 0;
}
int width = 0;
for (Stack stack : this)
for (Stack stack : this) {
width += stack.getWidth();
}
return width + GUTTER_X * 2 - extraCardSpacingX;
}
private int getHeight() {
if (isEmpty()) return 0;
if (isEmpty()) {
return 0;
}
int height = 0;
for (Stack stack : this)
for (Stack stack : this) {
height = Math.max(height, stack.getHeight());
}
return height;
}
}
@@ -456,10 +538,11 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
super(8);
}
public boolean add(CardPanel panel) {
public boolean add(final CardPanel panel) {
boolean appended = super.add(panel);
for (CardPanel attachedPanel : panel.attachedPanels)
for (CardPanel attachedPanel : panel.attachedPanels) {
add(attachedPanel);
}
return appended;
}

View File

@@ -1,9 +1,13 @@
package arcane.ui;
import javax.swing.*;
import java.awt.*;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;
/**
* <p>ScaledImagePanel class.</p>
*
@@ -12,9 +16,15 @@ import java.awt.image.BufferedImage;
*/
public class ScaledImagePanel extends JPanel {
/** Constant <code>serialVersionUID=-5691107238620895385L</code> */
/** Constant <code>serialVersionUID=-5691107238620895385L</code>. */
private static final long serialVersionUID = -5691107238620895385L;
/**
*
*/
public volatile Image srcImage;
/**
*
*/
public volatile Image srcImageBlurred;
private ScalingType scalingType = ScalingType.bilinear;
@@ -37,7 +47,7 @@ public class ScaledImagePanel extends JPanel {
* @param srcImageBlurred a {@link java.awt.Image} object.
*
*/
public void setImage(Image srcImage, Image srcImageBlurred) {
public final void setImage(final Image srcImage, Image srcImageBlurred) {
this.srcImage = srcImage;
this.srcImageBlurred = srcImageBlurred;
}
@@ -45,7 +55,7 @@ public class ScaledImagePanel extends JPanel {
/**
* <p>clearImage.</p>
*/
public void clearImage() {
public final void clearImage() {
srcImage = null;
srcImageBlurred = null;
repaint();
@@ -56,7 +66,7 @@ public class ScaledImagePanel extends JPanel {
*
* @param multiPassType a {@link arcane.ui.ScaledImagePanel.MultipassType} object.
*/
public void setScalingMultiPassType(MultipassType multiPassType) {
public final void setScalingMultiPassType(final MultipassType multiPassType) {
this.multiPassType = multiPassType;
}
@@ -65,7 +75,7 @@ public class ScaledImagePanel extends JPanel {
*
* @param scalingType a {@link arcane.ui.ScaledImagePanel.ScalingType} object.
*/
public void setScalingType(ScalingType scalingType) {
public final void setScalingType(final ScalingType scalingType) {
this.scalingType = scalingType;
}
@@ -74,7 +84,7 @@ public class ScaledImagePanel extends JPanel {
*
* @param blur a boolean.
*/
public void setScalingBlur(boolean blur) {
public final void setScalingBlur(final boolean blur) {
this.blur = blur;
}
@@ -83,7 +93,7 @@ public class ScaledImagePanel extends JPanel {
*
* @param scaleLarger a boolean.
*/
public void setScaleLarger(boolean scaleLarger) {
public final void setScaleLarger(final boolean scaleLarger) {
this.scaleLarger = scaleLarger;
}
@@ -92,7 +102,7 @@ public class ScaledImagePanel extends JPanel {
*
* @return a boolean.
*/
public boolean hasImage() {
public final boolean hasImage() {
return srcImage != null;
}
@@ -113,9 +123,10 @@ public class ScaledImagePanel extends JPanel {
if (targetWidth > panelWidth) {
targetHeight = Math.round(panelWidth * (srcHeight / (float) srcWidth));
targetWidth = panelWidth;
} else
} else {
targetHeight = panelHeight;
}
}
ScalingInfo info = new ScalingInfo();
info.targetWidth = targetWidth;
info.targetHeight = targetHeight;
@@ -127,8 +138,10 @@ public class ScaledImagePanel extends JPanel {
}
/** {@inheritDoc} */
public void paint(Graphics g) {
if (srcImage == null) return;
public final void paint(final Graphics g) {
if (srcImage == null) {
return;
}
Graphics2D g2 = (Graphics2D) g.create();
ScalingInfo info = getScalingInfo();
@@ -149,6 +162,8 @@ public class ScaledImagePanel extends JPanel {
case replicate:
scaleWithGetScaledInstance(g2, info, Image.SCALE_REPLICATE);
break;
default:
break;
}
}
@@ -159,7 +174,7 @@ public class ScaledImagePanel extends JPanel {
* @param info a {@link arcane.ui.ScaledImagePanel.ScalingInfo} object.
* @param hints a int.
*/
private void scaleWithGetScaledInstance(Graphics2D g2, ScalingInfo info, int hints) {
private void scaleWithGetScaledInstance(final Graphics2D g2, final ScalingInfo info, final int hints) {
Image srcImage = getSourceImage(info);
Image scaledImage = srcImage.getScaledInstance(info.targetWidth, info.targetHeight, hints);
g2.drawImage(scaledImage, info.x, info.y, null);
@@ -172,17 +187,24 @@ public class ScaledImagePanel extends JPanel {
* @param info a {@link arcane.ui.ScaledImagePanel.ScalingInfo} object.
* @param hint a {@link java.lang.Object} object.
*/
private void scaleWithDrawImage(Graphics2D g2, ScalingInfo info, Object hint) {
private void scaleWithDrawImage(final Graphics2D g2, final ScalingInfo info, final Object hint) {
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, hint);
int tempDestWidth = info.srcWidth / 2, tempDestHeight = info.srcHeight / 2;
if (tempDestWidth < info.targetWidth) tempDestWidth = info.targetWidth;
if (tempDestHeight < info.targetHeight) tempDestHeight = info.targetHeight;
if (tempDestWidth < info.targetWidth) {
tempDestWidth = info.targetWidth;
}
if (tempDestHeight < info.targetHeight) {
tempDestHeight = info.targetHeight;
}
Image srcImage = getSourceImage(info);
// If not doing multipass or multipass only needs a single pass, just scale it once directly to the panel surface.
if (multiPassType == MultipassType.none || (tempDestWidth == info.targetWidth && tempDestHeight == info.targetHeight)) {
// If not doing multipass or multipass only needs a single pass,
// just scale it once directly to the panel surface.
if (multiPassType == MultipassType.none
|| (tempDestWidth == info.targetWidth && tempDestHeight == info.targetHeight))
{
g2.drawImage(srcImage, info.x, info.y, info.targetWidth, info.targetHeight, null);
return;
}
@@ -191,7 +213,8 @@ public class ScaledImagePanel extends JPanel {
Graphics2D g2temp = tempImage.createGraphics();
switch (multiPassType) {
case nearestNeighbor:
g2temp.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
g2temp.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
break;
case bilinear:
g2temp.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
@@ -199,6 +222,8 @@ public class ScaledImagePanel extends JPanel {
case bicubic:
g2temp.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
break;
default:
break;
}
// Render first pass from image to temp.
g2temp.drawImage(srcImage, 0, 0, tempDestWidth, tempDestHeight, null);
@@ -208,15 +233,21 @@ public class ScaledImagePanel extends JPanel {
while (true) {
if (tempDestWidth > info.targetWidth) {
tempDestWidth = tempDestWidth / 2;
if (tempDestWidth < info.targetWidth) tempDestWidth = info.targetWidth;
if (tempDestWidth < info.targetWidth) {
tempDestWidth = info.targetWidth;
}
}
if (tempDestHeight > info.targetHeight) {
tempDestHeight = tempDestHeight / 2;
if (tempDestHeight < info.targetHeight) tempDestHeight = info.targetHeight;
if (tempDestHeight < info.targetHeight) {
tempDestHeight = info.targetHeight;
}
}
if (tempDestWidth == info.targetWidth && tempDestHeight == info.targetHeight) break;
if (tempDestWidth == info.targetWidth && tempDestHeight == info.targetHeight) {
break;
}
g2temp.drawImage(tempImage, 0, 0, tempDestWidth, tempDestHeight, 0, 0, tempSrcWidth, tempSrcHeight, null);
@@ -226,7 +257,10 @@ public class ScaledImagePanel extends JPanel {
g2temp.dispose();
// Render last pass from temp to panel surface.
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, hint);
g2.drawImage(tempImage, info.x, info.y, info.x + info.targetWidth, info.y + info.targetHeight, 0, 0, tempSrcWidth,
g2.drawImage(tempImage, info.x,
info.y,
info.x + info.targetWidth,
info.y + info.targetHeight, 0, 0, tempSrcWidth,
tempSrcHeight, null);
}
@@ -236,13 +270,17 @@ public class ScaledImagePanel extends JPanel {
* @param info a {@link arcane.ui.ScaledImagePanel.ScalingInfo} object.
* @return a {@link java.awt.Image} object.
*/
private Image getSourceImage(ScalingInfo info) {
if (!blur || srcImageBlurred == null) return srcImage;
if (info.srcWidth / 2 < info.targetWidth || info.srcHeight / 2 < info.targetHeight) return srcImage;
private Image getSourceImage(final ScalingInfo info) {
if (!blur || srcImageBlurred == null) {
return srcImage;
}
if (info.srcWidth / 2 < info.targetWidth || info.srcHeight / 2 < info.targetHeight) {
return srcImage;
}
return srcImageBlurred;
}
static private class ScalingInfo {
private static class ScalingInfo {
public int targetWidth;
public int targetHeight;
public int srcWidth;
@@ -251,11 +289,55 @@ public class ScaledImagePanel extends JPanel {
public int y;
}
static public enum MultipassType {
none, nearestNeighbor, bilinear, bicubic
/**
*
* MultipassType.
*
*/
public static enum MultipassType {
/**
*
*/
none,
/**
*
*/
nearestNeighbor,
/**
*
*/
bilinear,
/**
*
*/
bicubic
}
static public enum ScalingType {
nearestNeighbor, replicate, bilinear, bicubic, areaAveraging
/**
*
* ScalingType.
*
*/
public static enum ScalingType {
/**
*
*/
nearestNeighbor,
/**
*
*/
replicate,
/**
*
*/
bilinear,
/**
*
*/
bicubic,
/**
*
*/
areaAveraging
}
}

View File

@@ -1,7 +1,8 @@
package arcane.ui;
import javax.swing.*;
import java.awt.*;
import java.awt.BorderLayout;
import javax.swing.JPanel;
/**
* <p>ViewPanel class.</p>
@@ -10,7 +11,7 @@ import java.awt.*;
* @version $Id$
*/
public class ViewPanel extends JPanel {
/** Constant <code>serialVersionUID=7016597023142963068L</code> */
/** Constant <code>serialVersionUID=7016597023142963068L</code>. */
private static final long serialVersionUID = 7016597023142963068L;
/**
@@ -18,8 +19,10 @@ public class ViewPanel extends JPanel {
*
* @since 1.0.15
*/
public void doLayout() {
if (getComponentCount() == 0) return;
public final void doLayout() {
if (getComponentCount() == 0) {
return;
}
CardPanel panel = (CardPanel) getComponent(0);
int viewWidth = getWidth();
int viewHeight = getHeight();
@@ -30,8 +33,9 @@ public class ViewPanel extends JPanel {
if (targetWidth > viewWidth) {
targetHeight = Math.round(viewWidth * (srcHeight / (float) srcWidth));
targetWidth = viewWidth;
} else
} else {
targetHeight = viewHeight;
}
int x = viewWidth / 2 - targetWidth / 2;
int y = viewHeight / 2 - targetHeight / 2;
panel.setCardBounds(x, y, targetWidth, targetHeight);
@@ -42,7 +46,7 @@ public class ViewPanel extends JPanel {
*
* @param panel a {@link arcane.ui.CardPanel} object.
*/
public void setCardPanel(CardPanel panel) {
public final void setCardPanel(final CardPanel panel) {
//CardPanel newPanel = new CardPanel(panel.gameCard);
//newPanel.setImage(panel);
removeAll();

View File

@@ -1,2 +1,2 @@
/** Forge Card Game */
/** Forge Card Game. */
package arcane.ui;

View File

@@ -17,6 +17,7 @@ import net.slightlymagic.braids.util.lambda.Lambda1;
*
* @author Forge
* @version $Id: CardPoolView.java 9708 2011-08-09 19:34:12Z jendave $
* @param <T> an InventoryItem
*/
public class ItemPoolView<T extends InventoryItem> implements Iterable<Entry<T, Integer>> {