reduce derived colors calculations

This commit is contained in:
Karl Tauber
2020-05-20 14:49:56 +02:00
parent 87b73f26f5
commit c900c9cc82

View File

@@ -32,13 +32,28 @@ public class DerivedColor
{
private final ColorFunction[] functions;
private boolean hasBaseOfDefaultColor;
private int baseOfDefaultColorRGB;
public DerivedColor( Color defaultColor, ColorFunction... functions ) {
super( (defaultColor != null) ? defaultColor : Color.red );
this.functions = functions;
}
public Color derive( Color baseColor ) {
return ColorFunctions.applyFunctions( baseColor, functions );
if( hasBaseOfDefaultColor && baseOfDefaultColorRGB == baseColor.getRGB() )
return this; // return default color
Color result = ColorFunctions.applyFunctions( baseColor, functions );
// if the result is equal to the default color, then the original base color
// was passed and we can cache this to avoid color calculations
if( !hasBaseOfDefaultColor && result.getRGB() == this.getRGB() ) {
hasBaseOfDefaultColor = true;
baseOfDefaultColorRGB = baseColor.getRGB();
}
return result;
}
public ColorFunction[] getFunctions() {