diff options
Diffstat (limited to 'ao-tools')
| -rw-r--r-- | ao-tools/altosui/AltosSiteMap.java | 53 | ||||
| -rw-r--r-- | ao-tools/altosui/AltosSiteMapTile.java | 21 | ||||
| -rw-r--r-- | ao-tools/altosui/GrabNDrag.java | 35 | 
3 files changed, 55 insertions, 54 deletions
diff --git a/ao-tools/altosui/AltosSiteMap.java b/ao-tools/altosui/AltosSiteMap.java index 802eb68c..2477e4f8 100644 --- a/ao-tools/altosui/AltosSiteMap.java +++ b/ao-tools/altosui/AltosSiteMap.java @@ -273,6 +273,8 @@ public class AltosSiteMap extends JScrollPane implements AltosFlightDisplay {  			finishTileLater(tile, offset);  		} +		scrollRocketToVisible(pt); +  		if (offset != tileOffset(last_pt)) {  			ensureTilesAround(offset);  		} @@ -281,8 +283,8 @@ public class AltosSiteMap extends JScrollPane implements AltosFlightDisplay {  		last_state = state.state;  	} -	private AltosSiteMapTile createTile(final Point offset) { -		final AltosSiteMapTile tile = new AltosSiteMapTile(px_size); +	private AltosSiteMapTile createTile(Point offset) { +		AltosSiteMapTile tile = new AltosSiteMapTile(px_size);  		mapTiles.put(offset, tile);  		return tile;  	} @@ -292,7 +294,6 @@ public class AltosSiteMap extends JScrollPane implements AltosFlightDisplay {  		SwingUtilities.invokeLater( new Runnable() {  			public void run() {  				addTileAt(tile, offset); -				tile.setScrollable();  			}  		} );  	} @@ -310,6 +311,18 @@ public class AltosSiteMap extends JScrollPane implements AltosFlightDisplay {  		}  	} +	private Point topleft = new Point(0,0); +	private void scrollRocketToVisible(Point2D.Double pt) { +		Rectangle r = comp.getVisibleRect(); +		Point2D.Double copt = translatePoint(pt, tileCoordOffset(topleft)); +		int dx = (int)copt.x - r.width/2 - r.x; +		int dy = (int)copt.y - r.height/2 - r.y; +		if (Math.abs(dx) > r.width/3 || Math.abs(dy) > r.height/3) { +			r.x += dx; +			r.y += dy; +			comp.scrollRectToVisible(r); +		} +	}  	private void addTileAt(AltosSiteMapTile tile, Point offset) {  		if (Math.abs(offset.x) >= MAX_TILE_DELTA || @@ -320,6 +333,18 @@ public class AltosSiteMap extends JScrollPane implements AltosFlightDisplay {  			return;  		} +		boolean review = false; +		Rectangle r = comp.getVisibleRect(); +		if (offset.x < topleft.x) { +			r.x += (topleft.x - offset.x) * px_size; +			topleft.x = offset.x; +			review = true; +		} +		if (offset.y < topleft.y) { +			r.y += (topleft.y - offset.y) * px_size; +			topleft.y = offset.y; +			review = true; +		}  		GridBagConstraints c = new GridBagConstraints();  		c.anchor = GridBagConstraints.CENTER;  		c.fill = GridBagConstraints.BOTH; @@ -329,7 +354,11 @@ public class AltosSiteMap extends JScrollPane implements AltosFlightDisplay {  		c.gridx = offset.x + MAX_TILE_DELTA;  		c.gridy = offset.y + MAX_TILE_DELTA;  		layout.setConstraints(tile, c); +  		comp.add(tile); +		if (review) { +			comp.scrollRectToVisible(r); +		}  	}  	private AltosSiteMap(boolean knowWhatYouAreDoing) { @@ -338,29 +367,19 @@ public class AltosSiteMap extends JScrollPane implements AltosFlightDisplay {  		}  	} -	JComponent comp; -	private GridBagLayout layout; +	JComponent comp = new JComponent() { }; +	private GridBagLayout layout = new GridBagLayout();  	public AltosSiteMap() { -		comp = new JComponent() { -			GrabNDrag scroller = new GrabNDrag(this); -			{ -				addMouseMotionListener(scroller); -				addMouseListener(scroller); -				setAutoscrolls(true); -			} -		}; +		GrabNDrag scroller = new GrabNDrag(comp); -		layout = new GridBagLayout();  		comp.setLayout(layout);  		for (int x = -1; x <= 1; x++) {  			for (int y = -1; y <= 1; y++) {  				Point offset = new Point(x, y); -				AltosSiteMapTile t = new AltosSiteMapTile(px_size); -				mapTiles.put(offset, t); +				AltosSiteMapTile t = createTile(offset);  				addTileAt(t, offset); -				t.setScrollable();  			}  		}  		setViewportView(comp); diff --git a/ao-tools/altosui/AltosSiteMapTile.java b/ao-tools/altosui/AltosSiteMapTile.java index e0942986..8301f42b 100644 --- a/ao-tools/altosui/AltosSiteMapTile.java +++ b/ao-tools/altosui/AltosSiteMapTile.java @@ -54,13 +54,6 @@ public class AltosSiteMapTile extends JLayeredPane {  	private boolean drawn_landed_circle = false;  	private boolean drawn_boost_circle = false; -	private boolean scrollable = false; -	public synchronized void setScrollable() { -		scrollable = true; -	} -	public synchronized boolean isScrollable() { -		return scrollable; -	}  	public synchronized void show(AltosState state, int crc_errors,  				      Point2D.Double last_pt, Point2D.Double pt)  	{ @@ -69,20 +62,6 @@ public class AltosSiteMapTile extends JLayeredPane {  		}  		g2d.draw(new Line2D.Double(last_pt, pt)); -		int px_size = getWidth(); -		if (isScrollable() && 0 <= pt.x && pt.x < px_size) { -			if (0 <= pt.y && pt.y < px_size) { -				int dx = 500, dy = 250; -				if (state.state > 2) { -					dx = Math.min(200, 20 + (int) Math.abs(last_pt.x - pt.x)); -					dy = Math.min(100, 10 + (int) Math.abs(last_pt.y - pt.y)); -				} -				Rectangle r = new Rectangle((int)pt.x-dx, (int)pt.y-dy, -							    dx*2, dy*2); -				scrollRectToVisible(r); -			} -		} -  		if (state.state == 3 && !drawn_boost_circle) {  			drawn_boost_circle = true;  			g2d.setColor(Color.RED); diff --git a/ao-tools/altosui/GrabNDrag.java b/ao-tools/altosui/GrabNDrag.java index b44f3fe2..e6b87b58 100644 --- a/ao-tools/altosui/GrabNDrag.java +++ b/ao-tools/altosui/GrabNDrag.java @@ -29,23 +29,26 @@ import java.util.*;  import java.text.*;  class GrabNDrag extends MouseInputAdapter { -    private JComponent scroll; -    private Point startPt = new Point(); +	private JComponent scroll; +	private Point startPt = new Point(); -    public GrabNDrag(JComponent parent) { -        scroll = parent; -    } +	public GrabNDrag(JComponent scroll) { +		this.scroll = scroll; +		scroll.addMouseMotionListener(this); +		scroll.addMouseListener(this); +		scroll.setAutoscrolls(true); +	} -    public void mousePressed(MouseEvent e) { -        startPt.setLocation(e.getPoint()); -    } -    public void mouseDragged(MouseEvent e) { -        int xd = e.getX() - startPt.x; -        int yd = e.getY() - startPt.y; +	public void mousePressed(MouseEvent e) { +		startPt.setLocation(e.getPoint()); +	} +	public void mouseDragged(MouseEvent e) { +		int xd = e.getX() - startPt.x; +		int yd = e.getY() - startPt.y; -        Rectangle r = scroll.getVisibleRect(); -        r.x -= xd; -        r.y -= yd; -        scroll.scrollRectToVisible(r); -    } +		Rectangle r = scroll.getVisibleRect(); +		r.x -= xd; +		r.y -= yd; +		scroll.scrollRectToVisible(r); +	}  }  | 
