X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altoslib%2FAltosMap.java;h=8a3266c9908bccfa930fd3f65f003f2cc9ce071b;hb=d6445b3739ac2c5dd040efdb97317a6b2a48044a;hp=adf52ab9469d0be1405a4295a201b92fe7dca718;hpb=e0c318cdd32b3c3fed5099c754aea3ebc6186a0f;p=fw%2Faltos diff --git a/altoslib/AltosMap.java b/altoslib/AltosMap.java index adf52ab9..8a3266c9 100644 --- a/altoslib/AltosMap.java +++ b/altoslib/AltosMap.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_7; +package org.altusmetrum.altoslib_8; import java.io.*; import java.lang.*; @@ -113,12 +113,12 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener { map_interface.debug(format, arguments); } - public AltosPointInt floor(AltosPointDouble point) { + static public AltosPointInt floor(AltosPointDouble point) { return new AltosPointInt ((int) Math.floor(point.x / AltosMap.px_size) * AltosMap.px_size, (int) Math.floor(point.y / AltosMap.px_size) * AltosMap.px_size); } - public AltosPointInt ceil(AltosPointDouble point) { + static public AltosPointInt ceil(AltosPointDouble point) { return new AltosPointInt ((int) Math.ceil(point.x / AltosMap.px_size) * AltosMap.px_size, (int) Math.ceil(point.y / AltosMap.px_size) * AltosMap.px_size); } @@ -131,6 +131,10 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener { return (System.currentTimeMillis() - user_input_time) < auto_scroll_delay; } + public boolean has_centre() { + return centre != null; + } + public boolean far_from_centre(AltosLatLon lat_lon) { if (centre == null || transform == null) @@ -353,6 +357,9 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener { if (centre != null) make_tiles(); + if (transform == null) + return; + for (AltosMapTile tile : tiles.values()) tile.paint(transform); @@ -391,6 +398,10 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener { AltosPointInt drag_start; + boolean dragged; + + static final double drag_far = 20; + private void drag(int x, int y) { if (drag_start == null) return; @@ -398,6 +409,11 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener { int dx = x - drag_start.x; int dy = y - drag_start.y; + double distance = Math.hypot(dx, dy); + + if (distance > drag_far) + dragged = true; + if (transform == null) { debug("Transform not set in drag\n"); return; @@ -410,6 +426,17 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener { private void drag_start(int x, int y) { drag_start = new AltosPointInt(x, y); + dragged = false; + } + + private void drag_stop(int x, int y) { + if (!dragged) { + if (transform == null) { + debug("Transform not set in stop\n"); + return; + } + map_interface.select_object (transform.screen_lat_lon(new AltosPointInt(x,y))); + } } private void line_start(int x, int y) { @@ -442,6 +469,12 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener { line(x, y); } + public void touch_stop(int x, int y, boolean is_drag) { + notice_user_input(); + if (is_drag) + drag_stop(x, y); + } + public AltosMap(AltosMapInterface map_interface) { this.map_interface = map_interface; cache = new AltosMapCache(map_interface);