blob: 3669e725610d8d89837891dc0207ee12ed4c1f9b [file] [log] [blame]
/*
* Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.ui;
import com.intellij.util.NotNullProducer;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import java.awt.*;
import java.awt.color.ColorSpace;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.awt.image.ColorModel;
/**
* @author Konstantin Bulenkov
*/
@SuppressWarnings("UseJBColor")
public class JBColor extends Color {
private static volatile boolean DARK = UIUtil.isUnderDarcula();
private final Color darkColor;
private final NotNullProducer<Color> func;
public JBColor(int rgb, int darkRGB) {
this(new Color(rgb), new Color(darkRGB));
}
public JBColor(Color regular, Color dark) {
super(regular.getRGB(), regular.getAlpha() != 255);
darkColor = dark;
//noinspection AssignmentToStaticFieldFromInstanceMethod
DARK = UIUtil.isUnderDarcula(); //Double check. Sometimes DARK != isDarcula() after dialogs appear on splash screen
func = null;
}
public JBColor(NotNullProducer<Color> function) {
super(0);
darkColor = null;
func = function;
}
public static void setDark(boolean dark) {
DARK = dark;
}
Color getDarkVariant() {
return darkColor;
}
Color getColor() {
if (func != null) {
return func.produce();
} else {
return DARK ? getDarkVariant() : this;
}
}
@Override
public int getRed() {
final Color c = getColor();
return c == this ? super.getRed() : c.getRed();
}
@Override
public int getGreen() {
final Color c = getColor();
return c == this ? super.getGreen() : c.getGreen();
}
@Override
public int getBlue() {
final Color c = getColor();
return c == this ? super.getBlue() : c.getBlue();
}
@Override
public int getAlpha() {
final Color c = getColor();
return c == this ? super.getAlpha() : c.getAlpha();
}
@Override
public int getRGB() {
final Color c = getColor();
return c == this ? super.getRGB() : c.getRGB();
}
@Override
public Color brighter() {
if (func != null) {
return new JBColor(new NotNullProducer<Color>() {
@NotNull
@Override
public Color produce() {
return func.produce().brighter();
}
});
}
return new JBColor(super.brighter(), getDarkVariant().brighter());
}
@Override
public Color darker() {
if (func != null) {
return new JBColor(new NotNullProducer<Color>() {
@NotNull
@Override
public Color produce() {
return func.produce().darker();
}
});
}
return new JBColor(super.darker(), getDarkVariant().darker());
}
@Override
public int hashCode() {
final Color c = getColor();
return c == this ? super.hashCode() : c.hashCode();
}
@Override
public boolean equals(Object obj) {
final Color c = getColor();
return c == this ? super.equals(obj) : c.equals(obj);
}
@Override
public String toString() {
final Color c = getColor();
return c == this ? super.toString() : c.toString();
}
@Override
public float[] getRGBComponents(float[] compArray) {
final Color c = getColor();
return c == this ? super.getRGBComponents(compArray) : c.getRGBComponents(compArray);
}
@Override
public float[] getRGBColorComponents(float[] compArray) {
final Color c = getColor();
return c == this ? super.getRGBComponents(compArray) : c.getRGBColorComponents(compArray);
}
@Override
public float[] getComponents(float[] compArray) {
final Color c = getColor();
return c == this ? super.getComponents(compArray) : c.getComponents(compArray);
}
@Override
public float[] getColorComponents(float[] compArray) {
final Color c = getColor();
return c == this ? super.getColorComponents(compArray) : c.getColorComponents(compArray);
}
@Override
public float[] getComponents(ColorSpace cspace, float[] compArray) {
final Color c = getColor();
return c == this ? super.getComponents(cspace, compArray) : c.getComponents(cspace, compArray);
}
@Override
public float[] getColorComponents(ColorSpace cspace, float[] compArray) {
final Color c = getColor();
return c == this ? super.getColorComponents(cspace, compArray) : c.getColorComponents(cspace, compArray);
}
@Override
public ColorSpace getColorSpace() {
final Color c = getColor();
return c == this ? super.getColorSpace() : c.getColorSpace();
}
@Override
public synchronized PaintContext createContext(ColorModel cm, Rectangle r, Rectangle2D r2d, AffineTransform xform, RenderingHints hints) {
final Color c = getColor();
return c == this ? super.createContext(cm, r, r2d, xform, hints) : c.createContext(cm, r, r2d, xform, hints);
}
@Override
public int getTransparency() {
final Color c = getColor();
return c == this ? super.getTransparency() : c.getTransparency();
}
public static final JBColor red = new JBColor(Color.red, DarculaColors.RED);
public static final JBColor RED = red;
public static final JBColor blue = new JBColor(Color.blue, DarculaColors.BLUE);
public static final JBColor BLUE = blue;
public static final JBColor white = new JBColor(Color.white, UIUtil.getListBackground()) {
@Override
Color getDarkVariant() {
return UIUtil.getListBackground();
}
};
public static final JBColor WHITE = white;
public static final JBColor black = new JBColor(Color.black, UIUtil.getListForeground()) {
@Override
Color getDarkVariant() {
return UIUtil.getListForeground();
}
};
public static final JBColor BLACK = black;
public static final JBColor gray = new JBColor(Gray._128, Gray._128);
public static final JBColor GRAY = gray;
public static final JBColor lightGray = new JBColor(Gray._192, Gray._64);
public static final JBColor LIGHT_GRAY = lightGray;
public static final JBColor darkGray = new JBColor(Gray._64, Gray._192);
public static final JBColor DARK_GRAY = darkGray;
public static final JBColor pink = new JBColor(Color.pink, Color.pink);
public static final JBColor PINK = pink;
public static final JBColor orange = new JBColor(Color.orange, new Color(159, 107, 0));
public static final JBColor ORANGE = orange;
public static final JBColor yellow = new JBColor(Color.yellow, new Color(138, 138, 0));
public static final JBColor YELLOW = yellow;
public static final JBColor green = new JBColor(Color.green, new Color(98, 150, 85));
public static final JBColor GREEN = green;
public static final Color magenta = new JBColor(Color.magenta, new Color(151, 118, 169));
public static final Color MAGENTA = magenta;
public static final Color cyan = new JBColor(Color.cyan, new Color(0, 137, 137));
public static final Color CYAN = cyan;
public static Color foreground() {
return new JBColor(new NotNullProducer<Color>() {
@NotNull
@Override
public Color produce() {
return UIUtil.getLabelForeground();
}
});
}
public static Color background() {
return new JBColor(new NotNullProducer<Color>() {
@NotNull
@Override
public Color produce() {
return UIUtil.getListBackground();
}
});
}
public static Color border() {
return new JBColor(new NotNullProducer<Color>() {
@NotNull
@Override
public Color produce() {
//noinspection deprecation
return UIUtil.getBorderColor();
}
});
}
}