X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.preferences%2Fsrc%2Fnet%2Fmograsim%2Fpreferences%2FSimpleColorManager.java;h=60b53110410e2d555235d21913da610e590fe78c;hb=9b0530074d07ba11b12c23df4370dd035da774b3;hp=74f74dc02027c38719d070620cb186341aadda17;hpb=dff3e01498ac766a7f1ec7b18ce2cc5acd257cb5;p=Mograsim.git diff --git a/net.mograsim.preferences/src/net/mograsim/preferences/SimpleColorManager.java b/net.mograsim.preferences/src/net/mograsim/preferences/SimpleColorManager.java index 74f74dc0..60b53110 100644 --- a/net.mograsim.preferences/src/net/mograsim/preferences/SimpleColorManager.java +++ b/net.mograsim.preferences/src/net/mograsim/preferences/SimpleColorManager.java @@ -2,39 +2,54 @@ package net.mograsim.preferences; import java.util.HashMap; import java.util.Map; +import java.util.Map.Entry; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Device; +import org.eclipse.swt.widgets.Display; import net.mograsim.preferences.ColorDefinition.BuiltInColor; public class SimpleColorManager extends ColorManager { - private static final Map systemColors = new HashMap<>(); - private static final Map systemColorConstants = new HashMap<>(); + private static final Map systemColors = new HashMap<>(); + + private final Device device; + private final Map cachedColors; + + public SimpleColorManager() + { + this.device = Display.getCurrent(); + this.cachedColors = new HashMap<>(systemColors); + } @Override - public Color toColor(Device device, ColorDefinition col) + public Color toColor(ColorDefinition col) { - Color systemColor = systemColors.get(col.builtInColor); - if (systemColor != null) - return systemColor; + if (col == null) + return null; + Color cachedColor = cachedColors.get(col); + if (cachedColor != null) + return cachedColor; if (col.builtInColor != null) { - systemColor = device.getSystemColor(toSWTColorConstant(col.builtInColor)); - systemColors.put(col.builtInColor, systemColor); - systemColorConstants.put(systemColor, col.builtInColor); + Color systemColor = device.getSystemColor(toSWTColorConstant(col.builtInColor)); + systemColors.put(col, systemColor); + cachedColors.put(col, systemColor); return systemColor; } - return new Color(device, col.r, col.g, col.b); + Color nonSystemColor = new Color(device, col.r, col.g, col.b); + cachedColors.put(col, nonSystemColor); + return nonSystemColor; } @Override - public void dispose(Color col) + public void clearCache() { - if (!systemColorConstants.containsKey(col)) - col.dispose(); + cachedColors.entrySet().stream().filter(e -> !systemColors.containsKey(e.getKey())).map(Entry::getValue).forEach(Color::dispose); + cachedColors.clear(); + cachedColors.putAll(systemColors); } public static int toSWTColorConstant(BuiltInColor col)