Created net.mograsim.preferences
[Mograsim.git] / net.mograsim.preferences / src / net / mograsim / preferences / SimpleColorManager.java
diff --git a/net.mograsim.preferences/src/net/mograsim/preferences/SimpleColorManager.java b/net.mograsim.preferences/src/net/mograsim/preferences/SimpleColorManager.java
new file mode 100644 (file)
index 0000000..74f74dc
--- /dev/null
@@ -0,0 +1,80 @@
+package net.mograsim.preferences;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Device;
+
+import net.mograsim.preferences.ColorDefinition.BuiltInColor;
+
+public class SimpleColorManager extends ColorManager
+{
+       private static final Map<BuiltInColor, Color> systemColors = new HashMap<>();
+       private static final Map<Color, BuiltInColor> systemColorConstants = new HashMap<>();
+
+       @Override
+       public Color toColor(Device device, ColorDefinition col)
+       {
+               Color systemColor = systemColors.get(col.builtInColor);
+               if (systemColor != null)
+                       return systemColor;
+               if (col.builtInColor != null)
+               {
+                       systemColor = device.getSystemColor(toSWTColorConstant(col.builtInColor));
+                       systemColors.put(col.builtInColor, systemColor);
+                       systemColorConstants.put(systemColor, col.builtInColor);
+                       return systemColor;
+               }
+               return new Color(device, col.r, col.g, col.b);
+       }
+
+       @Override
+       public void dispose(Color col)
+       {
+               if (!systemColorConstants.containsKey(col))
+                       col.dispose();
+       }
+
+       public static int toSWTColorConstant(BuiltInColor col)
+       {
+               switch (col)
+               {
+               case COLOR_BLACK:
+                       return SWT.COLOR_BLACK;
+               case COLOR_BLUE:
+                       return SWT.COLOR_BLUE;
+               case COLOR_CYAN:
+                       return SWT.COLOR_CYAN;
+               case COLOR_DARK_BLUE:
+                       return SWT.COLOR_DARK_BLUE;
+               case COLOR_DARK_CYAN:
+                       return SWT.COLOR_DARK_CYAN;
+               case COLOR_DARK_GRAY:
+                       return SWT.COLOR_DARK_GRAY;
+               case COLOR_DARK_GREEN:
+                       return SWT.COLOR_DARK_GREEN;
+               case COLOR_DARK_MAGENTA:
+                       return SWT.COLOR_DARK_MAGENTA;
+               case COLOR_DARK_RED:
+                       return SWT.COLOR_DARK_RED;
+               case COLOR_DARK_YELLOW:
+                       return SWT.COLOR_DARK_YELLOW;
+               case COLOR_GRAY:
+                       return SWT.COLOR_GRAY;
+               case COLOR_GREEN:
+                       return SWT.COLOR_GREEN;
+               case COLOR_MAGENTA:
+                       return SWT.COLOR_MAGENTA;
+               case COLOR_RED:
+                       return SWT.COLOR_RED;
+               case COLOR_WHITE:
+                       return SWT.COLOR_WHITE;
+               case COLOR_YELLOW:
+                       return SWT.COLOR_YELLOW;
+               default:
+                       throw new IllegalArgumentException("Unknown enum constant: " + col);
+               }
+       }
+}