60b53110410e2d555235d21913da610e590fe78c
[Mograsim.git] / net.mograsim.preferences / src / net / mograsim / preferences / SimpleColorManager.java
1 package net.mograsim.preferences;
2
3 import java.util.HashMap;
4 import java.util.Map;
5 import java.util.Map.Entry;
6
7 import org.eclipse.swt.SWT;
8 import org.eclipse.swt.graphics.Color;
9 import org.eclipse.swt.graphics.Device;
10 import org.eclipse.swt.widgets.Display;
11
12 import net.mograsim.preferences.ColorDefinition.BuiltInColor;
13
14 public class SimpleColorManager extends ColorManager
15 {
16         private static final Map<ColorDefinition, Color> systemColors = new HashMap<>();
17
18         private final Device device;
19         private final Map<ColorDefinition, Color> cachedColors;
20
21         public SimpleColorManager()
22         {
23                 this.device = Display.getCurrent();
24                 this.cachedColors = new HashMap<>(systemColors);
25         }
26
27         @Override
28         public Color toColor(ColorDefinition col)
29         {
30                 if (col == null)
31                         return null;
32                 Color cachedColor = cachedColors.get(col);
33                 if (cachedColor != null)
34                         return cachedColor;
35                 if (col.builtInColor != null)
36                 {
37                         Color systemColor = device.getSystemColor(toSWTColorConstant(col.builtInColor));
38                         systemColors.put(col, systemColor);
39                         cachedColors.put(col, systemColor);
40                         return systemColor;
41                 }
42                 Color nonSystemColor = new Color(device, col.r, col.g, col.b);
43                 cachedColors.put(col, nonSystemColor);
44                 return nonSystemColor;
45         }
46
47         @Override
48         public void clearCache()
49         {
50                 cachedColors.entrySet().stream().filter(e -> !systemColors.containsKey(e.getKey())).map(Entry::getValue).forEach(Color::dispose);
51                 cachedColors.clear();
52                 cachedColors.putAll(systemColors);
53         }
54
55         public static int toSWTColorConstant(BuiltInColor col)
56         {
57                 switch (col)
58                 {
59                 case COLOR_BLACK:
60                         return SWT.COLOR_BLACK;
61                 case COLOR_BLUE:
62                         return SWT.COLOR_BLUE;
63                 case COLOR_CYAN:
64                         return SWT.COLOR_CYAN;
65                 case COLOR_DARK_BLUE:
66                         return SWT.COLOR_DARK_BLUE;
67                 case COLOR_DARK_CYAN:
68                         return SWT.COLOR_DARK_CYAN;
69                 case COLOR_DARK_GRAY:
70                         return SWT.COLOR_DARK_GRAY;
71                 case COLOR_DARK_GREEN:
72                         return SWT.COLOR_DARK_GREEN;
73                 case COLOR_DARK_MAGENTA:
74                         return SWT.COLOR_DARK_MAGENTA;
75                 case COLOR_DARK_RED:
76                         return SWT.COLOR_DARK_RED;
77                 case COLOR_DARK_YELLOW:
78                         return SWT.COLOR_DARK_YELLOW;
79                 case COLOR_GRAY:
80                         return SWT.COLOR_GRAY;
81                 case COLOR_GREEN:
82                         return SWT.COLOR_GREEN;
83                 case COLOR_MAGENTA:
84                         return SWT.COLOR_MAGENTA;
85                 case COLOR_RED:
86                         return SWT.COLOR_RED;
87                 case COLOR_WHITE:
88                         return SWT.COLOR_WHITE;
89                 case COLOR_YELLOW:
90                         return SWT.COLOR_YELLOW;
91                 default:
92                         throw new IllegalArgumentException("Unknown enum constant: " + col);
93                 }
94         }
95 }