/* * Copyright (c) 2005-2020 Radiance Kirill Grouchnikov. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * o Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * o Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * o Neither the name of the copyright holder nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package org.pushingpixels.substance.internal.colorscheme; import org.pushingpixels.substance.api.colorscheme.BaseColorScheme; import org.pushingpixels.substance.api.colorscheme.SubstanceColorScheme; import org.pushingpixels.substance.internal.utils.SubstanceColorUtilities; import java.awt.*; /** * Blended color scheme. * * @author Kirill Grouchnikov */ public class BlendBiColorScheme extends BaseColorScheme { /** * The main ultra-light color. */ private Color mainUltraLightColor; /** * The main extra-light color. */ private Color mainExtraLightColor; /** * The main light color. */ private Color mainLightColor; /** * The main medium color. */ private Color mainMidColor; /** * The main dark color. */ private Color mainDarkColor; /** * The main ultra-dark color. */ private Color mainUltraDarkColor; /** * The foreground color. */ private Color foregroundColor; /** * The main original color scheme. */ private SubstanceColorScheme firstScheme; /** * The secondary original color scheme. */ private SubstanceColorScheme secondScheme; /** * Likeness to the first scheme. Values close to 0.0 will create scheme that * closely matches the second original scheme. Values close to 1.0 will * create scheme that closely matches the second original scheme. */ private double firstSchemeLikeness; /** * Creates a new blended color scheme. * * @param firstScheme * The first original color scheme. * @param secondScheme * The second original color scheme. * @param firstSchemeLikeness * Likeness to the first scheme. Values close to 0.0 will create * scheme that closely matches the second original scheme. Values * close to 1.0 will create scheme that closely matches the * second original scheme. */ public BlendBiColorScheme(SubstanceColorScheme firstScheme, SubstanceColorScheme secondScheme, double firstSchemeLikeness) { super("Blended " + firstScheme.getDisplayName() + " & " + secondScheme.getDisplayName() + " " + firstSchemeLikeness, firstScheme.isDark()); this.firstScheme = firstScheme; this.secondScheme = secondScheme; this.firstSchemeLikeness = firstSchemeLikeness; this.foregroundColor = new Color(SubstanceColorUtilities .getInterpolatedRGB(firstScheme.getForegroundColor(), secondScheme.getForegroundColor(), firstSchemeLikeness)); this.mainUltraDarkColor = new Color(SubstanceColorUtilities .getInterpolatedRGB(firstScheme.getUltraDarkColor(), secondScheme.getUltraDarkColor(), firstSchemeLikeness)); this.mainDarkColor = new Color(SubstanceColorUtilities .getInterpolatedRGB(firstScheme.getDarkColor(), secondScheme .getDarkColor(), firstSchemeLikeness)); this.mainMidColor = new Color(SubstanceColorUtilities .getInterpolatedRGB(firstScheme.getMidColor(), secondScheme .getMidColor(), firstSchemeLikeness)); this.mainLightColor = new Color(SubstanceColorUtilities .getInterpolatedRGB(firstScheme.getLightColor(), secondScheme .getLightColor(), firstSchemeLikeness)); this.mainExtraLightColor = new Color(SubstanceColorUtilities .getInterpolatedRGB(firstScheme.getExtraLightColor(), secondScheme.getExtraLightColor(), firstSchemeLikeness)); this.mainUltraLightColor = new Color(SubstanceColorUtilities .getInterpolatedRGB(firstScheme.getUltraLightColor(), secondScheme.getUltraLightColor(), firstSchemeLikeness)); } @Override public Color getForegroundColor() { return this.foregroundColor; } @Override public Color getUltraLightColor() { return this.mainUltraLightColor; } @Override public Color getExtraLightColor() { return this.mainExtraLightColor; } @Override public Color getLightColor() { return this.mainLightColor; } @Override public Color getMidColor() { return this.mainMidColor; } @Override public Color getDarkColor() { return this.mainDarkColor; } @Override public Color getUltraDarkColor() { return this.mainUltraDarkColor; } /** * Returns the likeness to the first scheme. * * @return Likeness to the first scheme */ public double getFirstSchemeLikeness() { return this.firstSchemeLikeness; } /** * Returns the main original color scheme. * * @return The main original color scheme. */ public SubstanceColorScheme getFirstScheme() { return this.firstScheme; } /** * Returns the secondary original color scheme. * * @return The secondary original color scheme. */ public SubstanceColorScheme getSecondScheme() { return this.secondScheme; } }