/*******************************************************************************
* Copyright (c) Emil Crumhorn - Hexapixel.com - emil.crumhorn@gmail.com
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* emil.crumhorn@gmail.com - initial API and implementation
*******************************************************************************/
package com.hexapixel.widgets.generic;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Display;
public class ColorCache {
public static final RGB BLACK = new RGB(0, 0, 0);
public static final RGB WHITE = new RGB(255, 255, 255);
private static Map<RGB, Color> colorTable;
private static ColorCache instance;
public static final int SKIN_NONE = -1;
public static final int SKIN_AUTO = 0; // auto detect
public static final int SKIN_BLUE = 1;
public static final int SKIN_OLIVE = 2;
public static final int SKIN_SILVER = 3;
public static final int SKIN_OFFICE_2007 = 4;
public static final int SKIN_FALLBACK = SKIN_SILVER; // if auto fails, what skin to use
public static int SKIN_CURRENT = SKIN_AUTO;
/**
* Disposes all colors held in the cache.
* <p>
* <b>IMPORTANT: ONLY CALL WHEN YOU WANT TO DISPOSE ALL CACHED COLORS!</b>
*
*/
public static void disposeAll() {
getInstance().dispose();
blueHeaderColor = null;
lightBlueButtonColor = null;
blueButtonBackground = null;
blueToolbarColor = null;
lightBlueToolbarcolor = null;
oliveHeaderColor = null;
lightOliveButtonColor = null;
lightOliveButtonColor = null;
oliveButtonBackground = null;
oliveToolbarColor = null;
lightOliveToolbarcolor = null;
silverHeaderColor = null;
lightSilverButtonColor = null;
silverButtonBackground = null;
silverToolbarColor = null;
lightSilverToolbarcolor = null;
lightBrownColor = null;
lightBrownColorReverse = null;
darkBrownColor = null;
calendarBlueHeader = null;
calendarBlueBorder = null;
calendarOliveHeader = null;
calendarOliveBorder = null;
calendarSilverBorder = null;
calendarSilverHeader = null;
instance = null;
colorTable = null;
}
// -- blue skin
public static Color [] blueHeaderColor = new Color[]{
ColorCache.getInstance().getColor(89, 135, 214),
ColorCache.getInstance().getColor(3, 56, 148),
ColorCache.getInstance().getColor(89, 135, 214)
};
public static Color [] lightBlueButtonColor = new Color[]{
ColorCache.getInstance().getColor(203, 225, 252),
ColorCache.getInstance().getColor(125, 165, 224),
ColorCache.getInstance().getColor(203, 225, 252)
};
public static Color blueButtonBackground = ColorCache.getInstance().getColor(3, 56, 148);
public static Color blueToolbarColor = ColorCache.getInstance().getColor(77, 124, 205);
public static Color lightBlueToolbarcolor = ColorCache.getInstance().getColor(170, 199, 246);
// -- end blue skin
// toolbar
public static Color [] oliveHeaderColor = new Color[]{
ColorCache.getInstance().getColor(175, 192, 130), // light
ColorCache.getInstance().getColor(99, 122, 68), // dark
ColorCache.getInstance().getColor(175, 192, 130) // light
};
// buttons
public static Color [] lightOliveButtonColor = new Color[]{
ColorCache.getInstance().getColor(232, 238, 204),
ColorCache.getInstance().getColor(177, 192, 140),
ColorCache.getInstance().getColor(232, 238, 204)
};
public static Color oliveButtonBackground = ColorCache.getInstance().getColor(99, 122, 68);
public static Color oliveToolbarColor = ColorCache.getInstance().getColor(230, 230, 200);
public static Color lightOliveToolbarcolor = ColorCache.getInstance().getColor(232, 232, 206);
// -- end olive skin
// -- silver skin
public static Color [] silverHeaderColor = new Color[]{
ColorCache.getInstance().getColor(168, 167, 191), // light
ColorCache.getInstance().getColor(124, 124, 148), // dark
ColorCache.getInstance().getColor(168, 167, 191) // light
};
// buttons
public static Color [] lightSilverButtonColor = new Color[]{
ColorCache.getInstance().getColor(225, 226, 236),
ColorCache.getInstance().getColor(149, 147, 177),
ColorCache.getInstance().getColor(225, 226, 236)
};
public static Color silverButtonBackground = ColorCache.getInstance().getColor(124, 124, 148);
public static Color silverToolbarColor = ColorCache.getInstance().getColor(164, 163, 187);
public static Color lightSilverToolbarcolor = ColorCache.getInstance().getColor(231, 231, 239);
// -- end silver skin
public static Color [] lightBrownColor = new Color[]{
ColorCache.getInstance().getColor(254, 252, 215),
ColorCache.getInstance().getColor(247, 192, 91),
ColorCache.getInstance().getColor(254, 252, 215)
};
public static Color [] lightBrownColorReverse = new Color[]{
ColorCache.getInstance().getColor(247, 192, 91),
ColorCache.getInstance().getColor(254, 252, 215),
ColorCache.getInstance().getColor(247, 192, 91)
};
public static Color [] darkBrownColor = new Color[]{
ColorCache.getInstance().getColor(232, 127, 8),
ColorCache.getInstance().getColor(247, 218, 124),
ColorCache.getInstance().getColor(232, 127, 8)
};
public static Color calendarBlueHeader = ColorCache.getInstance().getColor(158, 190, 245);
public static Color calendarBlueBorder = ColorCache.getInstance().getColor(127, 157, 185);
public static Color calendarOliveHeader = ColorCache.getInstance().getColor(217, 217, 167);
public static Color calendarOliveBorder = ColorCache.getInstance().getColor(164, 185, 127);
public static Color calendarSilverHeader = ColorCache.getInstance().getColor(215, 215, 229);
public static Color calendarSilverBorder = ColorCache.getInstance().getColor(157, 157, 161);
// office 2007 does chrome gradients, top color goes 12 pixels down
public static Color o2007blueTop = ColorCache.getInstance().getColor(227, 239, 255);
public static Color o2007blueMid = ColorCache.getInstance().getColor(173, 209, 255);
public static Color o2007blueBot = ColorCache.getInstance().getColor(192, 219, 255);
public static Color o2007orangeSelectedTop = ColorCache.getInstance().getColor(255, 217, 170);
public static Color o2007orangeSelectedMid = ColorCache.getInstance().getColor(255, 187, 110);
public static Color o2007orangeSelectedBot = ColorCache.getInstance().getColor(254, 225, 122);
public static Color o2007orangeHoveredTop = ColorCache.getInstance().getColor(255, 254, 228);
public static Color o2007orangeHoveredMid = ColorCache.getInstance().getColor(255, 232, 167);
public static Color o2007orangeHoveredBot = ColorCache.getInstance().getColor(255, 230, 158);
public static Color o2007buttonBackgroundColor = ColorCache.getInstance().getColor(101, 147, 207);
private ColorCache() {
if (colorTable == null) {
colorTable = new HashMap<RGB, Color>();
}
}
/**
* Returns the active instance of this class.
*
* @return ColorCache instance
*/
public static ColorCache getInstance() {
if (instance == null) {
instance = new ColorCache();
}
return instance;
}
// see disposeAll();
private void dispose() {
Iterator<Color> e = colorTable.values().iterator();
while (e.hasNext()) e.next().dispose();
colorTable.clear();
for (int i = 0; i < blueHeaderColor.length; i++) {
Color color = blueHeaderColor[i];
color.dispose();
}
for (int i = 0; i < darkBrownColor.length; i++) {
Color color = darkBrownColor[i];
color.dispose();
}
for (int i = 0; i < lightBlueButtonColor.length; i++) {
Color color = lightBlueButtonColor[i];
color.dispose();
}
for (int i = 0; i < lightBrownColor.length; i++) {
Color color = lightBrownColor[i];
color.dispose();
}
for (int i = 0; i < lightBrownColorReverse.length; i++) {
Color color = lightBrownColorReverse[i];
color.dispose();
}
for (int i = 0; i < lightOliveButtonColor.length; i++) {
Color color = lightOliveButtonColor[i];
color.dispose();
}
for (int i = 0; i < lightSilverButtonColor.length; i++) {
Color color = lightSilverButtonColor[i];
color.dispose();
}
for (int i = 0; i < oliveHeaderColor.length; i++) {
Color color = oliveHeaderColor[i];
color.dispose();
}
for (int i = 0; i < silverHeaderColor.length; i++) {
Color color = silverHeaderColor[i];
color.dispose();
}
blueButtonBackground.dispose();
blueToolbarColor.dispose();
silverButtonBackground.dispose();
silverToolbarColor.dispose();
oliveButtonBackground.dispose();
oliveToolbarColor.dispose();
lightBlueToolbarcolor.dispose();
lightOliveToolbarcolor.dispose();
lightSilverToolbarcolor.dispose();
calendarBlueBorder.dispose();
calendarBlueHeader.dispose();
calendarOliveBorder.dispose();
calendarOliveHeader.dispose();
calendarSilverBorder.dispose();
calendarSilverHeader.dispose();
}
/**
* Returns the color white R255, G255, B255
*
* @return White color
*/
public Color getWhite() {
return getColor(new RGB(255, 255, 255));
}
/**
* Returns the color black R0, G0, B0
*
* @return Black color
*/
public Color getBlack() {
return getColor(new RGB(0, 0, 0));
}
/**
* Returns a color that is also cached if it has not been created before.
*
* @param rgb RGB colors
* @return Color
*/
public Color getColor(RGB rgb) {
Color color = (Color) colorTable.get(rgb);
if (color == null) {
color = new Color(Display.getCurrent(), rgb);
colorTable.put(rgb, color);
}
return color;
}
/**
* Returns a color that is also cached if it has not been created before.
*
* @param r Red
* @param g Green
* @param b Blue
* @return Color
*/
public Color getColor(int r, int g, int b) {
// convert to grayscale for fun
//int luma = (int) ((float)r*0.3+(float)g*0.59+(float)b*0.11);
//RGB rgb = new RGB(luma, luma, luma);
RGB rgb = new RGB(r, g, b);
Color color = (Color) colorTable.get(rgb);
if (color == null) {
color = new Color(Display.getCurrent(), rgb);
colorTable.put(rgb, color);
}
return color;
}
}