Improved delayed viewers.

Made photo gadget a delayed viewer for zoom effect.
master
ubeefx 2010-12-21 22:52:50 +00:00
parent 3ac77a234e
commit 97c0940eae
4 changed files with 61 additions and 17 deletions

View File

@ -0,0 +1,8 @@
package magic.ui;
public interface DelayedViewer {
public void showDelayed();
public void hideDelayed();
}

View File

@ -1,6 +1,5 @@
package magic.ui;
import java.awt.Component;
import java.util.HashMap;
import java.util.Map;
@ -8,24 +7,24 @@ public class DelayedViewersThread extends Thread {
private static final DelayedViewersThread VIEWER_THREAD=new DelayedViewersThread();
private final Map<Component,Long> delayedViewers;
private final Map<DelayedViewer,Long> delayedViewers;
private DelayedViewersThread() {
delayedViewers=new HashMap<Component,Long>();
delayedViewers=new HashMap<DelayedViewer,Long>();
start();
}
public synchronized void showViewer(final Component component,final int delay) {
public synchronized void showViewer(final DelayedViewer delayedViewer,final int delay) {
delayedViewers.put(component,System.currentTimeMillis()+delay);
delayedViewers.put(delayedViewer,System.currentTimeMillis()+delay);
notify();
}
public synchronized void hideViewer(final Component component) {
public synchronized void hideViewer(final DelayedViewer delayedViewer) {
delayedViewers.remove(component);
component.setVisible(false);
delayedViewers.remove(delayedViewer);
delayedViewer.hideDelayed();
}
@Override
@ -38,12 +37,12 @@ public class DelayedViewersThread extends Thread {
wait();
}
final long time=System.currentTimeMillis();
for (final Component component : delayedViewers.keySet()) {
for (final DelayedViewer delayedViewer : delayedViewers.keySet()) {
final long delayedTime=delayedViewers.get(component);
final long delayedTime=delayedViewers.get(delayedViewer);
if (delayedTime<=time) {
component.setVisible(true);
delayedViewers.remove(component);
delayedViewer.showDelayed();
delayedViewers.remove(delayedViewer);
}
}
wait(100);

View File

@ -8,10 +8,11 @@ import javax.swing.JPanel;
import magic.data.CardImages;
import magic.model.MagicCardDefinition;
import magic.ui.DelayedViewer;
import magic.ui.widget.FontsAndBorders;
import magic.ui.widget.TitleBar;
public class CardViewer extends JPanel {
public class CardViewer extends JPanel implements DelayedViewer {
private static final long serialVersionUID = 1L;
@ -45,4 +46,16 @@ public class CardViewer extends JPanel {
repaint();
}
}
@Override
public void showDelayed() {
setVisible(true);
}
@Override
public void hideDelayed() {
setVisible(false);
}
}

View File

@ -17,14 +17,17 @@ import javax.swing.JPanel;
import magic.MagicMain;
import magic.model.MagicRandom;
import magic.ui.DelayedViewer;
import magic.ui.DelayedViewersThread;
/**
* Landscape image viewer.
*/
public class ImageViewer extends JPanel {
public class ImageViewer extends JPanel implements DelayedViewer {
private static final long serialVersionUID = 1L;
private static final int DELAY=500;
private static final int VIEWER_WIDTH=300;
private static final int ZOOM_FACTOR=4;
@ -33,6 +36,7 @@ public class ImageViewer extends JPanel {
private final BufferedImage image;
private Image scaledImage=null;
private boolean showScaled=false;
private boolean scaled=false;
private int imageWidth;
private int imageHeight;
@ -91,18 +95,23 @@ public class ImageViewer extends JPanel {
final MouseAdapter mouseListener=new MouseAdapter() {
@Override
public void mouseEntered(final MouseEvent e) {
DelayedViewersThread.getInstance().showViewer(ImageViewer.this,DELAY);
}
@Override
public void mouseExited(final MouseEvent e) {
scaled=false;
repaint();
DelayedViewersThread.getInstance().hideViewer(ImageViewer.this);
}
@Override
public void mouseMoved(final MouseEvent e) {
final int y=e.getY();
if (y<=viewerHeight) {
if (y<=viewerHeight&&showScaled) {
final int x=e.getX();
int px=(x*imageWidth)/getWidth();
int py=(y*imageHeight)/viewerHeight;
@ -133,6 +142,21 @@ public class ImageViewer extends JPanel {
}
}
@Override
public void showDelayed() {
showScaled=true;
repaint();
}
@Override
public void hideDelayed() {
showScaled=false;
scaled=false;
repaint();
}
@Override
public void paint(final Graphics g) {