1 package net.mograsim.preferences;
3 import java.util.HashMap;
5 import java.util.Map.Entry;
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;
12 import net.mograsim.preferences.ColorDefinition.BuiltInColor;
14 public class SimpleColorManager extends ColorManager
16 private static final Map<ColorDefinition, Color> systemColors = new HashMap<>();
18 private final Device device;
19 private final Map<ColorDefinition, Color> cachedColors;
21 public SimpleColorManager()
23 this.device = Display.getCurrent();
24 this.cachedColors = new HashMap<>(systemColors);
28 public Color toColor(ColorDefinition col)
32 Color cachedColor = cachedColors.get(col);
33 if (cachedColor != null)
35 if (col.builtInColor != null)
37 Color systemColor = device.getSystemColor(toSWTColorConstant(col.builtInColor));
38 systemColors.put(col, systemColor);
39 cachedColors.put(col, systemColor);
42 Color nonSystemColor = new Color(device, col.r, col.g, col.b);
43 cachedColors.put(col, nonSystemColor);
44 return nonSystemColor;
48 public void clearCache()
50 cachedColors.entrySet().stream().filter(e -> !systemColors.containsKey(e.getKey())).map(Entry::getValue).forEach(Color::dispose);
52 cachedColors.putAll(systemColors);
55 public static int toSWTColorConstant(BuiltInColor col)
60 return SWT.COLOR_BLACK;
62 return SWT.COLOR_BLUE;
64 return SWT.COLOR_CYAN;
66 return SWT.COLOR_DARK_BLUE;
68 return SWT.COLOR_DARK_CYAN;
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;
76 return SWT.COLOR_DARK_RED;
77 case COLOR_DARK_YELLOW:
78 return SWT.COLOR_DARK_YELLOW;
80 return SWT.COLOR_GRAY;
82 return SWT.COLOR_GREEN;
84 return SWT.COLOR_MAGENTA;
88 return SWT.COLOR_WHITE;
90 return SWT.COLOR_YELLOW;
92 throw new IllegalArgumentException("Unknown enum constant: " + col);