1
15 package gate.swing;
16
17 import java.awt.Color;
18 import java.util.LinkedList;
19
20
25 public class ColorGenerator {
26
27
29 private static final boolean DEBUG = false;
30
31
35 public ColorGenerator() {
36 for(int i = 0; i < 8; i++)availableSpacesList[i] = new LinkedList();
37 ColorSpace usedCS = new ColorSpace(0,0,0,255);
38 availableSpacesList[0].addLast(new ColorSpace(usedCS.baseR +
39 usedCS.radius/2,
40 usedCS.baseG,
41 usedCS.baseB,
42 usedCS.radius/2));
43 availableSpacesList[1].addLast(new ColorSpace(usedCS.baseR,
44 usedCS.baseG + usedCS.radius/2,
45 usedCS.baseB,
46 usedCS.radius/2));
47 availableSpacesList[2].addLast(new ColorSpace(usedCS.baseR +
48 usedCS.radius/2,
49 usedCS.baseG + usedCS.radius/2,
50 usedCS.baseB,
51 usedCS.radius/2));
52
53 availableSpacesList[3].addLast(new ColorSpace(usedCS.baseR,
54 usedCS.baseG,
55 usedCS.baseB + usedCS.radius/2,
56 usedCS.radius/2));
57 availableSpacesList[4].addLast(new ColorSpace(usedCS.baseR +
58 usedCS.radius/2,
59 usedCS.baseG,
60 usedCS.baseB + usedCS.radius/2,
61 usedCS.radius/2));
62 availableSpacesList[5].addLast(new ColorSpace(usedCS.baseR,
63 usedCS.baseG + usedCS.radius/2,
64 usedCS.baseB + usedCS.radius/2,
65 usedCS.radius/2));
66
74 }
76
77
81 public Color getNextColor(){
82 ColorSpace usedCS;
83 listToRead = listToRead % 8;
84
85 if(availableSpacesList[listToRead].isEmpty()){
86 usedCS = (ColorSpace)usedSpacesList.removeFirst();
87 availableSpacesList[listToRead].addLast(new ColorSpace(usedCS.baseR,
88 usedCS.baseG,
89 usedCS.baseB,
90 usedCS.radius/2));
91 availableSpacesList[listToRead].addLast(new ColorSpace(
92 usedCS.baseR + usedCS.radius/2,
93 usedCS.baseG,
94 usedCS.baseB,
95 usedCS.radius/2));
96 availableSpacesList[listToRead].addLast(new ColorSpace(usedCS.baseR,
97 usedCS.baseG + usedCS.radius/2,
98 usedCS.baseB,
99 usedCS.radius/2));
100 availableSpacesList[listToRead].addLast(new ColorSpace(
101 usedCS.baseR + usedCS.radius/2,
102 usedCS.baseG + usedCS.radius/2,
103 usedCS.baseB,
104 usedCS.radius/2));
105
106 availableSpacesList[listToRead].addLast(new ColorSpace(usedCS.baseR,
107 usedCS.baseG,
108 usedCS.baseB + usedCS.radius/2,
109 usedCS.radius/2));
110 availableSpacesList[listToRead].addLast(new ColorSpace(
111 usedCS.baseR + usedCS.radius/2,
112 usedCS.baseG,
113 usedCS.baseB + usedCS.radius/2,
114 usedCS.radius/2));
115 availableSpacesList[listToRead].addLast(new ColorSpace(usedCS.baseR,
116 usedCS.baseG + usedCS.radius/2,
117 usedCS.baseB + usedCS.radius/2,
118 usedCS.radius/2));
119 availableSpacesList[listToRead].addLast(new ColorSpace(
120 usedCS.baseR + usedCS.radius/2,
121 usedCS.baseG + usedCS.radius/2,
122 usedCS.baseB + usedCS.radius/2,
123 usedCS.radius/2));
124
125 }
126 usedCS = (ColorSpace)availableSpacesList[listToRead].removeFirst();
127 Color res = new Color(usedCS.baseR + usedCS.radius/2,
128 usedCS.baseG + usedCS.radius/2,
129 usedCS.baseB + usedCS.radius/2);
130 usedSpacesList.addLast(usedCS);
131 listToRead++;
132 res = res.brighter();
133 return res;
134 }
135
136
141 class ColorSpace{
142
150 ColorSpace(int r, int g, int b, int radius){
151 baseR = r;
152 baseG = g;
153 baseB = b;
154 this.radius = radius;
155 }
156
157
159 int baseR, baseG, baseB;
160
161 int radius;
162 }
163
164
165 LinkedList[] availableSpacesList = new LinkedList[8];
166
167
168 LinkedList usedSpacesList = new LinkedList();
169
170
171 int listToRead = 0;
172
173 }