OSDN Git Service

以下の修正
[charactermanaj/CharacterManaJ.git] / src / charactermanaj / graphics / ColorConvertedImageCachedLoader.java
1 package charactermanaj.graphics;\r
2 \r
3 import java.io.IOException;\r
4 \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
11 \r
12 public class ColorConvertedImageCachedLoader extends ColorConvertedImageLoaderImpl {\r
13 \r
14         private ImageCache<ColorConvertedImageKey> caches = new ImageCache<ColorConvertedImageKey>();\r
15         \r
16         public ColorConvertedImageCachedLoader() {\r
17                 this(new ImageCachedLoader());\r
18         }\r
19         \r
20         public ColorConvertedImageCachedLoader(ImageLoader imageLoader) {\r
21                 super(imageLoader);\r
22         }\r
23 \r
24         @Override\r
25         public LoadedImage load(ImageResource file,\r
26                         ColorConvertParameter colorConvParam) throws IOException {\r
27                 if (file == null) {\r
28                         throw new IllegalArgumentException();\r
29                 }\r
30 \r
31                 ColorConvertParameter param;\r
32                 if (colorConvParam == null) {\r
33                         param = new ColorConvertParameter();\r
34                 } else {\r
35                         param = colorConvParam.clone();\r
36                 }\r
37                 ColorConvertedImageKey key = new ColorConvertedImageKey(param, file);\r
38                 \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
44                         }\r
45                         return loadedImage;\r
46                 }\r
47         }\r
48         \r
49         public void unlockImages() {\r
50                 caches.unlockImages();\r
51         }\r
52         \r
53 }\r
54 \r
55 final class ColorConvertedImageKey {\r
56         \r
57         private final ColorConvertParameter colorConvParameter;\r
58         \r
59         private final ImageResource imageResource;\r
60         \r
61         private final long lastModified;\r
62         \r
63         private final int hashCode;\r
64         \r
65         public ColorConvertedImageKey(ColorConvertParameter colorConvParameter, ImageResource imageResource) {\r
66                 if (colorConvParameter == null || imageResource == null) {\r
67                         throw new IllegalArgumentException();\r
68                 }\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
74         }\r
75         \r
76         @Override\r
77         public int hashCode() {\r
78                 return this.hashCode;\r
79         }\r
80         \r
81         @Override\r
82         public boolean equals(Object obj) {\r
83                 if (obj == this) {\r
84                         return true;\r
85                 }\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
91                 }\r
92                 return false;\r
93         }\r
94 }\r