/*
* Copyright 2016 Nokia Solutions and Networks
* Licensed under the Apache License, Version 2.0,
* see license.txt file for details.
*/
package org.robotframework.ide.eclipse.main.plugin.tableeditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.RGB;
import org.robotframework.ide.eclipse.main.plugin.RedTheme;
import org.robotframework.red.graphics.ColorsManager;
/**
* @author Michal Anglart
*
*/
public class TableThemes {
private static final int LIMIT = 130;
public static TableTheme getTheme(final RGB backgroundInUse) {
return isDarkColor(backgroundInUse) ? new DarkTheme() : new BrightTheme();
}
private static boolean isDarkColor(final RGB color) {
return calculatePerceivedBrightness(color) < LIMIT;
}
// the formula is referenced in the internet in topics regarding perceived brightness
private static int calculatePerceivedBrightness(final RGB color) {
final int r = color.red;
final int g = color.green;
final int b = color.blue;
return (int) Math.sqrt(r * r * .299 + g * g * .587 + b * b * .114);
}
public interface TableTheme {
public Font getFont();
public Color getGridBorderColor();
public Color getHeadersBackground();
public Color getHeadersForeground();
public Color getHeadersUnderlineColor();
public Color getHighlightedHeadersBackground();
public Color getBodyBackgroundOddRowBackground();
public Color getBodyBackgroundEvenRowBackground();
public Color getBodyForeground();
public Color getBodySelectionBorderColor();
public Color getBodyHoveredCellBackground();
public Color getBodySelectedCellBackground();
public Color getBodyHoveredSelectedCellBackground();
public Color getBodyAnchoredCellBackground();
}
private static class DarkTheme implements TableTheme {
@Override
public Font getFont() {
return null;
}
@Override
public Color getGridBorderColor() {
return ColorsManager.getColor(SWT.COLOR_BLACK);
}
@Override
public Color getHeadersBackground() {
return ColorsManager.getColor(82, 87, 91);
}
@Override
public Color getHeadersForeground() {
return ColorsManager.getColor(204, 204, 204);
}
@Override
public Color getHeadersUnderlineColor() {
return ColorsManager.getColor(SWT.COLOR_BLACK);
}
@Override
public Color getHighlightedHeadersBackground() {
return ColorsManager.getColor(44, 47, 50);
}
@Override
public Color getBodyBackgroundOddRowBackground() {
return ColorsManager.getColor(47, 47, 47);
}
@Override
public Color getBodyBackgroundEvenRowBackground() {
return ColorsManager.getColor(61, 65, 68);
}
@Override
public Color getBodyForeground() {
return ColorsManager.getColor(204, 204, 204);
}
@Override
public Color getBodySelectionBorderColor() {
return ColorsManager.getColor(SWT.COLOR_BLACK);
}
@Override
public Color getBodyHoveredCellBackground() {
return ColorsManager.getColor(40, 40, 40);
}
@Override
public Color getBodyHoveredSelectedCellBackground() {
return ColorsManager.getColor(30, 30, 30);
}
@Override
public Color getBodySelectedCellBackground() {
return ColorsManager.getColor(50, 50, 50);
}
@Override
public Color getBodyAnchoredCellBackground() {
return ColorsManager.getColor(40, 40, 40);
}
}
private static class BrightTheme implements TableTheme {
@Override
public Font getFont() {
return null;
}
@Override
public Color getGridBorderColor() {
return ColorsManager.getColor(240, 240, 240);
}
@Override
public Color getHeadersBackground() {
return ColorsManager.getColor(250, 250, 250);
}
@Override
public Color getHeadersForeground() {
return ColorsManager.getColor(SWT.COLOR_BLACK);
}
@Override
public Color getHeadersUnderlineColor() {
return ColorsManager.getColor(220, 220, 220);
}
@Override
public Color getHighlightedHeadersBackground() {
return ColorsManager.getColor(240, 240, 240);
}
@Override
public Color getBodyBackgroundOddRowBackground() {
return ColorsManager.getColor(SWT.COLOR_WHITE);
}
@Override
public Color getBodyBackgroundEvenRowBackground() {
return ColorsManager.getColor(250, 250, 250);
}
@Override
public Color getBodyForeground() {
return ColorsManager.getColor(SWT.COLOR_BLACK);
}
@Override
public Color getBodySelectionBorderColor() {
return ColorsManager.getColor(SWT.COLOR_BLACK);
}
@Override
public Color getBodyHoveredCellBackground() {
return RedTheme.getHighlightedCellColor();
}
@Override
public Color getBodyHoveredSelectedCellBackground() {
return RedTheme.getHighlightedCellColor();
}
@Override
public Color getBodySelectedCellBackground() {
return RedTheme.getHiglihtedRowColor();
}
@Override
public Color getBodyAnchoredCellBackground() {
return RedTheme.getHiglihtedRowColor();
}
}
}