1 package org.simantics.utils.ui.color;
\r
3 import java.util.ArrayList;
\r
4 import java.util.Collections;
\r
5 import java.util.List;
\r
8 * Tool for creating random and distinct colors.
\r
11 * @author Marko Luukkainen <marko.luukkainen@vtt.fi>
\r
14 public class ColorPool {
\r
16 private List<Color> colors;
\r
18 public ColorPool() {
\r
19 colors = new ArrayList<Color>();
\r
22 public void addDefaultColors() {
\r
23 colors.add(new Color(0, 0, 255)); // blue
\r
24 colors.add(new Color(255, 0, 0)); // red
\r
25 colors.add(new Color(0, 200, 0)); // green
\r
26 colors.add(new Color(0, 0, 0)); // black
\r
29 public List<Color> getColors() {
\r
33 public Color getColor(int index) {
\r
34 if (colors.size() == 0)
\r
36 while (colors.size() <= index) {
\r
39 return colors.get(index);
\r
42 public int getSize() {
\r
43 return colors.size();
\r
46 public void add(Color color) {
\r
50 public void setColor(int index, Color color) {
\r
51 colors.set(index, color);
\r
54 public void clear() {
\r
58 private Color newRandomColor() {
\r
60 ArrayList<Color> sortColors = new ArrayList<Color>();
\r
61 for (Color c : colors) {
\r
62 if (!Float.isNaN(c.getH()))
\r
65 if (sortColors.size() > 0) {
\r
66 Collections.sort(sortColors);
\r
67 Color duplicate = new Color(sortColors.get(0));
\r
68 duplicate.setH(sortColors.get(0).getH()+360.f);
\r
69 sortColors.add(duplicate);
\r
72 int maxDeltaIndex = 0;
\r
73 for (int i = 0; i < sortColors.size()-1; i++) {
\r
74 float delta = sortColors.get(i + 1).getH() - sortColors.get(i).getH();
\r
75 if (delta > maxDelta) {
\r
80 float newHue = sortColors.get(maxDeltaIndex).getH() + 0.5f * maxDelta;
\r
84 Color randomColor = Color.getRandomHSV(0.5f, 0.5f);
\r
85 randomColor.setH(newHue);
\r
86 colors.add(randomColor);
\r
89 Color randomColor = Color.getRandomHSV(0.5f, 0.5f);
\r
90 colors.add(randomColor);
\r