From 436789c12e272fd3162983b91144e2dc000ce9db Mon Sep 17 00:00:00 2001 From: "jason@long.name" Date: Sat, 7 Sep 2013 15:18:38 +0000 Subject: [PATCH] gui: scroll with middle-button Hold-down middle button and drag to scroll map without using scroll bars. Contributed by askywhale (email, 2013-09-01) git-svn-id: https://micropolis.googlecode.com/svn/trunk/micropolis-java@850 d9718cc8-9f43-0410-858b-315f434eb58c --- .../gui/MicropolisDrawingArea.java | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/src/micropolisj/gui/MicropolisDrawingArea.java b/src/micropolisj/gui/MicropolisDrawingArea.java index b8c0a26..9e4e464 100644 --- a/src/micropolisj/gui/MicropolisDrawingArea.java +++ b/src/micropolisj/gui/MicropolisDrawingArea.java @@ -40,6 +40,8 @@ public class MicropolisDrawingArea extends JComponent TileImages tileImages; int TILE_WIDTH; int TILE_HEIGHT; + int dragX, dragY; + boolean dragging; public MicropolisDrawingArea(Micropolis engine) { @@ -56,6 +58,46 @@ public class MicropolisDrawingArea extends JComponent } public void ancestorMoved(AncestorEvent evt) {} }); + + addMouseListener(new MouseListener() { + + @Override + public void mousePressed(MouseEvent e) { + if(e.getButton()==MouseEvent.BUTTON2) + startDrag(e.getX(), e.getY()); + } + + @Override + public void mouseReleased(MouseEvent e) { + if(e.getButton()==MouseEvent.BUTTON2) + endDrag(e.getX(), e.getY()); + } + + @Override + public void mouseEntered(MouseEvent e) { + } + + @Override + public void mouseExited(MouseEvent e) { + } + + @Override + public void mouseClicked(MouseEvent e) { + } + }); + + addMouseMotionListener(new MouseMotionListener() { + + @Override + public void mouseMoved(MouseEvent e) { + } + + @Override + public void mouseDragged(MouseEvent e) { + if(dragging) + continueDrag(e.getX(), e.getY()); + } + }); } public void selectTileSize(int newTileSize) @@ -350,6 +392,27 @@ public class MicropolisDrawingArea extends JComponent repaint(); } + protected void startDrag(int x, int y) + { + dragging = true; + dragX = x; + dragY = y; + } + protected void endDrag(int x, int y) + { + dragging = false; + } + protected void continueDrag(int x, int y) + { + int dx = x - dragX; + int dy = y - dragY; + JScrollPane js = (JScrollPane)getParent().getParent(); + js.getHorizontalScrollBar().setValue( + js.getHorizontalScrollBar().getValue()-dx); + js.getVerticalScrollBar().setValue( + js.getVerticalScrollBar().getValue()-dy); + } + void doBlink() { if (!unpoweredZones.isEmpty())