mirror of
https://github.com/correl/mage.git
synced 2024-12-24 11:50:45 +00:00
[UI] card image zoom in/out on mouse wheel with 700 ms timeout
This commit is contained in:
parent
6d24c7001b
commit
7443e2a9fa
4 changed files with 55 additions and 5 deletions
|
@ -24,9 +24,14 @@ import org.jdesktop.swingx.JXPanel;
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
|
import java.awt.event.MouseWheelEvent;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
|
import java.util.concurrent.ScheduledFuture;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
public class MageActionCallback implements ActionCallback {
|
public class MageActionCallback implements ActionCallback {
|
||||||
|
|
||||||
|
@ -41,6 +46,9 @@ public class MageActionCallback implements ActionCallback {
|
||||||
private volatile boolean state = false;
|
private volatile boolean state = false;
|
||||||
private boolean enlarged = false;
|
private boolean enlarged = false;
|
||||||
|
|
||||||
|
private static final ScheduledExecutorService timeoutExecutor = Executors.newScheduledThreadPool(1);
|
||||||
|
private ScheduledFuture<?> hideTimeout;
|
||||||
|
|
||||||
public MageActionCallback() {
|
public MageActionCallback() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,6 +78,7 @@ public class MageActionCallback implements ActionCallback {
|
||||||
@Override
|
@Override
|
||||||
public void mouseEntered(MouseEvent e, final TransferData data) {
|
public void mouseEntered(MouseEvent e, final TransferData data) {
|
||||||
hidePopup();
|
hidePopup();
|
||||||
|
cancelTimeout();
|
||||||
this.popupCard = data.card;
|
this.popupCard = data.card;
|
||||||
this.popupData = data;
|
this.popupData = data;
|
||||||
|
|
||||||
|
@ -270,6 +279,7 @@ public class MageActionCallback implements ActionCallback {
|
||||||
@Override
|
@Override
|
||||||
public void mouseExited(MouseEvent e, final TransferData data) {
|
public void mouseExited(MouseEvent e, final TransferData data) {
|
||||||
hidePopup();
|
hidePopup();
|
||||||
|
startHideTimeout();
|
||||||
this.state = false;
|
this.state = false;
|
||||||
//ArrowBuilder.removeAllArrows();
|
//ArrowBuilder.removeAllArrows();
|
||||||
ArrowBuilder.removeArrowsByType(ArrowBuilder.Type.TARGET);
|
ArrowBuilder.removeArrowsByType(ArrowBuilder.Type.TARGET);
|
||||||
|
@ -306,6 +316,15 @@ public class MageActionCallback implements ActionCallback {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void mouseWheelMoved(MouseWheelEvent e, TransferData data) {
|
||||||
|
int notches = e.getWheelRotation();
|
||||||
|
if (notches < 0) {
|
||||||
|
enlargeCard();
|
||||||
|
} else {
|
||||||
|
hideCard();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void displayCard(final CardView card, final TransferData data) {
|
private void displayCard(final CardView card, final TransferData data) {
|
||||||
if (!enlarged) {
|
if (!enlarged) {
|
||||||
return;
|
return;
|
||||||
|
@ -374,4 +393,20 @@ public class MageActionCallback implements ActionCallback {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private synchronized void startHideTimeout() {
|
||||||
|
cancelTimeout();
|
||||||
|
hideTimeout = timeoutExecutor.schedule(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
hideCard();
|
||||||
|
}
|
||||||
|
}, 700, TimeUnit.MILLISECONDS);
|
||||||
|
}
|
||||||
|
|
||||||
|
private synchronized void cancelTimeout() {
|
||||||
|
if (hideTimeout != null) {
|
||||||
|
hideTimeout.cancel(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,10 +28,10 @@ import java.util.UUID;
|
||||||
/**
|
/**
|
||||||
* Main class for drawing Mage card object.
|
* Main class for drawing Mage card object.
|
||||||
*
|
*
|
||||||
* @author arcane, nantuko
|
* @author arcane, nantuko, noxx
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings({"unchecked", "rawtypes"})
|
@SuppressWarnings({"unchecked", "rawtypes"})
|
||||||
public class CardPanel extends MagePermanent implements MouseListener, MouseMotionListener {
|
public class CardPanel extends MagePermanent implements MouseListener, MouseMotionListener, MouseWheelListener {
|
||||||
private static final long serialVersionUID = -3272134219262184410L;
|
private static final long serialVersionUID = -3272134219262184410L;
|
||||||
|
|
||||||
private static final Logger log = Logger.getLogger(CardPanel.class);
|
private static final Logger log = Logger.getLogger(CardPanel.class);
|
||||||
|
@ -146,6 +146,7 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti
|
||||||
|
|
||||||
addMouseListener(this);
|
addMouseListener(this);
|
||||||
addMouseMotionListener(this);
|
addMouseMotionListener(this);
|
||||||
|
addMouseWheelListener(this);
|
||||||
|
|
||||||
titleText = new GlowText();
|
titleText = new GlowText();
|
||||||
setText(gameCard);
|
setText(gameCard);
|
||||||
|
@ -891,4 +892,11 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti
|
||||||
updateImage();
|
updateImage();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mouseWheelMoved(MouseWheelEvent e) {
|
||||||
|
if (gameCard.isFaceDown()) return;
|
||||||
|
data.component = this;
|
||||||
|
callback.mouseWheelMoved(e, data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,15 @@
|
||||||
package mage.cards.action;
|
package mage.cards.action;
|
||||||
|
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
|
import java.awt.event.MouseWheelEvent;
|
||||||
|
|
||||||
public interface ActionCallback {
|
public interface ActionCallback {
|
||||||
void mouseClicked(MouseEvent e, TransferData data);
|
void mouseClicked(MouseEvent e, TransferData data);
|
||||||
void mousePressed(MouseEvent e, TransferData data);
|
void mousePressed(MouseEvent e, TransferData data);
|
||||||
void mouseMoved(MouseEvent e, TransferData data);
|
void mouseMoved(MouseEvent e, TransferData data);
|
||||||
void mouseEntered(MouseEvent e, TransferData data);
|
void mouseEntered(MouseEvent e, TransferData data);
|
||||||
void mouseExited(MouseEvent e, TransferData dat);
|
void mouseExited(MouseEvent e, TransferData data);
|
||||||
|
void mouseWheelMoved(MouseWheelEvent e, TransferData data);
|
||||||
void hidePopup();
|
void hidePopup();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
package mage.cards.action.impl;
|
package mage.cards.action.impl;
|
||||||
|
|
||||||
import java.awt.event.MouseEvent;
|
|
||||||
|
|
||||||
import mage.cards.action.ActionCallback;
|
import mage.cards.action.ActionCallback;
|
||||||
import mage.cards.action.TransferData;
|
import mage.cards.action.TransferData;
|
||||||
|
|
||||||
|
import java.awt.event.MouseEvent;
|
||||||
|
import java.awt.event.MouseWheelEvent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Callback that does nothing on any action
|
* Callback that does nothing on any action
|
||||||
*
|
*
|
||||||
|
@ -24,6 +25,10 @@ public class EmptyCallback implements ActionCallback {
|
||||||
public void mouseExited(MouseEvent e, TransferData data) {
|
public void mouseExited(MouseEvent e, TransferData data) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mouseWheelMoved(MouseWheelEvent e, TransferData data) {
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void hidePopup() {
|
public void hidePopup() {
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue