/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.gui.resources.internal; import java.util.HashMap; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.swt.graphics.Color; import de.rcenvironment.core.gui.resources.api.ColorManager; import de.rcenvironment.core.gui.resources.api.ColorSource; /** * Standard {@link ColorManager} implementation. * * @author Tobias Rodehutskors */ public class ColorManagerImpl extends ColorManager { private final Map<ColorSource, Color> sharedColors = new HashMap<>(); private final Log log = LogFactory.getLog(getClass()); public ColorManagerImpl() { log.debug("Color manager initialized"); } @Override public Color getSharedColor(ColorSource source) { synchronized (sharedColors) { Color color = sharedColors.get(source); if (color == null) { // TODO handle image failures explicitly? color = source.getColorDescriptor().createColor(null); sharedColors.put(source, color); } return color; } } @Override public void dispose() { synchronized (sharedColors) { log.debug("Disposing " + sharedColors.values().size() + " shared colors"); for (Color color : sharedColors.values()) { color.dispose(); } sharedColors.clear(); } log.debug("Color manager disposed"); } }