/* Copyright 2006 by Sean Luke and George Mason University Licensed under the Academic Free License version 3.0 See the file "LICENSE" for more information */ package sim.util.gui; import java.awt.*; /** * ColorMap is a interface for mapping numerical values to colors. * The easiest way to implement getRGB(level) is simply with getColor(level).getRGB(). * validLevel indicates whether the numerical value is within a range that seems "reasonable" * for coding into colors -- however ColorMap should provide *some* feasible color for * *any* given value, including NaN. defaultValue() provides a default numerical value * within the "reasonable" range -- often the minimum value. It must be the case that * validLevel(defaultValue()) == true. * * @author Gabriel Catalin Balan * */ public interface ColorMap { /** Returns a color for the given level */ public Color getColor(double level); /** Returns the RGB values, plus alpha, for a color for the given level. The byte ordering should be in the same fashion that Color.getRGB() is provided. This could be simply written as <p><code return getColor(level).getRGB() </code> ... however it's likely that this method could be written more efficiently than this. <p>Why isn't this called getRGBA(...)? Because for some reason the underlying Color method is likewise getRGB(), even though it ought to be called getRGBA(). */ public int getRGB(double level); /** Returns the alpha value for a color for the given level. This could be simply written as <p><code>return getRGB(level) >>> 24 ; </code> <p>...or it could be written as: <p><code>return getColor(level).getAlpha() </code> <p>...however it's likely that it this method could be written more efficiently than either of these. */ public int getAlpha(double level); /** Returns true if a level is "valid" (it provides a meaningful color) */ public boolean validLevel(double level); /** Returns <i>some</i> level which is valid (that is, validLevel(defaultValue()) should always return true). This is commonly provided to give the user a level to replace an "invalid" level he's typed in. */ public double defaultValue(); }