X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altosuilib%2FAltosUIMapCache.java;h=b9064cf435860fc4b812c6e93c566845f8ed14bc;hp=e849da79893f757713e48f658333f01caa2dc719;hb=cb15cb8db5ef570b57f89d4e58734554542f99ff;hpb=db2443fdbf65b65703217174303027c439124a83 diff --git a/altosuilib/AltosUIMapCache.java b/altosuilib/AltosUIMapCache.java index e849da79..b9064cf4 100644 --- a/altosuilib/AltosUIMapCache.java +++ b/altosuilib/AltosUIMapCache.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_2; +package org.altusmetrum.altosuilib_3; import javax.swing.*; import javax.imageio.ImageIO; @@ -24,29 +24,31 @@ import java.awt.*; import java.io.*; import java.net.*; -public class AltosUIMapCache { +public class AltosUIMapCache implements AltosUIMapCacheListener { static final int success = 0; static final int loading = 1; static final int failed = 2; static final int bad_request = 3; static final int forbidden = 4; - static private Object fetch_lock = new Object(); + int min_cache_size; /* configured minimum cache size */ + int cache_size; /* current cache size */ + int requested_cache_size; /* cache size computed by application */ - static final int min_cache_size = 9; - static final int max_cache_size = 24; + private Object fetch_lock = new Object(); + private Object cache_lock = new Object(); - static int cache_size = min_cache_size; + AltosUIMapImage[] images = new AltosUIMapImage[cache_size]; - static AltosUIMapImage[] images = new AltosUIMapImage[cache_size]; + long used; - static Object cache_lock = new Object(); + public void set_cache_size(int new_size) { + + requested_cache_size = new_size; - public static void set_cache_size(int new_size) { if (new_size < min_cache_size) new_size = min_cache_size; - if (new_size > max_cache_size) - new_size = max_cache_size; + if (new_size == cache_size) return; @@ -64,9 +66,7 @@ public class AltosUIMapCache { } } - static long used; - - public static Image get(AltosUIMapTile tile, AltosUIMapStore store, int width, int height) { + public Image get(AltosUIMapTile tile, AltosUIMapStore store, int width, int height) { int oldest = -1; long age = used; @@ -109,4 +109,29 @@ public class AltosUIMapCache { } } } + + public void map_cache_changed(int map_cache) { + min_cache_size = map_cache; + + set_cache_size(requested_cache_size); + } + + public void dispose() { + AltosUIPreferences.unregister_map_cache_listener(this); + + for (int i = 0; i < cache_size; i++) { + AltosUIMapImage image = images[i]; + + if (image != null) + image.flush(); + } + } + + public AltosUIMapCache() { + min_cache_size = AltosUIPreferences.map_cache(); + + set_cache_size(0); + + AltosUIPreferences.register_map_cache_listener(this); + } }