1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 package org.dishevelled.color.scheme.factory;
25
26 import java.awt.Color;
27
28 import java.util.concurrent.Callable;
29 import java.util.concurrent.ExecutionException;
30
31 import com.google.common.cache.Cache;
32 import com.google.common.cache.CacheBuilder;
33
34 import org.dishevelled.color.scheme.ColorFactory;
35
36
37
38
39
40
41 public final class CachingColorFactory
42 implements ColorFactory
43 {
44
45 private final Cache<Integer, Color> colors = CacheBuilder.newBuilder()
46 .maximumSize(100000L)
47 .build();
48
49 @Override
50 public Color createColor(final int red, final int green, final int blue, final float alpha)
51 {
52 final int a = Math.min(255, Math.round(alpha * 255));
53 final int key = (a & 0xFF) << 24 | (red & 0xFF) << 16 | (green & 0xFF) << 8 | (blue & 0xFF) << 0;
54
55 try
56 {
57 return colors.get(key, new Callable<Color>()
58 {
59 @Override
60 public Color call()
61 {
62 return new Color(red, green, blue, a);
63 }
64 });
65 }
66 catch (ExecutionException e)
67 {
68
69 return Color.WHITE;
70 }
71 }
72 }