Created net.mograsim.preferences
[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
6 import org.eclipse.swt.SWT;
7 import org.eclipse.swt.graphics.Color;
8 import org.eclipse.swt.graphics.Device;
9
10 import net.mograsim.preferences.ColorDefinition.BuiltInColor;
11
12 public class SimpleColorManager extends ColorManager
13 {
14         private static final Map<BuiltInColor, Color> systemColors = new HashMap<>();
15         private static final Map<Color, BuiltInColor> systemColorConstants = new HashMap<>();
16
17         @Override
18         public Color toColor(Device device, ColorDefinition col)
19         {
20                 Color systemColor = systemColors.get(col.builtInColor);
21                 if (systemColor != null)
22                         return systemColor;
23                 if (col.builtInColor != null)
24                 {
25                         systemColor = device.getSystemColor(toSWTColorConstant(col.builtInColor));
26                         systemColors.put(col.builtInColor, systemColor);
27                         systemColorConstants.put(systemColor, col.builtInColor);
28                         return systemColor;
29                 }
30                 return new Color(device, col.r, col.g, col.b);
31         }
32
33         @Override
34         public void dispose(Color col)
35         {
36                 if (!systemColorConstants.containsKey(col))
37                         col.dispose();
38         }
39
40         public static int toSWTColorConstant(BuiltInColor col)
41         {
42                 switch (col)
43                 {
44                 case COLOR_BLACK:
45                         return SWT.COLOR_BLACK;
46                 case COLOR_BLUE:
47                         return SWT.COLOR_BLUE;
48                 case COLOR_CYAN:
49                         return SWT.COLOR_CYAN;
50                 case COLOR_DARK_BLUE:
51                         return SWT.COLOR_DARK_BLUE;
52                 case COLOR_DARK_CYAN:
53                         return SWT.COLOR_DARK_CYAN;
54                 case COLOR_DARK_GRAY:
55                         return SWT.COLOR_DARK_GRAY;
56                 case COLOR_DARK_GREEN:
57                         return SWT.COLOR_DARK_GREEN;
58                 case COLOR_DARK_MAGENTA:
59                         return SWT.COLOR_DARK_MAGENTA;
60                 case COLOR_DARK_RED:
61                         return SWT.COLOR_DARK_RED;
62                 case COLOR_DARK_YELLOW:
63                         return SWT.COLOR_DARK_YELLOW;
64                 case COLOR_GRAY:
65                         return SWT.COLOR_GRAY;
66                 case COLOR_GREEN:
67                         return SWT.COLOR_GREEN;
68                 case COLOR_MAGENTA:
69                         return SWT.COLOR_MAGENTA;
70                 case COLOR_RED:
71                         return SWT.COLOR_RED;
72                 case COLOR_WHITE:
73                         return SWT.COLOR_WHITE;
74                 case COLOR_YELLOW:
75                         return SWT.COLOR_YELLOW;
76                 default:
77                         throw new IllegalArgumentException("Unknown enum constant: " + col);
78                 }
79         }
80 }