package org.openlca.app.util;
import java.util.HashMap;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchListener;
import org.eclipse.ui.PlatformUI;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Managed SWT colors: the colors are created on demand and disposed when the
* application is closed.
*/
public class Colors {
private static Logger log = LoggerFactory.getLogger(Colors.class);
private static HashMap<RGB, Color> createdColors = new HashMap<>();
private static Display display;
static {
display = PlatformUI.getWorkbench().getDisplay();
PlatformUI.getWorkbench().addWorkbenchListener(new ShutDown());
}
public static Color errorColor() {
RGB rgb = new RGB(255, 180, 180);
return get(rgb);
}
public static Color get(RGB rgb) {
Color color = createdColors.get(rgb);
if (color == null || color.isDisposed()) {
color = new Color(display, rgb);
createdColors.put(rgb, color);
}
return color;
}
public static Color get(int r, int g, int b) {
RGB rgb = new RGB(r, g, b);
return get(rgb);
}
public static Color white() {
return systemColor(SWT.COLOR_WHITE);
}
public static Color darkGray() {
return systemColor(SWT.COLOR_DARK_GRAY);
}
public static Color linkBlue() {
return get(25, 76, 127);
}
public static Color gray() {
return get(128, 128, 128);
}
public static Color black() {
return systemColor(SWT.COLOR_BLACK);
}
public static Color systemColor(int swtConstant) {
return display.getSystemColor(swtConstant);
}
private static class ShutDown implements IWorkbenchListener {
@Override
public boolean preShutdown(IWorkbench workbench, boolean forced) {
return true;
}
@Override
public void postShutdown(IWorkbench workbench) {
log.trace("dispose {} created colors", createdColors.size());
for (Color color : createdColors.values()) {
if (!color.isDisposed())
color.dispose();
}
}
}
}