1
0
mirror of https://github.com/mitb-archive/filebot synced 2024-11-14 05:15:03 -05:00
filebot/source/net/filebot/ui/ThemeSupport.java
2019-02-28 15:39:07 +07:00

221 lines
5.7 KiB
Java

package net.filebot.ui;
import static java.util.Arrays.*;
import static javax.swing.BorderFactory.*;
import static net.filebot.Logging.*;
import java.awt.Color;
import java.awt.Insets;
import java.awt.LinearGradientPaint;
import java.util.logging.Level;
import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.plaf.metal.MetalLookAndFeel;
import javax.swing.plaf.nimbus.NimbusLookAndFeel;
import com.bulenkov.darcula.DarculaLaf;
import com.bulenkov.iconloader.util.ColorUtil;
import net.filebot.util.SystemProperty;
import net.filebot.util.ui.GradientStyle;
import net.filebot.util.ui.ProgressIndicator;
import net.filebot.util.ui.RoundBorder;
import net.filebot.util.ui.SelectionPainter;
import net.filebot.util.ui.notification.SeparatorBorder;
import net.filebot.util.ui.notification.SeparatorBorder.Position;
public class ThemeSupport {
private static Theme theme = SystemProperty.of("net.filebot.theme", Theme::forName, Theme.System).get();
public static Theme getTheme() {
return theme;
}
public static void setTheme() {
setTheme(theme);
}
public static void setTheme(Theme t) {
try {
theme = t;
theme.setLookAndFeel();
} catch (Exception e) {
log.log(Level.SEVERE, e, message("Failed to set LaF", t));
}
}
public static Color getColor(int rgba) {
return theme.getColor(rgba);
}
public static Color getPanelBackground() {
return getColor(0xFFFFFF);
}
public static Color getLabelForeground() {
return getColor(0x101010);
}
public static Color getHelpPanelBackground() {
return theme.isDark() ? new Color(0x313131) : new Color(0xFFFFE1);
}
public static Border getHelpPanelBorder() {
return createLineBorder(getColor(0xACA899));
}
public static Color getErrorColor() {
return Color.red;
}
public static Color getLinkColor() {
return theme.getLinkSelectionForeground();
}
public static Color getActiveColor() {
return new Color(0x6495ED);// Cornflower Blue
}
public static Color getPassiveColor() {
return Color.lightGray;
}
public static Color getVerificationColor() {
return new Color(0x009900);
}
public static Color getPanelSelectionBorderColor() {
return new Color(0x163264);
}
public static LinearGradientPaint getPanelBackgroundGradient(int x, int y, int w, int h) {
float[] gradientFractions = { 0.0f, 0.5f, 1.0f };
Color[] gradientColors = { getColor(0xF6F6F6), getColor(0xF8F8F8), getColor(0xF3F3F3) };
return new LinearGradientPaint(x, y, w, h, gradientFractions, gradientColors);
}
public static Border getRoundBorder() {
return new RoundBorder(getColor(0xACACAC), 12, new Insets(1, 1, 1, 1));
}
public static Border getSeparatorBorder(Position position) {
return new SeparatorBorder(1, getColor(0xB4B4B4), getColor(0xACACAC), GradientStyle.LEFT_TO_RIGHT, position);
}
public static Border getHorizontalRule() {
return new SeparatorBorder(2, new Color(0, 0, 0, 90), GradientStyle.TOP_TO_BOTTOM, SeparatorBorder.Position.BOTTOM);
}
public static ProgressIndicator getProgressIndicator() {
return new ProgressIndicator(Color.orange, withAlpha(getColor(0x000000), 0.25f));
}
public static Color withAlpha(Color color, float alpha) {
return new Color(((int) ((alpha * 255)) << 24) | (color.getRGB() & 0x00FFFFFF), true);
}
public enum Theme {
System {
@Override
public void setLookAndFeel() throws Exception {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
},
CrossPlatform {
@Override
public void setLookAndFeel() throws Exception {
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
}
},
Darcula {
@Override
public void setLookAndFeel() throws Exception {
UIManager.setLookAndFeel(new DarculaLaf());
Color selectionBackground = new Color(0x39698a);
Color componentBackground = new Color(0x3A3D3E);
UIManager.put("List.selectionBackground", selectionBackground);
UIManager.put("ComboBox.selectionBackground", selectionBackground);
UIManager.put("Table.selectionBackground", selectionBackground);
UIManager.put("Menu.selectionBackground", selectionBackground);
UIManager.put("MenuItem.selectionBackground", selectionBackground);
UIManager.put("MenuItem.selectedBackgroundPainter", new SelectionPainter(selectionBackground));
UIManager.put("PopupMenu.selectionBackground", selectionBackground);
UIManager.put("Tree.selectionBackground", selectionBackground);
UIManager.put("Tree.selectionInactiveBackground", selectionBackground);
UIManager.put("Table.background", componentBackground);
UIManager.put("TabbedPane.selected", componentBackground);
}
@Override
public Color getColor(int rgba) {
return getDarkColor(new Color(rgba));
}
public Color getDarkColor(Color c) {
return ColorUtil.shift(c, ColorUtil.isDark(c) ? 9 : 0.2);
}
@Override
public boolean isDark() {
return true;
}
@Override
public Color getLinkSelectionForeground() {
return new Color(0x5195C4);
}
},
Nimbus {
@Override
public void setLookAndFeel() throws Exception {
UIManager.setLookAndFeel(new NimbusLookAndFeel());
}
},
Metal {
@Override
public void setLookAndFeel() throws Exception {
UIManager.setLookAndFeel(new MetalLookAndFeel());
}
};
public Color getColor(int rgb) {
return new Color(rgb);
}
public boolean isDark() {
return false;
}
public Color getLinkSelectionForeground() {
return new Color(0x3399FF);
}
public abstract void setLookAndFeel() throws Exception;
public static Theme forName(String name) {
for (Theme t : values()) {
if (t.name().equalsIgnoreCase(name)) {
return t;
}
}
throw new IllegalArgumentException(String.format("%s not in %s", name, asList(values())));
}
}
}