1 package charactermanaj.graphics;
\r
3 import java.io.IOException;
\r
5 import charactermanaj.graphics.filters.ColorConvertParameter;
\r
6 import charactermanaj.graphics.io.ImageCache;
\r
7 import charactermanaj.graphics.io.ImageCachedLoader;
\r
8 import charactermanaj.graphics.io.ImageLoader;
\r
9 import charactermanaj.graphics.io.ImageResource;
\r
10 import charactermanaj.graphics.io.LoadedImage;
\r
12 public class ColorConvertedImageCachedLoader extends ColorConvertedImageLoaderImpl {
\r
14 private ImageCache<ColorConvertedImageKey> caches = new ImageCache<ColorConvertedImageKey>();
\r
16 public ColorConvertedImageCachedLoader() {
\r
17 this(new ImageCachedLoader());
\r
20 public ColorConvertedImageCachedLoader(ImageLoader imageLoader) {
\r
25 public LoadedImage load(ImageResource file,
\r
26 ColorConvertParameter colorConvParam) throws IOException {
\r
28 throw new IllegalArgumentException();
\r
31 ColorConvertParameter param;
\r
32 if (colorConvParam == null) {
\r
33 param = new ColorConvertParameter();
\r
35 param = colorConvParam.clone();
\r
37 ColorConvertedImageKey key = new ColorConvertedImageKey(param, file);
\r
39 synchronized (caches) {
\r
40 LoadedImage loadedImage = caches.get(key);
\r
41 if (loadedImage == null) {
\r
42 loadedImage = super.load(file, param);
\r
43 caches.set(key, loadedImage);
\r
49 public void unlockImages() {
\r
50 caches.unlockImages();
\r
55 final class ColorConvertedImageKey {
\r
57 private final ColorConvertParameter colorConvParameter;
\r
59 private final ImageResource imageResource;
\r
61 private final long lastModified;
\r
63 private final int hashCode;
\r
65 public ColorConvertedImageKey(ColorConvertParameter colorConvParameter, ImageResource imageResource) {
\r
66 if (colorConvParameter == null || imageResource == null) {
\r
67 throw new IllegalArgumentException();
\r
69 this.colorConvParameter = colorConvParameter;
\r
70 this.imageResource = imageResource;
\r
71 this.lastModified = imageResource.lastModified();
\r
72 this.hashCode = imageResource.hashCode()
\r
73 ^ colorConvParameter.hashCode() ^ (int) this.lastModified;
\r
77 public int hashCode() {
\r
78 return this.hashCode;
\r
82 public boolean equals(Object obj) {
\r
86 if (obj != null && obj instanceof ColorConvertedImageKey) {
\r
87 ColorConvertedImageKey other = (ColorConvertedImageKey) obj;
\r
88 return lastModified == other.lastModified
\r
89 && imageResource.equals(other.imageResource)
\r
90 && colorConvParameter.equals(other.colorConvParameter);
\r