altosuilib: Serialize access to async tile notify function in preload
[fw/altos] / altosuilib / AltosUIMapView.java
index efae376786f5652951fd600623fbdd3510bfe94a..a14fde6583e42cb64b938a49168dce22c751897f 100644 (file)
@@ -34,6 +34,8 @@ public class AltosUIMapView extends Component implements MouseMotionListener, Mo
 
        AltosUIMapLine  line = new AltosUIMapLine();
 
+       AltosUIMapCache cache = new AltosUIMapCache();
+
        LinkedList<AltosUIMapMark> marks = new LinkedList<AltosUIMapMark>();
 
        LinkedList<AltosUIMapZoomListener> zoom_listeners = new LinkedList<AltosUIMapZoomListener>();
@@ -368,7 +370,7 @@ public class AltosUIMapView extends Component implements MouseMotionListener, Mo
                for (Point point : to_remove)
                        tiles.remove(point);
 
-               AltosUIMapCache.set_cache_size(((lower_right.y - upper_left.y) / px_size + 1) * ((lower_right.x - upper_left.x) / px_size + 1));
+               cache.set_cache_size(((lower_right.y - upper_left.y) / px_size + 1) * ((lower_right.x - upper_left.x) / px_size + 1));
                for (int y = upper_left.y; y <= lower_right.y; y += px_size) {
                        for (int x = upper_left.x; x <= lower_right.x; x += px_size) {
                                Point point = new Point(x, y);
@@ -385,7 +387,7 @@ public class AltosUIMapView extends Component implements MouseMotionListener, Mo
        }
 
        /* AltosUIMapTileListener methods */
-       public void notify_tile(AltosUIMapTile tile, int status) {
+       public synchronized void notify_tile(AltosUIMapTile tile, int status) {
                for (Point point : tiles.keySet()) {
                        if (tile == tiles.get(point)) {
                                Point   screen = transform.screen(point);
@@ -394,8 +396,10 @@ public class AltosUIMapView extends Component implements MouseMotionListener, Mo
                }
        }
 
+       public AltosUIMapCache cache() { return cache; }
+
        /* AltosUIMapStoreListener methods */
-       public void notify_store(AltosUIMapStore store, int status) {
+       public synchronized void notify_store(AltosUIMapStore store, int status) {
                if (load_listener != null) {
                        for (AltosUIMapTile tile : tiles.values())
                                if (store.equals(tile.store))